जब कोई नई प्रोग्रामिंग भाषा लिखता है, तो वे इसे क्या लिखते हैं?


162

कृपया मेरी अज्ञानता का बहाना करो। मैं PHP में दबोच रहा हूं और अपने पैरों को गीला ब्राउज़िंग एसओ कर रहा हूं, और एक सवाल पूछने के लिए मजबूर महसूस कर रहा हूं जिसे मैं वर्षों से सोच रहा हूं:

जब आप एक पूरी तरह से नई प्रोग्रामिंग भाषा लिखते हैं, तो आप इसे क्या लिखते हैं ?

यह शायद आप सभी प्रोग्रामर के लिए वास्तव में मूर्खतापूर्ण लगता है, जिनके लिए मेरे मन में बहुत सम्मान है, लेकिन यह मेरे लिए एक खतरनाक चिकन और अंडे की बात है। आप क्या करते हैं? अपने आप से कहो आज मैं एक नई भाषा का आविष्कार करने जा रहा हूँ! और फिर आग ... नोटपैड? क्या सभी संकलक पहले से मौजूद भाषाओं पर बनाए गए थे, जैसे कि एक को परेशान करने वाले थे जो सभी प्रोग्रामिंग भाषाओं को कभी एक राक्षसी शाखाओं वाले पेड़ पर तैयार कर सकते थे जो अंततः बाहर निकल गए थे ... मुझे पता है, कुछ पुराना है?

अपनी कमजोर बुद्धि के साथ, मुझे यह आकर्षक लगता है ... कृपया, मुझे शिक्षित करें!

जवाबों:


193

यह एक बेवकूफ सवाल नहीं है। यह एक उत्कृष्ट प्रश्न है।

जैसा कि पहले से ही संक्षिप्त उत्तर है, "एक और भाषा।"

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

लेकिन आप इसे आगे भी पीछे धकेल सकते हैं। पहले लिखे गए कार्यक्रमों के बारे में क्या?

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

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

लेकिन यह अभी भी खत्म नहीं हुआ है। यहां तक ​​कि इसमें सिर्फ कच्चे नंबरों वाली फाइल को अभी भी अनुवाद की जरूरत है। आपको अभी भी उन कच्चे नंबरों को कंप्यूटर में एक फाइल में लाना है।

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

और इससे पहले भी कंप्यूटर प्रोग्राम को प्लग बोर्ड के साथ हार्ड वायर्ड होना पड़ता था !


20
+1, मुझे लगता है कि यह उत्तर वास्तव में प्रश्न की भावना से मेल खाता है।
stderr

30
मैंने एक बार एक असेंबलर II वर्ग लिया और प्रोफेसर ने पूछा कि हमने वैकल्पिक क्यों चुना। मैं मजाकिया जवाब के लिए गया: "क्योंकि मैं एक आसान ए चाहता था।" सोचा कि मेरे पास सबसे अच्छा जवाब है, लेकिन हमारे पास शहर में एक हनीवेल संयंत्र था और अगले आदमी ने कहा "मैं पूरे दिन माइक्रोकोड लिखता हूं और मैं एक उच्च-स्तरीय भाषा सीखना चाहता था।"
टी। आरओबी

3
मैं अत्यधिक अनुशंसा करता हूं कोड: कंप्यूटर हार्डवेयर और सॉफ़्टवेयर की छिपी हुई भाषा । यह अनिवार्य रूप से इस उत्तर के रूप में एक ही सामग्री को कवर करता है, वैक्यूम ट्यूब से उच्च स्तरीय भाषाओं के लिए कंपाइलरों तक सभी तरह से।
MatrixFrog

कंप्यूटरों का विकास वैसे ही हुआ है जैसे इंसानों में, समय की तुलनात्मक रूप से असीम मात्रा में होता है।
गौरव ओझा

अब यह एक असंवेदनशील टिप्पणी होगी, लेकिन इसे लिखना होगा ... यह सभी आकारों, रूपों और सूचनाओं में शानदार जवाब है :-)
Lukáš dádek

23

सबसे आम जवाब है C। अधिकांश भाषाएं C या C के हाइब्रिड में कॉलबैक और "Lxer" जैसे फ्लेक्स और पार्कर जनरेटर जैसे AACC के साथ कार्यान्वित की जाती हैं । ये ऐसी भाषाएं हैं जिनका उपयोग एक उद्देश्य के लिए किया जाता है - किसी अन्य भाषा के वाक्यविन्यास का वर्णन करने के लिए। कभी-कभी, जब संकलित भाषाओं की बात आती है, तो उन्हें पहले सी में लागू किया जाता है। फिर एक नया संस्करण बनाने के लिए भाषा के पहले संस्करण का उपयोग किया जाता है, और इसी तरह। ( हास्केल की तरह ।)


1
कुछ भाषाओं को असेंबलर में लिखा जाता है, जैसे पिकोलिप। ( blog.kowalczyk.info/article/picoLisp-Arc-before-Arc.html )
प्रो। फाल्कन

1
लेक्स / याक (फ्लेक्स / बाइसन) कार्यक्रमों के बारे में क्या? क्या सी में भाषा बनाने के लिए इन्हें पूरक माना जाता है?
डेव

1
क्या आपके पास सबसे आम उत्तर C साबित करने के लिए कुछ है?
रिचर्डॉड

मैंने यहां सूची के माध्यम से जाना शुरू किया: google.com/Top/Computers/Programming/Languages/Open_Source फिर मैंने गलती से अपने संपादक की खिड़की को भाषा 10 पर बंद कर दिया, और जाने के लिए प्रेरणा खो दी। वैसे भी, अभी तक लगभग आधे सी में लागू किए गए थे और बाकी ज्यादातर खुद को बूटस्ट्रैपिंग के लिए।
प्रो। फॉकन

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

14

बहुत सी भाषाएं बूटस्ट्रैप की जाती हैं- जो स्वयं में लिखी गई हैं । जैसा कि आप ऐसा क्यों करना चाहते हैं, यह अक्सर अपने खुद के डॉगफूड खाने के लिए एक अच्छा विचार है ।

चिकन और अंडे के मुद्दे पर चर्चा करने वाला विकिपीडिया लेख । मुझे लगता है कि आप इसे काफी दिलचस्प पाएंगे।


5
जब आप अभी शुरू कर रहे हैं तो यह संभव नहीं है।
माइकल बोर्गवर्ड

1
हाँ, ज़ाहिर है। लेकिन बहुत सी भाषाएं इस तरह से लिखी जाती हैं एक बार यह संभव है। मैं इसे इंगित करना चाहता था क्योंकि किसी और के पास नहीं था, और मुझे लगता है कि यह एक महत्वपूर्ण बिंदु है।
रिचर्ड ओड

बूटस्ट्रैप शब्द का उपयोग करने के लिए +1। यह दिलचस्प है कि आपको अपने संकलक को दो बार संकलित करना होगा। पहली बार स्पष्ट रूप से आपके पास नंगे-हड्डियों के संकलक के साथ और 2 बार आपके द्वारा निर्मित संकलक के साथ है। कहें कि आपने अपने कंपाइलर में ऑप्टिमाइज़ेशन जोड़ा है। आपके द्वारा बनाया गया कंपाइलर उन ऑप्टिमाइज़ेशन के साथ कोड का उत्पादन कर सकता है, लेकिन जब तक आप इसे ऑप्टिमाइज़ करने वाले कंपाइलर के साथ दोबारा कंपाइल नहीं करते हैं, तब तक यह स्वयं ऑप्टिमाइज़्ड कोड नहीं चला रहा है।
Les

@ लेस- हां बूटस्ट्रैपिंग एक दिलचस्प अवधारणा है।
रिचर्ड

2
यहाँ बेतरतीब टिप्पणी। उम्र के पुराने सवाल का जवाब जो पहले आया था (चिकन या अंडा) वह चिकन पहले आया था। कारण यह है कि किसी चीज़ को पुन: पेश करने / दोहराने के लिए, आपको सबसे पहले रिप्रोड्यूसर / प्रतिकृति बनाने के लिए पहले से ही रिप्रोड्यूसर / रेप्लिकेटर होना चाहिए।
स्पाइसीवेनी

10

बहुत अधिक किसी भी भाषा, हालांकि रेखांकन और अन्य जटिल डेटा संरचनाओं के साथ काम करने के लिए अनुकूल एक का उपयोग करना कई चीजों को आसान बना देगा। प्रदर्शन कारणों के लिए उत्पादन संकलक अक्सर C या C ++ में लिखे जाते हैं, लेकिन OCaml, SML, Prolog, और Lisp जैसी भाषाएँ यकीनन भाषा के प्रोटोटाइप के लिए बेहतर होती हैं।

भाषा डिजाइन में कई "छोटी भाषाएं" भी उपयोग की जाती हैं। उदाहरण के लिए, सिंटैक्स और व्याकरण को निर्दिष्ट करने के लिए लेक्स और याक का उपयोग किया जाता है, और वे सी के लिए संकलित करते हैं (अन्य भाषाओं के लिए पोर्ट होते हैं, जैसे ओसमलैलेक्स / ओक्लेमैक और कई अन्य समान उपकरण।)

एक विशेष मामले के रूप में, नई लिस्प बोलियों को अक्सर मौजूदा लिस्प कार्यान्वयनों पर बनाया जाता है, क्योंकि वे अधिकांश समान बुनियादी ढांचे पर गुल्लक कर सकते हैं। स्कीम दुभाषिया को स्कीम में लिखना कोड के एक पृष्ठ के तहत किया जा सकता है, जिस बिंदु पर कोई भी आसानी से नई सुविधाएँ जोड़ सकता है।

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


4

वास्तव में आप अपनी पसंद की लगभग किसी भी भाषा में लिख सकते हैं। ऐसा कुछ भी नहीं है जो आपको रूबी में सी कंपाइलर लिखने से रोकता है। "आपको केवल इतना करना है कि प्रोग्राम को पार्स करें और संबंधित मशीन कोड का उत्सर्जन करें। यदि आप फ़ाइलें पढ़ / लिख सकते हैं, तो आपकी प्रोग्रामिंग भाषा संभवतः पर्याप्त होगी।

यदि आप एक नए प्लेटफ़ॉर्म पर स्क्रैच से शुरू कर रहे हैं, तो आप क्रॉस-कंपाइलिंग कर सकते हैं: अपने नए प्लेटफ़ॉर्म के लिए एक कंपाइलर लिखें, जो जावा में चलता है या मूल रूप से x86 पर चलता है। अपने पीसी पर विकसित करें और फिर कार्यक्रम को अपने नए लक्ष्य प्लेटफ़ॉर्म पर स्थानांतरित करें।

सबसे बुनियादी संकलक शायद असेंबलर और सी हैं।


हालांकि इस "किसी भी" भाषा को पुनरावर्ती कॉल का समर्थन करना चाहिए। अन्यथा एक सिंटैक्स विश्लेषक और एक पार्सर को लागू करना एक वास्तविक चुनौती होगी।

2
यदि आप किसी कार्य के लिए किसी अनुपयुक्त भाषा का चयन करते हैं, तो यह आपकी अपनी गलती है। यह किसी भी प्रोजेक्ट के लिए हो सकता है, न कि केवल कंपाइलर / दुभाषिए के लिए।
जिग्गीस्टार

4

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

एक अनुवादक एक भाषा में एक कार्यक्रम का आदान-प्रदान करता है और दूसरी भाषा में समकक्ष कार्यक्रम प्रस्तुत करता है। एक दुभाषिया किसी भाषा में एक प्रोग्राम इनपुट करता है और उसे चलाता है।

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

कई भाषाओं को अलग तरह से लागू किया जाता है। उदाहरण के लिए, javacएक अनुवादक है जो जावा स्रोत कोड को जेवीएम बायटेकोड में परिवर्तित करता है। जेवीएम एक दुभाषिया है [1] जो जावा बाइटकोड को चलाता है। जब आप दौड़ते हैं javacऔर बाईटकोड प्राप्त करते हैं, तो आपको javacअब और ज़रूरत नहीं है। हालाँकि, जब भी आप अपना प्रोग्राम चलाना चाहते हैं, आपको JVM की आवश्यकता होगी।

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

[१] अधिकांश JVM पर्दे के पीछे अनुवाद करते हैं, लेकिन वे वास्तव में अनुवादक नहीं हैं कि JVM के लिए इंटरफ़ेस "इनपुट भाषा -> आउटपुट भाषा" नहीं है।


3

आम तौर पर आप अपनी पसंद की किसी भी भाषा का उपयोग कर सकते हैं। उदाहरण के लिए, PHP C में लिखा गया था। यदि आपके पास किसी भी कंपाइलर तक कोई पहुंच नहीं है, तो आपको असेंबली भाषा लिखने और मशीन कोड को हाथ से संकलन करने का सहारा लेना होगा।


2
आपको मशीन कोड संकलित करने की आवश्यकता नहीं है। यह परिभाषा द्वारा सीपीयू की मूल भाषा है।
स्टु थॉम्पसन

1
सच। मेरे कहने का मतलब "असेंबली भाषा से मशीन कोड को संकलित करना या हाथ से कुछ ऐसा ही था"। मैं गलत हो सकता है, लेकिन मैं अनुमान लगा रहा हूं कि कुछ लोग कोड को केवल बाइनरी / हेक्स के रूप में लिखते हैं।
कावोसुकलताजा

2

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

जब से मैंने इसके बारे में पढ़ा है तब से मुझे बूटस्ट्रैपिंग में दिलचस्पी है। अधिक जानने के लिए मैंने अपने बीएफ के अपने सुपरसेट को लिखकर इसे स्वयं करने की कोशिश की, जिसे मैंने अपने आप में ईबीएफ कहा । EBF के पहले संस्करण में 3 अतिरिक्त प्रिमिटिव थे और मैंने पहले बाइनरी को संकलित किया। ऐसा करते समय मुझे एक दो कदम ताल मिला। मैंने एक रिलीज़ में वर्तमान भाषा में एक सुविधा लागू की और एक मीठी रिलीज़ की, जहाँ मैंने लागू सुविधा का उपयोग करने के लिए कोड को फिर से लिखा। भाषा एक अभिव्यंजक पर्याप्त थी जिसका उपयोग LISP दुभाषिया बनाने के लिए किया जाता था

मेरे पास पहले रिलीज़ टैग में स्रोत के साथ हाथ से संकलित संस्करण है और कोड काफी छोटा है। अंतिम संस्करण आकार में 12 गुना बड़ा है और कोड और अधिक कॉम्पैक्ट कोड के लिए अनुमति देता है इसलिए वर्तमान संस्करण को संकलित करने के लिए हाथ सही होना मुश्किल होगा।

एडमंड ग्रिमली इवांस ने अपनी हेक्स भाषा के साथ कुछ ऐसा ही किया

ऐसा करने के बारे में एक दिलचस्प बात यह है कि आप समझते हैं कि कुछ चीजें वैसी ही हैं जैसी वे हैं। यदि छोटा वृद्धिशील समायोजन ऐसा होता है तो यह मेरा कोड उत्पाद था और ऐसा लग रहा है जैसे यह खरोंच से तैयार किया गया है। मैं आज कोड पढ़ते समय इस बात को ध्यान में रखता हूं जो मुझे लगता है कि थोड़ा बंद है।


1

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


1

ज्यादातर कंपाइलर प्रोग्राम सी या एसी की तरह थे, अगर नहीं तो एसेम्बली लैंग जाने का तरीका है, हालांकि जब स्क्रैच से एक नई लैंग लिख रहे हों और आपके पास अपने स्वयं के कार्यों को परिभाषित करने के लिए एक प्रोटोटाइप भाषा से मैक्रो लिब या सोर्स कोड न हो। अब किस भाषा में? आप बस सोर्डकोड को कहा जाने वाला सोर्स कोड का एक फॉर्म "लिख सकते हैं" यह मशीन को ऑब्जेक्ट ओरिएंटेड स्ट्रक्चर्ड लैंग स्पेक जैसे फोरट्रान बेसिक एल्गो लिस्प की तरह दिखता है। इसलिए इमेज इन क्रॉस कोड को लिखने वाला क्रॉस कोड लिख रहा है।


1
मुझे विश्वास नहीं है कि psedo कोड मशीन पठनीय माना जाता है
रिचर्ड टिंगल

0

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


0

मेरा भी यह प्रश्न कुछ महीने पहले था। और मैंने कुछ लेख पढ़े और कुछ वीडियो देखे जिससे मुझे अपनी भाषा लिखने में मदद मिली जिसे सॉफ्ट कहा जाता है। इसका अभी पूरा नहीं हुआ है लेकिन मैंने इस यात्रा से बहुत कुछ सीखा है।

बुनियादी बातें जो आपको पता होनी चाहिए कि एक कोड स्निपेट को निष्पादित करने के लिए कंपाइलर कैसे काम करता है। कंपाइलर में बहुत सारे चरण होते हैं जैसे कि लेक्सिकल विश्लेषण, सिमेंटिक एनालाइज़र, एएसटी (एसेन्स सिंटैक्स ट्री) आदि।

मैंने अपनी नई भाषा में जो कुछ किया, वह यहां पाया जा सकता है - http://www.singhajit.com/writing-a-new-programming-language/

अगर आप पहली बार कोई भाषा लिख ​​रहे हैं तो सभी बेहतरीन हैं और आपको अभी एक लंबा रास्ता तय करना है।


0

सामान्य रूप से प्रोग्रामिंग भाषाएं क्या हैं?

प्रोग्रामिंग लैंग्वेज कंप्यूटर से बात करने का एक तरीका है। मोटे तौर पर पहली बार बोलना क्योंकि कंप्यूटर केवल शून्य और लोगों को समझ सकते हैं (इस तथ्य के कारण कि कंप्यूटर ट्रांजिस्टर से बने होते हैं स्विच के रूप में जो केवल दो राज्यों को ले सकते हैं, हम इन दो राज्यों को 0 और 1 कहते हैं) और 0,1 के साथ काम करना कठिन था हम इंसानों के रूप में इसलिए कंप्यूटर वैज्ञानिकों ने बाइनरी (0,1) में हर निर्देश से एक-से-एक मैपिंग करने का फैसला किया और अधिक मानवीय पठनीय रूप में जिसे उन्होंने इसे असेंबली भाषा कहा।

उदाहरण के लिए अगर हमारे पास एक निर्देश था जैसे:

11001101

विधानसभा में इसे बुलाया जाएगा:

LOAD_A 15

जिसका अर्थ है कि रजिस्टर की सामग्री को मेमोरी लोकेशन 15. में लोड करना। जैसा कि मैंने कहा कि यह सिर्फ एक कन्वेंशन था जैसे ट्रांजिस्टर के दो राज्यों के लिए 0 और 1 को चुनना। कंप्यूटर में कुछ और। इस तरह से 50 निर्देशों के साथ एक प्रोग्राम है, विधानसभा भाषा याद रखना आसान होगा। इसलिए उपयोगकर्ता असेंबली कोड और कुछ प्रोग्राम (इस मामले में असेंबलर) को बाइनरी निर्देशों या मशीन की भाषा में कोड का अनुवाद करेगा क्योंकि वे इसे कहते हैं।

लेकिन तब कंप्यूटर में हर दिन सुधार हो रहा था और अधिक निर्देशों के साथ अधिक जटिल कार्यक्रमों के लिए जगह थी, 10000 कहते हैं।

इस मामले में विधानसभा की तरह एक-से-एक मानचित्रण काम नहीं करेगा, इसलिए अन्य उच्च स्तरीय प्रोग्रामिंग भाषाएं बनाई गईं। उदाहरण के लिए यदि उपयोगकर्ता के द्वारा बनाई गई स्क्रीन पर कुछ प्रिंट करने के लिए I / O उपकरणों के साथ संबंध के बारे में 80 निर्देश लगते हैं, तो हमें यहां कुछ करने दें और हम इस सभी कोड को एक लाइब्रेरी में पैकेज कर सकते हैं और उदाहरण के लिए इसे प्रिंटफ कह सकते हैं। और एक अन्य कार्यक्रम भी बनाएं जो इस प्रिंटफ को यहां से संबंधित विधानसभा कोड में अनुवाद कर सकता है और वहां से विधानसभा बाकी काम करेगा। इसलिए वे इसे कंपाइलर कहते हैं।

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

तो मान लीजिए कि आपने अजगर में बहुत सारे अलग-अलग कोड पैक किए हैं और एक मॉड्यूल (लाइब्रेर, पैकेज या कुछ भी जिसे आप इसे कॉल करना चाहते हैं) बनाया है और आप उस मॉड्यूल मेघ (सिर्फ मेरा नाम) को कॉल करते हैं। अब हम कहते हैं कि हमने किसी तरह से इस mgh को बनाया है जो कोई भी कहता है:

import mgh
mgh.connect(ip,port.data)...

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

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

अब एक और चीज जो आप कर सकते हैं वह है एक प्रोग्राम बनाना जो सभी कोड को बराबर असेंबली लैंग्वेज में ट्रांसलेट कर सके जैसे कि c के साथ क्या होता है लेकिन इस मामले में प्रोग्राम इसे सीधे कर सकता है और वहीं से बाकी काम करेगा। लिंकर। हम जानते हैं कि इस प्रोग्राम को कंपाइलर कहा जाता है।

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

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