वर्तमान में हम अपने एटम आधारित एवियनिक्स डिवाइस के लिए एक गैर-क्रिटिकल मूविंग मैप टाइप एनवाकॉम समाधान विकसित कर रहे हैं। प्रोटोटाइप पायथन/क्यूटी में किया गया है, अब मुझे "वास्तविक" ऐप के लिए उपयोग करने वाली भाषा पर निर्णय लेने की आवश्यकता है। एडा या सी/सी ++। मैं 12 साल के लिए एक सी ++ डेवलपर रहा हूं और भाषा को नफरत करता हूं। एडा आशाजनक प्रतीत होता है, लेकिन मैं इसके समर्थन बुनियादी ढांचे, उपलब्ध पुस्तकालयों, डेवलपर उपलब्धता आदि के बारे में थोड़ा चिंतित हूं। क्या यहां कोई भी इससे पहले रहा है? आपके निष्कर्ष क्या हैं?एडीए?
एडीए?
उत्तर
(एक वास्तविक एडीए डेवलपर की ओर से एक प्रतिक्रिया)
अपनी आसन्न मृत्यु की भविष्यवाणी के विपरीत, एडीए अभी भी ठीक साथ जा रहा है। भाषा का वर्तमान संस्करण Ada 2005 है, और Ada 2012 के लिए अद्यतन अंतिम रूप देने की प्रक्रिया में हैं।
एडा आधुनिकीकरण से गुज़रना जारी रखता है और उद्योग द्वारा विकसित किए जाने पर नई सॉफ्टवेयर इंजीनियरिंग सुविधाओं और प्रथाओं को शामिल करता है। (और रिवर्स भी सच है - अंतर्निहित समेकन 1 9 83 से कोर एडा फीचर रहा है, और जो अब "आधुनिक" प्रोग्रामिंग भाषाओं में अपना रास्ता बना रहा है। :-)
हर नया नहीं उदाहरण के लिए, एडा द्वारा फीचर और प्रैक्टिस को अपनाया जा रहा है, अडा एक कार्यात्मक भाषा में नहीं जा रहा है। लेकिन सॉफ्टवेयर की उत्पादकता, विश्वसनीयता और सुरक्षा को बढ़ाने वाली उन सुविधाओं को इस तरह से शामिल किया गया है जो एडा के अंतर्निहित वास्तुकला और मंशा के अनुरूप है।
यह निश्चित रूप से सच है कि एडा व्यापक रूप से उपयोग की जाने वाली प्रोग्रामिंग भाषा नहीं है, लेकिन इसमें एक प्रतिबद्ध डेवलपर समुदाय है, जो विकासशील परियोजनाओं के लिए प्रश्नों, चिंताओं और सलाह के साथ मदद करने के लिए लगभग हमेशा अधिक इच्छुक हैं और सीख रहे हैं भाषा। संसाधनों में यहां स्टैक ओवरफ्लो में शामिल है (Ada tag देखें), comp.lang.ada, यहां तक कि Reddit।
एडा डेवलपर उपलब्धता के लिए, यह एक "कैच -22" स्थिति है। क्योंकि इसका व्यापक रूप से उपयोग नहीं किया जाता है, कम डेवलपर हैं। क्योंकि कम डेवलपर हैं, कंपनियां परियोजनाओं में इसका इस्तेमाल करने से दूर रहती हैं, और क्योंकि परियोजनाओं के लिए इसका उपयोग नहीं किया जाता है, डेवलपर्स इसमें नौकरियों की तलाश नहीं करते हैं।
मैं प्रमाणित कर सकता हूं कि कई जानकार वर्तमान और पूर्व एडा प्रोग्रामर हैं जो भाषा के साथ काम करना पसंद करते हैं, और विशेष रूप से आपके द्वारा वर्णित प्रकार के आवेदन के लिए ऐसा करने में रुचि रखते हैं - इसके बारे में पता था। यदि आपने एडा के साथ जाने की प्रतिबद्धता की है, और उसके बाद अनापा डेवलपर्स के लिए अप्रत्यक्ष रूप से विज्ञापित किया गया है - राक्षस पर, जहां भी आप विज्ञापन करते हैं, comp.lang.ada या Reddit पर स्वाद से - मुझे लगता है कि एडा डेवलपर्स की उपलब्धता आपको और कई लोगों को आश्चर्यचकित करेगी अन्य संशयवादी।
आपकी परियोजना के साथ शुभकामनाएँ।
धन्यवाद, मैंने अभी "स्पार्क का उपयोग कर उच्च इंटीग्रटी सॉफ्टवेयर" का आदेश दिया है और मैं इसके माध्यम से काम करने की उम्मीद कर रहा हूं। – user478389
आपने अपने प्रश्न में कहा कि यह परियोजना महत्वपूर्ण नहीं है। ऐसा होने पर, आपको स्पार्क को शीर्ष पर थोड़ा सा मिल सकता है - सामान्य एडा, शायद स्टाइल गाइड या एडाकंट्रोल (http://adalog.pagesperso-orange.fr/adacontrol2.htm) जैसे अधिक स्वचालित टूल का उपयोग करके प्रतिबंधित हो सकता है, मिसरा सी के मानक के बारे में होना चाहिए http://www.adaworld.com/pdfs/misracandada.pdf की बजाय एक असंभव तुलना है। –
लिंक के लिए धन्यवाद, सराहना की। – user478389
आम तौर पर, कुछ स्थितियां हैं जहां मैं सी ++ पसंद करूंगा। यदि आपके कार्यक्रम में इसमें कोई सहमति नहीं है, और कुछ सी ++ हैं (सी नहीं, लेकिन सी ++) वहां पुस्तकालयों का उपयोग करना वास्तव में उपयोगी होगा, तो सी ++ शायद जाने का तरीका है।
हालांकि, अगर आपके सिस्टम डिज़ाइन के हिस्से के रूप में आपके पास समेकन होगा, तो एडा विशाल जीत है, क्योंकि यह इसे मूल रूप से समर्थन देता है। एक नौकरी मैं वास्तव में एक पूरी तरह पोर्टेबल रीयल-टाइम शेड्यूलर लिखा था। हमने पूरे सिमुलेशन (> 100KSLOC) को VxWorks से लगभग 2 घंटे में पूरी तरह से अलग विक्रेता के विंडोज कंपाइलर में पोर्ट किया है (सभी अपने अलग स्रोत कोड लाइब्रेरी सिस्टम से निपटने में व्यतीत हैं)।
कोई भी पुस्तकालय जिसमें सी लिंकेज है, एडा में पूरी तरह से उपलब्ध है, हालांकि कभी-कभी आप स्वयं को बाइंडिंग लिखने लगते हैं। यह एक और अधिक काम है, लेकिन आप अक्सर पाएंगे कि एक ही पुस्तकालयों के साथ निपटने वाले अन्य लोगों ने आपके लिए पहले से ही काम किया है। उदाहरण के लिए मेरा मानना है कि सभी Win32 उपलब्ध बाइंडिंग उपलब्ध हैं। फिर भी, नए बनाना आसान इतना आसान है कि मैं अक्सर इसे एक इंटरफेस प्रदान करने के लिए खुद को कर रहा हूं जो मुझे बेहतर पसंद है।
एडा में कुछ विशेषताएं भी हैं जो आईएमएचओ इसे निम्न स्तर की प्रणाली के प्रोग्रामिंग के लिए उपलब्ध प्रमुख भाषा बनाती है। उदाहरण के लिए, भाषा आपको बिल्कुल निर्दिष्ट करने की अनुमति देती है जहां रिकॉर्ड में प्रत्येक फ़ील्ड कितना बड़ा होता है। अन्य प्लेटफ़ॉर्म के साथ संवाद किए गए हार्डवेयर या डेटा से निपटने में यह महत्वपूर्ण है। सी ++ वर्तमान में केवल आपको यह निर्दिष्ट करने की अनुमति देता है कि प्रत्येक फ़ील्ड कितना बड़ा है। मैं अभी इस से निपट रहा हूं, और इसे बहुत निराशाजनक लगता हूं।
सिस्टम के प्रोग्रामिंग के लिए अन्य हत्यारा सुविधा यह है कि डिफ़ॉल्ट रूप से सभी सरणी सीमाओं की जांच की जाती हैं। यदि आप चाहें तो आप इसे दक्षता के लिए बंद कर सकते हैं, लेकिन डिफ़ॉल्ट सुरक्षा है। IMHO यह डिफ़ॉल्ट है जो होना चाहिए। सी ++ में यदि आप सुरक्षा चाहते हैं, तो आपको इसे स्वयं कोड करने के लिए अपने रास्ते से बाहर जाना होगा, या std :: vector (और ) जैसे सुरक्षित वर्ग का उपयोग केवल .at()
विधि का उपयोग करें। आपने कितनी बार कभी देखा है ऐसा करो? कभी नहीं? मुझे या तो।)
सी libs से उन बॉयलरप्लेट आयात स्वचालित करने के लिए कोई उपकरण हैं? – user478389
ऐसा लगता है जैसे गाना एक बाइडिंग जनरेटर के साथ आता है http://gcc.gnu.org/onlinedocs/gnat_ugn_unw/Running-the-binding-generator.html। यदि आप उस कंपाइलर (ACT से खरीदा गया) का उपयोग कर रहे हैं, तो शायद यह आपका समाधान है। यदि नहीं, तो मैं इसे गैर-जीपीएल काम के लिए टालना चाहूंगा क्योंकि उनके मुफ्त संस्करण शायद बोली-प्रक्रिया जीपीएल बनाते हैं। आप http://www.adapower.com/index.php?Command=Class&ClassID=Utilities&Title=Ada+ उपयोगिता पर अन्य जेनरेटर देख सकते हैं। जैसा कि मैंने कहा, मैं आमतौर पर अपना खुद का बनाना पसंद करता हूं। यदि आप इसे यांत्रिक रूप से करते हैं, तो आप एक सी इंटरफ़ेस (यक!) –
मैं अपने विचारों में फेंक दूंगा। त्वरित संदर्भ के लिए: मैं वर्तमान में उन बड़ी कंपनियों में से एक में एडा में काम कर रहा हूं (लॉकहीड नहीं, बल्कि पर्याप्त बंद)। मैं कोर पर एक सी प्रोग्रामर हूँ। (सी ++, सी #, और जावा भी इस्तेमाल किया गया)
एडा एक भाषा के रूप में ठीक है। इसमें कुछ अच्छी चीजें हैं जिन्हें आप सी/सी ++ में नहीं प्राप्त कर सकते हैं। वास्तविक समय की महत्वपूर्ण प्रणालियों के लिए, यह वास्तव में अच्छा है। इसमें थोड़ा सा उपयोग होता है, लेकिन सीखना काफी आसान है।
नकारात्मक भाषा वास्तव में भाषा धारणा है। अधिकांश इंजीनियरों मुझे पता है कि एडा की तरह और चुनना पुराने हैं (45+)। उनमें से 2 प्रकार के प्रोग्रामर हैं: वे लोग जो वास्तव में एडा में वास्तव में अच्छे हैं और यह सही कर सकते हैं, और जो लोग "एडी" जानते हैं, लेकिन इसे 70 भाषाओं के पुराने तरीके से स्टाइल प्रतिनिधि के रूप में प्रोग्राम करते हैं। वे अच्छे एडी प्रोग्रामर यहां अत्यधिक मूल्यवान हैं। उन्हें छीनने के लिए एक छोटी सी कंपनी के लिए, मुझे लगता है कि आपको उन पर कुछ बड़ी नकद छोड़नी होगी। उनके पास 4-5 सप्ताह की छुट्टियां हैं, 6 आंकड़े वेतन (यहां तक कि सस्ती जगहों पर रहने के लिए) और सभी प्रकार के लाभ भी हैं। मुझे उम्मीद है कि यह उम्रवादी नहीं लगता है, लेकिन यह एक तरह से है और एक छोटी कंपनी के बारे में सोचने के लिए कुछ है। यदि आप डलास/फोर्ट वर्थ जैसे प्रमुख तकनीकी क्षेत्र में हैं, तो यह ठीक हो सकता है। जैसा कि आपने अपनी टिप्पणियों में उल्लेख किया है, अधिकांश युवा प्रोग्रामर एडा सीखने के लिए उत्साहित नहीं हैं। यह अच्छी तरह से भुगतान कर सकता है और एक भाषा के रूप में ठीक हो सकता है, लेकिन यह लगभग विपणन या रोमांचक नहीं है।
यदि मैं रीयल-टाइम एम्बेडेड सिस्टम प्रोजेक्ट शुरू कर रहा था, तो मैं केवल सी (या सी ++ अगर आपको ओओ की आवश्यकता हो) से चिपके रहूंगा। एम्बेडेड के लिए मैं वास्तव में सी ++ पर सी पसंद करता हूं क्योंकि मेरे अनुभव में, इंजीनियरों एम्बेडेड सिस्टम को ओओ में मजबूर करने की कोशिश करते हैं और सुविधाओं का उपयोग करते हैं क्योंकि वे वहां हैं, लेकिन आपका माइलेज भिन्न हो सकता है। सी या सी ++ के साथ: 1. प्रोग्रामर के विशाल पूल से चुनने के लिए। 2. मनुष्य को ज्ञात हर उपकरण को इसके साथ काम करने के लिए बनाया गया है (कई मुफ्त हैं)। 3. ऑनलाइन संसाधन अंतहीन हैं।
यह आपको केवल काम करने की अनुमति देगा। यदि आपके पास ग्रीन हिल्स और वीएक्सवर्क्स जैसे जेएजी का उपयोग करके कुछ महान डिबगर्स तक पहुंच है, तो यह वास्तव में विकास की गति को धक्का देता है।
ऐसे प्राग प्रतिबंध हैं जिनका उपयोग आप भाषा की कुछ विशेषताओं को प्रतिबंधित करने के लिए भी कर सकते हैं। स्पार्क का उपयोग करने के लिए वैकल्पिक हो सकता है।
एडा एक ब्लॉकबस्टर भाषा नहीं है (हालांकि जो मैंने पढ़ा है, मैं वास्तव में और अधिक सीखने में रूचि रखता हूं) का कारण है क्योंकि अधिकांश प्रोग्रामर त्वरित और गंदे चाहते हैं। बस माइक्रोसॉफ्ट विंडोज देखें। उन्होंने सी (और x86 असेंबलर का थोड़ा सा) में पहले संस्करण लिखे थे। पूरे राक्षसों को खत्म करने में उन्हें 2 साल लग गए, और अब भी यह नाजुक है। आसानी से वायरस और कीड़े सिस्टम घुसपैठ कर सकते हैं इतना बुरा है कि वे विंडोज 8 में Win32 एपीआई से दूर चलने की कोशिश कर रहे हैं। मुझे यकीन है कि यदि ओएस इसके बजाय एडी में लिखा गया था, तो यह बहुत अधिक होगा मजबूत और एक गुच्छा अब से अधिक सुरक्षित है
के साथ नियमित रूप से समाप्त होते हैं, मुझे पता है कि यह पुराना है, लेकिन डॉस पर चलते समय विंडोज का पहला संस्करण पास्कल में लिखा गया था। – Lucretia
सुनिश्चित नहीं है कि आप कभी भी यह टिप्पणी देखेंगे, लेकिन आप किस भाषा में अंत में जाने का फैसला करते थे और यह कैसे निकला? –
हमने एप्लिकेशन के कुछ कोर पार्ट्स को सी ++ पर पोर्ट किया और बाकी को पायथन में रखा। दुर्भाग्य से, काम करने वाले कॉकपिट डिवाइस के बावजूद कंपनी आगे बढ़ने से पहले दिवालिया हो गई। हमें कभी प्रमाणित नहीं हुआ लेकिन मामूली परिवर्तन के माध्यम से इसे दो कॉकपिट में लाने में कामयाब रहा। उस ने कहा, इस्तेमाल की जाने वाली भाषा हमारी सबसे छोटी समस्या थी। हमारा सबसे बड़ा आईपैड और एंड्रॉइड डिवाइस पर हमला था। – zeroc8