एमसीयू के साथ कार्यात्मक प्रोग्रामिंग


12

हास्केल, LISP या योजना जैसी कार्यात्मक भाषाएं प्रोग्रामर को कार्यात्मक प्रोग्रामिंग प्रतिमान का उपयोग करके जल्दी से काम करने की अनुमति देती हैं । उनके पास अपनी अक्षमताएं हैं , लेकिन मेरे आवेदन में कार्यक्रम की दक्षता की तुलना में प्रोग्रामर दक्षता पर अधिक जोर दिया गया है।

मैं मशीन नियंत्रण, आदि करने के लिए एक माइक्रोकंट्रोलर पर कार्यात्मक प्रोग्रामिंग का उपयोग करना चाहता हूं।

न्यूनतम सिस्टम संसाधन जैसी क्या सीमाएँ हैं?
इन भाषाओं के कौन से उदाहरण कार्यान्वयन उपलब्ध हैं?


1
यदि आपका प्रश्न "क्या यह सबसे शक्तिशाली प्रोग्रामिंग भाषा के साथ किसी भी मशीन को प्रोग्राम करने के लिए लायक नहीं है, तो आप अपने हाथों को प्राप्त कर सकते हैं," C ++ और जावा प्रश्नों को पढ़ने की सलाह दी जाती है (कार्यात्मक प्रोग्रामिंग के बजाय OOP के बारे में)।
केविन वर्मर

1
आपका पहला पैराग्राफ तर्कशील के रूप में सामने आता है, जिसने आपको कुछ करीबी वोटों का जाल बिछाया है। कुछ और निष्क्रिय करने पर विचार करें ("मशीन नियंत्रण के लिए कार्यात्मक प्रोग्रामिंग का उपयोग करने में मेरी दिलचस्पी है, एम्बेडेड सिस्टम के लिए हास्केल / एलआईएसपी / योजना कार्यान्वयन के क्या उदाहरण हैं") या इसे पूरी तरह से हटा दें।
केविन वर्मर

2
मैं आपके "अयोग्य" कथन को नहीं खरीदता। आप हॉबीस्ट / प्रोटोटाइप पक्ष की ओर अत्यधिक पूर्वाग्रह प्रदर्शित करते हैं - कम मात्रा (उर्फ: 1)। C / C ++ / asm का परिणाम छोटे, तेज कोड में होता है जो हजारों या लाखों बार प्रवर्धित होता है जब आप प्रोसेसर का उपयोग केवल पर्याप्त गति और स्थान के साथ कर सकते हैं। एंबेडेड एम्बेडेड है। आप एक सामान्य-उद्देश्य ओएस पर प्रोग्रामिंग नहीं कर रहे हैं।
निक टी

4
@Nick T - "C / C ++ / asm का परिणाम छोटे, तेज कोड में होता है जो हजारों या लाखों बार प्रवर्धित होता है जब आप प्रोसेसर का उपयोग केवल पर्याप्त गति और स्थान के साथ कर सकते हैं" - रखरखाव के बारे में क्या? एक कार्यात्मक भाषा अक्सर एक ही पंक्ति में कर सकती है कि सी-प्रोग्राम को 10 एस करने की आवश्यकता होती है, जिसका अर्थ है कीड़े के लिए कम जगह। इसके अलावा, उन्हें अनुपालन (यानी हास्केल) किया जा सकता है, और लक्ष्य पर चलने के लिए बनाया गया है, जो दुभाषियों की तुलना में तेज है। मैं इस विषय को थोड़ा तलाशना चाहता था क्योंकि एक संकलित-हास्केल शायद उतना ही तेज़ हो, लेकिन सी ऐप कहने की तुलना में जल्दी विकसित हो सकता है। यथास्थिति पर सवाल उठाना चाहता था।
जे। पोलर

1
@ शेप्सइमुलेटर दुर्भाग्य से, आपकी पिछली टिप्पणियों की तरह इस तर्क को प्रश्न बनाते हैं।
कालेनजब

जवाबों:


11

ARMPIT स्कीम स्कीम लैंग्वेज (लेक्सिकली-स्कॉप्ड डायल ऑफ लिस्प) के लिए एक दुभाषिया है जो एआरएम कोर के साथ आरआईएससी माइक्रोकंट्रोलर्स पर चलती है। यह एल्गोरिथम भाषा योजना (r5rs) पर संशोधित रिपोर्ट में कुछ एक्सटेंशन (I / O के लिए) और कुछ चूक (MCU मेमोरी के भीतर फिट करने के लिए) पर विवरण पर आधारित है। इसे आगे मल्टीटास्किंग और मल्टीप्रोसेसिंग का समर्थन करने के लिए डिज़ाइन किया गया है। आर्मपिट योजना को शैक्षिक सेटिंग्स के अनुकूल होने की उम्मीद है, जिसमें नियंत्रण और इंस्ट्रूमेंटेशन पर पाठ्यक्रमों में छात्र परियोजनाएं, या कैपस्टोन डिज़ाइन पाठ्यक्रम शामिल हैं जहां माइक्रोकंट्रोलर्स की आवश्यकता होती है। इसका अर्थ है MCUs (जैसे। BASIC और FORTH) के लिए उपलब्ध व्याख्या की गई भाषाओं के स्पेक्ट्रम को समृद्ध करना और MCU- आधारित बायटेकोड दुभाषियों (जैसे स्कीम या जावा के लिए) और संकलित भाषाओं (जैसे। C) के लिए एक विकल्प हो सकता है।

http://armpit.sourceforge.net/

तुम कहो:

हास्केल, LISP, या योजना जैसी भाषाओं की तुलना में C, C ++, असेंबली आदि का उपयोग करना काफी अक्षम है

उच्च स्तरीय भाषाओं का उपयोग करना प्रोग्रामर समय का अधिक कुशल उपयोग है, लेकिन अक्सर कंप्यूटिंग संसाधनों का कम कुशल उपयोग हो सकता है। वॉल्यूम में निर्मित एम्बेडेड सिस्टम के लिए, लागत और प्रदर्शन अक्सर विकास के प्रयास से अधिक प्राथमिकता वाले होते हैं।


7

आप एटम / कोपिलोट का उपयोग करके हास्केल के साथ एवीआर नियंत्रकों को भी प्रोग्राम कर सकते हैं, उदाहरण के लिए http://leepike.wordpress.com/2010/12/18/haskell-and-hardware-for-the-holidays/


2
हास्केल वास्तव में अच्छी चीज है <3
ट्राएगवे लाउगस्टोएल

5

C, C ++, और असेंबली सभी मशीन भाषा के बहुत करीब हैं। उच्च स्तर की भाषा का उपयोग करके, आप अधिक तेजी से / आसान / आदि विकास के बदले में अतिरिक्त ओवरहेड जोड़ रहे हैं।


3
-1: मैं वास्तव में इस जवाब से सहमत नहीं हूं। यद्यपि असेंबली का मशीनी भाषा के करीब होने का आपका अधिकार, C और C ++ बहुत भिन्न उच्च स्तरीय भाषाएँ हैं।
बीजी 100

1
@ BG100, मैं वास्तव में सी के भीतर कहीं "उच्च स्तर / निम्न स्तर" रेखा खींचूंगा, बल्कि इसे उच्च स्तरीय भाषा कहूंगा। अंकगणित, सूचक (स्ट्रिंग) संचालन, और अन्य सामान्य बुनियादी कार्यों का प्रदर्शन करते समय, आमतौर पर संकलित करने वाले निर्देशों में सीपीयू होता है जो डेटा को बिना किसी स्तर के अमूर्त परतों के सीधे हेरफेर करता है।
निक टी

@ निक टी: मैं आपकी बात देखता हूं, लेकिन इस पर विचार करें: यदि आप एक रुकावट दिनचर्या लिखते हैं, जो आमतौर पर जितनी जल्दी हो सके निष्पादित करने की आवश्यकता होती है, सी में आपको पता नहीं होगा कि इसे चलाने में कितना समय लगेगा, लेकिन कोडांतरक में आप कर सकते हैं बस निर्देश गिनें। मुझे लगता है कि निम्न स्तर जान रहा है कि वास्तव में आपके कार्यक्रम में चल रहा है, आप यह सुनिश्चित करने के लिए नहीं जानते हैं कि आपके सी। का उपयोग कर रहे हैं
BG100

@ BG100: एक ही असेंबलर इंस्ट्रक्शन ऑपरेशंस और उनके एड्रेसिंग मोड्स के आधार पर निष्पादित करने के लिए अलग-अलग संख्या में साइकिल ले सकता है। C में यद्यपि, एक बार संकलित करने के बाद आपको स्थिर कोड मिलता है जो नहीं बदलता है (नहीं कर सकता)। सच है, यह कुछ हद तक कठिन तर्क है, लेकिन अगर हम एक बड़ी लाल रेखा खींचने की कोशिश करने के लिए minutiae पर बहस करने जा रहे हैं ...
निक टी

3

मैं हाल ही में पायथन में एक एआरएम बोर्ड की प्रोग्रामिंग कर रहा हूं, और मुझे लगता है कि यह बहुत अच्छा है। यह वास्तविक समय के नियंत्रण के लिए अच्छा नहीं है, लेकिन मैं अधिक वेब-संबंधित सामान कर रहा हूं, जो सी की तुलना में उच्च-स्तरीय भाषा में कहीं अधिक सुखद है।


3

अधिकांश माइक्रोकंट्रोलर अभी भी 8 और 16-बिट डिवाइस हैं (हालांकि यह धीरे-धीरे बदल रहा है)। अब तक अन्य उत्तरों में उल्लिखित उच्च-स्तरीय भाषाओं (योजना और पायथन) के दो उदाहरण दोनों 32-बिट एआरएम कोर पर चल रहे हैं। छोटे 8 और 16-बिट डिवाइस (जिनकी केवल कुछ डॉलर की लागत हो सकती है) में उल्लेखित भाषाओं का समर्थन करने के लिए पर्याप्त रैम नहीं है - आमतौर पर उनके पास केवल कुछ KB रैम होती है।

इसके अलावा, इन उच्च-स्तरीय भाषाओं को कम विलंबता बाधा हैंडलर और पसंद लिखने के लिए डिज़ाइन नहीं किया गया है। एक माइक्रोकंट्रोलर इंटरप्ट हैंडलर को प्रति सेकंड सैकड़ों या हजारों बार कहा जाना असामान्य नहीं है, और हर बार दसियों माइक्रोसेकंड या उससे कम में अपने कार्य को करने के लिए आवश्यक है।


1
योजना mid० के दशक के उत्तरार्ध में और बहुत जल्दी .० के दशक में विकसित हुई थी। किसी भी तरह से योजना में 32-बिट प्रोसेसर या मेगाबाइट मेमोरी की आवश्यकता नहीं होती है। 80 के दशक के मध्य में एटी-क्लास पीसी के लिए योजना उपलब्ध थी। हाल के कार्यान्वयन अधिक संसाधन-समृद्ध वातावरण के लिए अनुकूलित किए जा सकते हैं, लेकिन उन योजनाओं के स्पष्ट उदाहरण हैं जो आजकल "मिनिस्क्यूल" कंप्यूटिंग प्लेटफार्मों पर चलते हैं।
फोटॉन

@ ThePhoton मैं दुरुस्त खड़ा हूं। हालांकि मुझे बीआईटी परियोजना के बारे में पता था, जो प्रोसेसर के दसियों मेमोरी (जो कि सबसे छोटे माइक्रोकंट्रोलर पर उपलब्ध है) से अधिक के साथ प्रोसेसर को लक्षित करता है, मैंने अभी PICBIT की खोज की , यूनिवर्सिट डे डी मॉन्ट्रियल और यूनिवर्सिटि लावल में छात्रों के एक जोड़े द्वारा डिज़ाइन किया गया, जो कि वास्तविक योजना कार्यक्रमों को PIC प्रोसेसर पर 2k RAM के साथ चलाने की अनुमति देता है। बहुत अद्भुत।
tcrosley

3

लुआ भाषा के साथ कुछ कार्यात्मक प्रोग्रामिंग करना संभव है। वास्तव में, लुआ एक उत्परिवर्ती-प्रतिमान भाषा है; विकिपीडिया का दावा है कि यह एक 'पटकथा, अनिवार्य, कार्यात्मक, वस्तु-उन्मुख, प्रोटोटाइप-आधारित' भाषा है। भाषा किसी एक प्रतिमान को लागू नहीं करती है, लेकिन इसके बजाय प्रोग्रामर को स्थिति के लिए जो भी प्रतिमान लागू होता है उसे लागू करने की अनुमति देने के लिए पर्याप्त लचीला है। यह योजना से प्रभावित है।

लुआ की विशेषताओं में प्रथम श्रेणी के कार्य , लेक्सिकल स्कूपिंग और क्लोजर और कोराउटाइन शामिल हैं , जो कार्यात्मक प्रोग्रामिंग के लिए उपयोगी हैं। आप देख सकते हैं कि Lua उपयोगकर्ताओं के विकी पर इन सुविधाओं का उपयोग कैसे किया जाता है, जिसमें एक पृष्ठ कार्यात्मक प्रोग्रामिंग के लिए समर्पित है । मैं इस Google कोड परियोजना में भी आया था , लेकिन मैंने इसका उपयोग नहीं किया है (यह दावा करता है कि हास्केल, जिसका उल्लेख एक अन्य भाषा है) से प्रभावित होगा।

eLua एक कार्यान्वयन है जो ARM7TMDI, Cortex-M3, ARM966E-S और AVR32 आर्किटेक्चर के लिए कई विकास बोर्डों के लिए कॉन्फ़िगर किया गया है, और यह ओपन-सोर्स है ताकि आप इसे अपने स्वयं के प्लेटफॉर्म के लिए कॉन्फ़िगर कर सकें। Lua ANSI C में लागू किया गया है और पूरे स्रोत का वजन 200kB से कम है, इसलिए आपको इसे C कंपाइलर के साथ अधिकांश प्लेटफार्मों के लिए बनाने में सक्षम होना चाहिए। कम से कम 128k फ्लैश और 32k RAM की सिफारिश की जाती है। मैं इसके लिए एक PIC32 पोर्ट पर काम कर रहा हूं (अभी भी 'Get PIC32 बोर्ड' चरण में, हालांकि)।

लुआ के बारे में महान बात यह है कि इसे गोंद भाषा के रूप में डिजाइन किया गया था, इसलिए सामान के लिए सी एक्सटेंशन लिखना बहुत आसान है, जो तेजी से (जैसे कि बीच में आदि) होना चाहिए, और तेजी से करने के लिए भाषा की गतिशील, व्याख्या की गई विशेषताओं का उपयोग करें कार्यक्रम तर्क में विकास।

लुआ एक विशुद्ध रूप से कार्यात्मक भाषा नहीं है, लेकिन आप इसमें बहुत अधिक कार्यात्मक प्रोग्रामिंग कर सकते हैं, यह तेज़ और छोटी ( अन्य स्क्रिप्टिंग भाषाओं की तुलना में ) है, और आपको किसी प्रोग्राम को आज़माने के लिए अपने डिवाइस को फिर से चालू करने की आवश्यकता नहीं है। वहाँ भी एक इंटरैक्टिव दुभाषिया है!


1

"क्या कठिन समस्याओं को हल करने के लिए एमसीयू पर एक कार्यात्मक भाषा के साथ कार्यात्मक प्रोग्रामिंग करने के तरीके हैं?"

हाँ, तरीके हैं। लेकिन नकारात्मक पक्ष आपको 32-बिट प्रोसेसर, एमएमयू, 128 एमबी रैम, एसएसडी, एक आरटीओएस और $ $ $ की आवश्यकता है।

माइक्रोकंट्रोलर माइक्रोप्रोसेसरों की तुलना में अलग हैं। माइक्रोकंट्रोलर केवल 8-बिट CPU, 1K RAM, 8K ROM हो सकता है, लेकिन इसमें UART, PWM, ADC, इत्यादि का निर्माण किया गया है और इसकी कीमत केवल $ 1.30 है।

तो आप सभी उच्च स्तरीय भाषाएं चला सकते हैं, लेकिन इसे बनाने में बहुत अधिक लागत आती है।


2
मुझे लगता है कि आपको माइक्रोकंट्रोलर की अपनी परिभाषा पर फिर से विचार करने की आवश्यकता है। कई माइक्रोकंट्रोलर्स के पास अब फ्लैश की 128kB या उससे अधिक और कुछ छोटी भाषाओं के लिए दुभाषिया चलाने के लिए 64kB या अधिक RAM है। ऐसा लगता है कि आप एक एम्बेडेड लिनक्स डिवाइस के लिए चश्मा दे रहे हैं; मुझे लगता है कि ओपी एक समर्पित बंदरगाह के लिए कह रहा था।
केविन वर्मेयर

1
यदि आप 8-बिट MCU के लिए $ 1.30 का भुगतान कर रहे हैं, तो कई 32-बिट MCU हैं जो सस्ते हैं। यह भी ध्यान रखें कि बाजार पर 8-बिट MCUs बेहद कोड-अप्रभावी आर्किटेक्चर हैं, 80 के दशक की शुरुआत से विरासत में मिले डिजाइनों के साथ।
लुंडिन

0

यह पुस्तक एफपी के हल्के अनुभव के साथ प्रोग्रामिंग करने का कुछ तरीका प्रदान करती है। http://www.state-machine.com/psicc2/

लेकिन वास्तविक FP को रनटाइम में फ़ंक्शन का निर्माण करने और उन्हें अपने प्रोग्राम में पास करने की क्षमता की आवश्यकता होती है। यहां हमें एक समस्या है: हम इस निर्माण कार्य का प्रतिनिधित्व कैसे कर सकते हैं? और हम इस कार्य को प्रभावी ढंग से कैसे कर सकते हैं? एक बड़ी प्रणाली पर, हम गतिशील संकलन का उपयोग कर सकते हैं जो पहले फ़ंक्शन एप्लिकेशन पर वास्तविक मशीन कोड उत्पन्न करता है। MCU पर हमारे पास फोर्थ लैंग्वेज कोर की तरह बहुत ही आदिम संकलक को लागू करने के लिए केवल RAM है।

एकमात्र तरीका है कि आप एफपी या ओओपी का उपयोग कर सकते हैं यदि आप पसंद करते हैं तो यह मेटाप्रोग्रामिंग है : जटिल कार्यात्मक / ओओपी प्रोग्राम लिखें जो एमसीयू (उदाहरण के लिए सी स्रोत कोड, या एलएलवीएम आईएल) के लिए कार्यक्रम उत्पन्न करते हैं । इस संस्करण में, आप प्रतिमान या प्रोग्रामिंग विधियों जटिलता से सीमित नहीं हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.