android - আপড - অ্যান্ড্রয়েড অপারেটিং সিস্টেমের উপর একটি হ্যাসেল প্রোগ্রাম চলছে




এন্ড্রয়েড ভার্সন আপডেট (4)

ফরনোট: এটি /r/haskell হ্যাশেল চালু থ্রেডের একটি এক্সটেনশান

আসুন ঘটনা নিয়ে শুরু করি:

  • অ্যান্ড্রয়েড একটি সন্ত্রস্ত অপারেটিং সিস্টেম
  • হ্যাসেল গ্রহের সেরা প্রোগ্রামিং ভাষা

অতএব, স্পষ্টভাবে, তাদের সংমিশ্রণ Android এর উন্নয়নকে আরও ভাল করে তুলবে। তাই মূলত আমি জানতে চাই যে কিভাবে আমি অ্যান্ড্রয়েড অপারেটিং সিস্টেমের জন্য হ্যাসেল প্রোগ্রাম লিখতে পারি। আমার প্রশ্ন হল:

অ্যান্ড্রয়েড অপারেটিং সিস্টেমে চালানো / চালানোর জন্য কিভাবে আমি একটি হ্যাসেল প্রোগ্রাম পেতে পারি?


আপনি কীভাবে এটি হ্যাসেল কম্পাইলার পেয়েছেন যা এন্ড্রয়েড এনডিকে দিয়ে লক্ষ্য করতে পারে যা এআরএম আর্কিটেকচারগুলির জন্য একটি GCC পোর্টের সাথে আসে। জেএইচসি তাড়াতাড়ি একটি খুব ছোট ইনফ স্টাইল ফাইলের সাথে এটি করতে পারে যা প্ল্যাটফর্মের বর্ণনা দেয় (শব্দ আকার, সি-কম্পাইলার, ইত্যাদি) আমি এইটি Wii হোমব্রু ডিভ কিট দিয়ে করেছি এবং এটি বেশ সহজ ছিল। যাইহোক জেএইচসি এখনও জটিল কোড সহ কিছু স্থিতিশীলতা সমস্যা রয়েছে যেমন আইও-এর সাথে একটি মানড ট্রান্সফরমার স্ট্যাক ব্যবহার করে তবে জে এইচসি গত 6 মাসে প্রচুর উন্নতি করেছে। জেএইচসিতে কাজ করে মাত্র একজন ব্যক্তি আমি শুধু তার চেয়ে বেশি মানুষকে সাহায্য করতে চাই।

অন্য বিকল্প হল এনএনসি জিকে লক্ষ্য করে জিএইচসি-র একটি "অনিবন্ধিত" বন্দর তৈরি করা, এটি আরও বেশি জড়িত প্রক্রিয়া কারণ GHC এই মুহুর্তে একটি সত্যিকারের ক্রস-কম্পাইলার নয় এবং আপনাকে বিল্ড সিস্টেমটিকে আপনার কোন অংশগুলির প্রয়োজন পরিবর্তন. আরেকটি বিকল্প এনএইচসি যা সিকে ক্রস-সংকলন করতে পারে, যেমন সিএ কম্পাইলারকে লক্ষ্য করে এনএইচসি তৈরি করার জন্য আপনার অবশ্যই জিএইচসি তৈরি করতে হবে, এনএইচসি তে GHC এর মতো অনেক হ্যাসেল এক্সটেনশান নেই।

একবার আপনার NDK GCC লক্ষ্য করা Haskell কম্পাইলারটি আছে, আপনাকে অ্যান্ড্রয়েড NDK JNI আঠালো কোড ফ্রেমওয়ার্ক (Android 2.3 থেকে যুক্ত করা) অথবা বাইরের জাভা-সি-হ্যাসেলের মধ্যে JNI আঠালো কোড অবশ্যই লিখতে হবে, পূর্ব বিকল্পটি সহজতর সমাধান এবং আমি সঠিকভাবে মনে রাখি তবে প্রকৃতপক্ষে নীচের Android সংস্করণের পূর্ববর্তী সংস্করণগুলির সাথে পিছনে সামঞ্জস্যপূর্ণ হতে পারে 2.3।

একবার আপনার কাছে এটি হেসেলে কোডটি তৈরি করা উচিত যা ভাগ করা লাইব্রেরি বা স্ট্যাটিক লাইব্রেরি যা এনডিকে জাভা আঠালো কোড (যা নিজেই একটি ভাগ করে নেওয়া লাইব্রেরি) তে লিঙ্কযুক্ত। যতদূর আমি সচেতন আপনি আনুষ্ঠানিকভাবে অ্যান্ড্রয়েড স্থানীয় নির্বাহ চালানো যাবে না। আপনি সম্ভবত একটি rooted ফোন দিয়ে এটি করতে পারে, এইভাবে আমি এই অর্থ অনুমান করি যে আপনি NDK gcc পোর্টটি জেনুইন এক্সিকিউটেবলগুলি জেনুইন জেনারেল জেনারেট করতে পারেন এমনকি অ্যাপ্লিকেশান স্টোরে নেটিভ এক্সিকিউটেবল বিতরণ করতে পারবেন না। এটি সম্ভবত এলএলভিএম ব্যবহার করার বিকল্পটি হত্যা করে, যদি না আপনি এলডিভিএম-এর সাথে কাজ করে NDK JNI পেতে পারেন।

অ্যান্ড্রয়েডের জন্য হ্যাসেল কম্পাইলার (যা এখনও একটি বড় বাধা) এর জন্য সবচেয়ে বড় বাধাটি হ'ল সবচেয়ে বড় সমস্যা হল যে কেউ NDK লাইব্রেরিগুলির জন্য বাঁধাই API গুলি লিখতে পারে যা একটি বিশাল কাজ এবং যদি পরিস্থিতি আরও খারাপ হয় তবে অ্যান্ড্রয়েড ইউআই কোড লিখতে হবে কারণ অ্যান্ড্রয়েড এসডিকে এই অংশটির জন্য কোন এনডিপি API নেই। যদি আপনি হ্যাস্কেল এ অ্যান্ড্রয়েড UI কোডটি করতে চান তবে কেউ JNI / C এর মাধ্যমে জাভাতে হ্যাস্কেল বাইন্ডিংগুলি লিখতে হবে। সীমাবদ্ধ লাইব্রেরিগুলি লেখার জন্য আরো স্বয়ংক্রিয় প্রক্রিয়া না থাকলে (আমি জানি কিছু আছে, তারা কেবল আমার জন্য যথেষ্ট স্বয়ংক্রিয় নয়) তবে এটির কিছু করার সম্ভাবনা কম।

L01man: কিভাবে এই কাজ সম্পর্কে একটি টিউটোরিয়াল আছে? প্রথম অংশে, আমি বুঝতে পারি যে আমাকে জেএইচসি ডাউনলোড করতে হবে। ইনফ ফাইলে লিখতে হবে এবং কীভাবে এটি ব্যবহার করতে হবে?

আমি এই প্রশ্নের উত্তর দেওয়ার আগে দয়া করে মনে রাখবেন যে আমি বেশ কয়েকবার জেএইচসি ব্যবহার করছি না, কারণ আমি মূলত এই এবং নতুন সংস্করণগুলি ছেড়ে দিয়েছি, যেহেতু আমি জটিল জটিল হ্যাসেল প্রোগ্রামগুলির কোড প্রজন্মের ক্ষেত্রে যখন jhc কত স্থিতিশীল তা জানি না তখন থেকেই আমি জানি না। JHC এর সাথে একটি বড় হ্যাসেল প্রোগ্রাম তৈরি করার আগে এটি কারো কাছে একটি সতর্কতা, আপনি পূর্ণ হওয়ার আগে আপনাকে কিছু ছোট পরীক্ষা করা উচিত।

jhc একটি ম্যানুয়াল http://repetae.net/computer/jhc/manual.html এবং সেট আপ-আপ ক্রস-সংকলন এবং বিকল্পগুলির সাথে .ini ফাইলের একটি বিভাগ আছে: http://repetae.net/computer/jhc/manual.html#crosscompilation

L01man: দ্বিতীয় অংশটি প্রথম বিকল্প। তৃতীয় দিনে তুমি যা বলেছ তা আমি জানি না।

শুরু করার আগে আপনার C এর কিছু জ্ঞান থাকা উচিত এবং Haskell ফরেন ফাংশন ইন্টারফেস (FFI) এবং সরঞ্জাম যেমন Hs2c ব্যবহার করে আরামদায়ক হতে হবে। আপনি Android লাইব্রেরিগুলির সাথে Android NDK এবং বিল্ডিং। Apk ব্যবহার করেও পরিচিত হতে হবে। আপনি সি-হ্যাসেল, জাভা / সি-হ্যাসেলের মধ্যে ইন্টারফেসে এটি জানতে এবং অ্যান্ড্রয়েডের জন্য হ্যাসেল প্রোগ্রামগুলি বিকাশ করতে হবে যা আপনি আনুষ্ঠানিকভাবে বাজার দোকানে বিতরণ / বিক্রি করতে পারবেন।

L01man: আমি বুঝতে পারি যে এর লক্ষ্য Android API এর জন্য বাঁধাই তৈরি করা। কিন্তু ... চতুর্থ অংশ বলে আমরা কি করতে পারি না। হাস্কেলের সাথে?

.apk শুধুমাত্র একটি অ্যাপ্লিকেশন প্যাকেজ ফাইল বিন্যাস এবং Android এসডিকে (NDK নয়) সাথে আসা সরঞ্জামগুলির সাথে তৈরি করা হয়েছে, এটি বাইনারিগুলি নিজেই তৈরি করতে খুব সামান্য। অ্যানড্রয়েড প্যাকেজগুলিতে নেটিভ শেয়ারকৃত লাইব্রেরি থাকতে পারে, এটি আপনার হ্যাস্কেল প্রোগ্রাম কী হবে এবং Android NDK এর মাধ্যমে স্থানীয় ভাগ / স্ট্যাটিক লাইব্রেরিগুলি তৈরি করা হয়।


আমি একবার একই Reddit থ্রেড জুড়ে এসেছিলেন, কিন্তু এটি পুরানো ছিল, এবং মন্তব্য বন্ধ ছিল। আমি ওপিকে একটা বার্তা পাঠালাম, কিন্তু নিশ্চিত না যে এটি প্রাপকের কাছে পৌছেছে কিনা। এখানে আমার পরামর্শ (পুরানো Androids জন্য কাজ করতে পারে যেখানে স্থানীয় ক্রিয়াকলাপ সম্ভব ছিল না)।

আমি (কিছু সময়ের আগে হ্যাস্কেলে বিকশিত, কিন্তু বর্তমানে স্মলটক এ চলেছি) বর্তমানে আমি অ্যান্ড্রয়েডের স্কুইক ভিএমের একটি পোর্ট তৈরি করছি। আমি যেভাবে এটি করছি তা হ্যাকেল-অন-অ্যানড্রয়েড প্রোজেক্টের সাথে কীভাবে মোকাবিলা করা যেতে পারে তার অনুরূপ: অ্যাপ্লিকেশনটির জাভা অংশ থেকে C কোডটি একত্রিত করতে হবে (মূলত Android এ যা করা যেতে পারে তা হল বিভিন্ন ইভেন্ট হ্যান্ডেল করুন; একটি অ্যাপ্লিকেশন ইভেন্টের জন্য পোল করতে পারে না এবং কোন ইভেন্ট লুপ নেই)। আমার ক্ষেত্রে কোডটি স্কুইক ভিএম বিল্ডিং টুলস দ্বারা উত্পন্ন হয়, এন্ড্রয়েডের হ্যাশেলের ক্ষেত্রে এটি হ'ল জেএইচসি এর জিএইচসি বা যেকোন সামনের অংশে ব্যবহৃত হবে। এই repo খুঁজছেন মূল্য হতে পারে:

http://gitorious.org/~golubovsky/cogvm/dmg-blessed/trees/master/platforms/android/project

"Src" এর অধীনে জাভা কোড রয়েছে যা ব্যবহারকারীর ইভেন্টের বাধা প্রদান করে এবং স্থানীয় কোডে পাঠায় (CogView ক্লাসটি দেখুন)। ভিএম-এর সি কোডটি সম্পূর্ণভাবে সেখানে নেই (squeakvm.org, এটির জন্য Cog শাখার দেখুন), তবে একটি ধারণা পেতে পারে। http://gitorious.org/~golubovsky/cogvm/dmg-blessed/trees/master/platforms/android/vm অধীনে দেখতে পারেন যা ইন্টারপ্রেটারে সি ফ্রন্টেন্ড (ব্যবহারকারী ইভেন্ট পরিচালনা, কিছু সময়সীমাবদ্ধকরণ ইত্যাদি সহ)। )

আশাকরি এটা সাহায্য করবে.

দিমিত্রি


সম্প্রতি আমার দৃষ্টিভঙ্গি নিয়ে আসা একটি ভাষা Eta

Eta এর কম্পাইলার GHC 7.10 এর একটি ফর্ক যা একটি JVM ব্যাকএন্ড রয়েছে। জেনারেট অ্যান্ড্রয়েড জাভা লাইব্রেরিগুলিতে কল করার জন্য অ্যান্ড্রয়েড অ্যাপ্লিকেশন লিখতে জেনারেট ফাংশন ইন্টারফেস ব্যবহার করতে জেনারেটেড জার ফাইলগুলি ব্যবহার করা সম্ভব।

ইয়ান লাইব্রেরি ব্যবহার করার জন্য একটি অ্যানড্রয়েড স্টুডিও প্রকল্প কনফিগার করার বিষয়ে ব্রায়ান ম্যাককেনা একটি ব্লগ পোস্ট লিখেছেন।






executable