आप यह कैसे करते हैं कि पहले हास्केल कंपाइलर मिल रहा है जो सी को एंड्रॉइड एनडीके के साथ लक्षित कर सकता है जो एआरएम आर्किटेक्चर के लिए जीसीसी पोर्ट के साथ आता है। जेएचसी तुच्छ रूप से एक बहुत ही छोटी इन्फिनिटी फ़ाइल के साथ कर सकता है जो प्लेटफ़ॉर्म (शब्द आकार, सी-संकलक, आदि) का वर्णन करता है मैंने इसे Wii होमब्रे डी किट के साथ किया है और यह काफी आसान था। हालाँकि, jhc में अभी भी कुछ जटिल मुद्दे हैं, जैसे कि IO के साथ monad ट्रांसफार्मर स्टैक का उपयोग करना, लेकिन पिछले 6 महीनों में jhc में बहुत सुधार हुआ है। JHC पर केवल एक ही व्यक्ति काम कर रहा है, मैं चाहता था कि अधिक लोग उसकी मदद कर सकें।
दूसरा विकल्प ndk gcc को लक्षित करते हुए GHC के "अनरजिस्टर्ड" पोर्ट का निर्माण करना है, यह एक बहुत अधिक सम्मिलित प्रक्रिया है क्योंकि GHC इस समय एक सही क्रॉस-कंपाइलर नहीं है और आपको बिल्ड सिस्टम को समझने की आवश्यकता है कि किन भागों की आवश्यकता है परिवर्तन। एक अन्य विकल्प एनएचसी है जो सी को क्रॉस-कंपाइल कर सकता है, जैसे जीएचसी आपको सी-कंपाइलर को निशाना बनाने की आवश्यकता है, एनएचसी में जीएचसी जैसे कई हास्केल एक्सटेंशन नहीं हैं।
एक बार जब आपके पास एनडीके जीसीसी पर हस्केल कंपाइलर का लक्ष्य होता है, तो आपको एंड्रॉइड एनडीके जेएनआई गोंद कोड फ्रेमवर्क (एंड्रॉइड 2.3 के बाद से जोड़ा गया) के लिए बाइंडिंग लिखना होगा या आपको जावा-सी-हास्केल के बीच जेएनआई गोंद कोड लिखना होगा, पूर्व विकल्प आसान है समाधान और अगर मुझे याद है कि वास्तव में 2.3 से नीचे Android के पिछले संस्करणों के साथ पीछे की ओर संगत हो सकता है।
एक बार जब आप यह कर लेते हैं तो आपको साझा पुस्तकालय या स्थिर पुस्तकालय के रूप में हास्केल कोड का निर्माण करना चाहिए जो NDK जावा गोंद कोड (जो स्वयं एक साझा पुस्तकालय है) में लिंक हो जाता है। जहां तक मुझे पता है कि आप आधिकारिक तौर पर एंड्रॉइड पर देशी निष्पादन को नहीं चला सकते हैं। आप शायद इसे एक रूट किए गए फोन के साथ कर सकते हैं, इस प्रकार मेरा मानना है कि आप एनडीके जीसीसी पोर्ट को केवल ठीक निष्पादित कर सकते हैं, तब भी आप ऐप स्टोर पर देशी निष्पादनयोग्य वितरित नहीं कर सकते। यह संभवतः LLVM का उपयोग करने के विकल्प को भी मारता है जब तक कि आप NDK JNI को LLVM के साथ काम नहीं कर सकते।
सबसे बड़ी बाधा एंड्रॉइड के लिए हास्केल कंपाइलर नहीं है (जो अभी भी एक बड़ी बाधा है) सबसे बड़ी समस्या यह है कि कुछ को एनडीके पुस्तकालयों के लिए बाध्यकारी एपीआई लिखना पड़ता है जो एक बहुत बड़ा काम है और अगर आप बदतर हैं android UI कोड लिखने की आवश्यकता है क्योंकि Android SDK के इस भाग के लिए कोई NDK API नहीं हैं। यदि आप हास्केल में android UI कोड करना चाहते हैं तो किसी को JNI / C के माध्यम से जावा को Haskell बाइंडिंग लिखना होगा। जब तक बाध्यकारी पुस्तकालयों को लिखने के लिए एक अधिक स्वचालित प्रक्रिया नहीं होती (मुझे पता है कि कुछ हैं, वे मेरे लिए पर्याप्त स्वचालित नहीं हैं) तब कुछ करने की संभावना काफी कम है।
L01man: यह कैसे करना है के बारे में एक ट्यूटोरियल है? पहले भाग के लिए, मुझे लगता है कि मुझे जेएचसी डाउनलोड करना होगा। मुझे inf फ़ाइल में क्या लिखना है और इसका उपयोग कैसे करना है?
कृपया ध्यान दें कि इस प्रश्न का उत्तर देने से पहले मैंने कुछ समय के लिए jhc का उपयोग नहीं किया है क्योंकि मैंने मूल रूप से यह लिखा है और नए संस्करण जारी किए गए हैं, इसलिए मुझे नहीं पता कि वर्तमान में जब अधिक जटिल हास्केल प्रोग्राम की कोड पीढ़ी की बात आती है, तो यह कितना स्थिर है। यह किसी के लिए एक चेतावनी है इससे पहले कि आप जेएचसी के साथ एक बड़ा हास्केल कार्यक्रम बनाने पर विचार करें, आपको पूर्ण होने से पहले कुछ छोटे परीक्षण करने चाहिए।
jhc के पास एक मैनुअल http://repetae.net/computer/jhc/manual.html और विकल्पों के साथ सेटिंग-संकलन और .ini फ़ाइल पर एक अनुभाग है: http://repetae.net/computer/jhc-manual.html .html # crosscompilation ।
L01man: दूसरा भाग पहले का एक विकल्प है। मुझे नहीं पता कि तीसरे में आपने क्या कहा।
शुरू करने से पहले आपको सी का कुछ ज्ञान होना चाहिए और हास्केल विदेशी फ़ंक्शन इंटरफ़ेस (एफएफआई) और एचएस 2 सी जैसे उपकरणों का उपयोग करने के साथ सहज होना चाहिए। आपको Android NDK का उपयोग करने और साझा पुस्तकालयों के साथ .apk से परिचित होना चाहिए। आपको सी-हास्केल, जावा / सी-हास्केल के बीच इंटरफेस करने और एंड्रॉइड के लिए हास्केल प्रोग्राम विकसित करने की आवश्यकता होगी, जिसे आप आधिकारिक तौर पर बाजार स्टोर पर वितरित / बेच सकते हैं।
L01man: मैं समझता हूं कि इसका लक्ष्य Android API के लिए बाइंडिंग बनाना है। लेकिन ... क्या चौथा भाग कहता है कि हम हास्केल के साथ .apk नहीं बना सकते हैं?
.apk सिर्फ एक ऐप पैकेज फ़ाइल प्रारूप है और इसे उन टूल्स के साथ बनाया गया है जो एंड्रॉइड एसडीके (एनडीके नहीं) के साथ आते हैं, यह बायनेरिज़ के निर्माण के लिए बहुत कम है। एंड्रॉइड पैकेज में देशी साझा पुस्तकालय शामिल हो सकते हैं, यह आपका हास्केल कार्यक्रम क्या होगा और देशी साझा / स्थिर पुस्तकालय एंड्रॉइड एनडीके के माध्यम से उत्पन्न होते हैं।