इसका क्या अर्थ है कि "भाषा A भाषा B में लिखी गई है"?


31

मैं अक्सर यह शब्द सुनता हूं कि भाषा A को भाषा B में लिखा गया है। उदाहरण के लिए, PHP को C , C # को C ++ में लिखा गया है

क्या कोई समझा सकता है कि इसका क्या मतलब है और अगर यह सही भी है? क्या इसका भाषा के उपयोग में आने वाले दुभाषिया के संकलक से कोई लेना-देना है?

इसके अलावा, ऐसे कौन से कारक हैं जिन पर कार्यान्वयन भाषा का चुनाव किया जाता है?


19
कड़ाई से बोलते हुए, "PHP को C में लिखा गया है" गलत है। एक भाषा औपचारिक परिभाषा के अनुसार है, इसलिए इसे किसी अन्य प्रोग्रामर भाषा में नहीं लिखा जाता है (बल्कि अंग्रेजी में); केवल संकलक, दुभाषिया और / या पुस्तकालय को C, C ++ या जो भी लिखा जा सकता है। व्यवहार में, कई भाषाओं के लिए एक प्रमुख संकलक या दुभाषिया है, और भाषा की परिभाषा और कार्यान्वयन के बीच का अंतर नहीं है।
11:28 बजे user281377

दिलचस्प बात यह है BCPL ज्यादातर BCPL में लिखा गया था
OldCurmudgeon

7
PHP "प्रति से", एक औपचारिक परिभाषा नहीं है। यह एक सी कार्यक्रम है।
काज

8
s/written/implemented/और यह बहुत स्पष्ट है।
TMN

2
@ यूग्रेन असेंबली में काफी सी कंपाइलर लिखे गए थे। इस सदी में ऐसा नहीं है, हालांकि।
रॉस पैटरसन ने

जवाबों:


30

अधिकांश प्रोग्रामिंग भाषाएं दो श्रेणियों में आती हैं: व्याख्या की गई और संकलित भाषा।

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

PHP एक व्याख्या की गई भाषा है। PHP कोड को चलाने के लिए आपको एक अलग प्रोग्राम की आवश्यकता होती है , कंप्यूटर प्रोग्राम को सीधे नहीं चलाता है। वह अलग प्रोग्राम, PHP दुभाषिया, स्वयं C में लिखा गया है।

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

अन्य उदाहरण हैं:

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

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

1
@Pipip: बाइट कोड मशीन कोड नहीं है; इसलिए सीधे निर्देश के साथ सीपीयू प्रदान करने के बजाय आपको बाइट कोड लेने और व्याख्या करने के लिए दुभाषिया की आवश्यकता है, इसे मशीन निर्देशों में अनुवाद करें। लाभ यह है कि वर्चुअल मशीन अन्य आर्किटेक्चर के लिए पोर्ट करने के लिए सरल है, और आप जेआईटी संकलन जैसे ट्रिक लागू कर सकते हैं ।
मार्टिज़न पीटरर्स

क्या किसी को लगता है कि "संकलित" शब्द को विपणन उद्देश्यों के लिए पतला किया गया है?
फिलिप

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

इसके अलावा एक अच्छा स्रोत: youtube.com/watch?v=e4ax90XmUBc
Adam

34

आप मूल रूप से सही हैं। यदि यह कहा जाता है कि रूबी सी में लिखा गया है, तो इसका मतलब है कि भाषा की व्याख्या और कोर लाइब्रेरी के कुछ हिस्सों को सी में लिखा गया है।

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

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

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


किसी को भी पता है कि मैं अपने उत्तर के लिए तीन अपवित्र क्यों देख रहा हूं जिस क्षण मैंने इसे पोस्ट किया था?
थोरस्टेन म्यूलर

1
मुझे अब चार दिखाई दे रहे हैं, लेकिन मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं? क्या अपवित्र बहुत तेज दिखाई दिया? यदि हां, तो सवाल पर बहुत सारी आँखें (तीन लगभग एक साथ उत्तर), और आपका उत्तर अच्छा है।
yannis

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

@ थोरस्टेनमुलर +1 के लिए "कुछ भी नहीं आपको सी में दुभाषिया और सी ++ में पुस्तकालयों को लिखने से रखेगा" मैं बस इस बारे में आपसे पूछने वाला था। क्या इसके लिए कोई प्रसिद्ध कार्यान्वयन है जहां दुभाषिया / संकलक एक भाषा में है जबकि कोर पुस्तकालय दूसरी भाषा में है?
सोंगो

@ थोरस्टेनमुलर मैंने कभी-कभी ऐसा किया है। यदि कोई व्यक्ति आपके पोस्ट किए गए प्रश्न को देख रहा था, तो एक छोटा संदेश कहेगा कि "एक नया उत्तर पोस्ट किया गया है" जो आपके द्वारा सबमिट किए जाने के एक या दो मिनट के भीतर होता है, इसलिए वे पूरे उत्तर को स्किम्ड कर सकते थे और 10 सेकंड के भीतर बदल दिया जा सकता था। आपकी पोस्टिंग इसके अतिरिक्त, उत्तर पोस्ट करने के 5 मिनट के भीतर किए गए संपादन संपादित इतिहास में दिखाई नहीं देते हैं, जो आपके हिस्से पर मामूली भ्रम पैदा कर सकता है।
Izkata

10

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

उस ने कहा, "भाषा A को भाषा B में लिखा गया है" अधिकांश आधुनिक भाषाओं के लिए एक निरीक्षण है। अगर हम एक उदाहरण के रूप अजगर ले, जबकि संदर्भ कार्यान्वयन, CPython , वास्तव में सी में लिखा गया था वहाँ अन्य भाषाओं, जैसे में लिखा कार्यान्वयन हैं Jython (जावा में लिखा), IronPython (सी # में लिखा), PyPy (पायथन में लिखा), CLPython (कॉमन लिस्प में लिखे गए), स्टैकलेस पायथन (C और पायथन में लिखे गए) और Unladen Swallow (C ++ में लिखे गए)।

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


2
मैं साइको को एक और कार्यान्वयन नहीं कहूंगा, क्योंकि यह सीपीथॉन के विस्तार के रूप में चलता है।
मार्टिज़न पीटरर्स

@MartijnPieters यह भी एक मृत परियोजना है, अपनी साइट के अनुसार। हटा दिया।
यानिस २०'१२ 12:12

@YannisRizos Unladen निगल नहीं है साथ ही मृत ?
एंड्रेस एफ।

1
@Songo: इसके अलावा string.lower(s)एक पायथन फ़ंक्शन है जो इसे दर्शाता है return s.lower(), जो सही है। CPython 3.3 स्ट्रिंग मामले संचालन सी में लागू किया जाता है
मार्टिन पीटर्स


3

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

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


दिलचस्प बिंदु। तो मूल रूप से अगर मेरे पास PHP में एक अंतर्निहित फ़ंक्शन है explodeजो एक लेता है Stringऔर एक रिटर्न देता है Array, तो इसका कार्यान्वयन (यानी कि कोड जो कि सरणी का उत्पादन करने के लिए स्ट्रिंग पर काम करेगा) सी में लिखा है , है ना?
सोंगो

@ संगो: सही है। फिर से, PHP सिर्फ एक प्रोग्राम है, वर्ड या अपाचे या नोटपैड या vi या emacs से अलग नहीं है। यह डेटा को पढ़ता है और भाषा विनिर्देश के अनुसार इसे पार्स करता है, फिर भाषा विनिर्देश जो कहता है उसे करना चाहिए।
ब्रायन ओकले

यह उत्तर बुरी तरह से कार्यान्वयन के साथ भाषा का सामना करता है।
रसेल बोरोगोव

मुझे लगता है कि यह सबसे सरल और सबसे सीधा जवाब है और मुझे नहीं लगता कि यह कुछ भी बताता है। यह भी बताता है कि PHP के एक से अधिक कार्यान्वयन हो सकते हैं। वास्तव में, कई हैं, मूल PHP, और फेसबुक चीज़, और अन्य हो सकते हैं।
वॉरेन पी

@RussellBorogove: क्या आपको नहीं लगता कि "प्रोग्रामिंग भाषा का उपयोग करने के दृष्टिकोण से" उत्तर को स्पष्ट करने में मदद करता है? याद रखें, हम ths प्रश्न के साथ एक पूर्ण शुरुआत के साथ काम कर रहे हैं, इसलिए बिंदु को स्पष्ट करने के लिए थोड़ी सी सटीकता का त्याग करना उचित है, IMO।
ब्रायन ओकले

3

पूरी तरह से अलग अर्थ के साथ एक बहुत ही समान वाक्यांश "भाषा बी में भाषा लिखना" है, उदाहरण के लिए "जावा में सी लिखना"।

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

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


"CPython को C में लिखा गया है" निश्चित रूप से इसका मतलब यह नहीं है "यह उपयोगकर्ता पायथन में लिखता है जैसे यह C था"। इसका अर्थ है कि CPython (Python.exe खिड़कियों पर, / usr / bin / python on Unix) को C. में लिखा गया है
वॉरेन पी

@Warren P: यकीन है, लेकिन वाक्यांश बहुत समान हैं, इसलिए किसी एक के साथ परिचित लोगों को आसानी से एक स्पष्टीकरण की तलाश में यहां समाप्त नहीं किया जा सकता है।
माइकल बोर्गवर्ड

3

प्रौद्योगिकी एक स्वाभाविक रूप से चलने की प्रक्रिया है। हम सरल उपकरणों से शुरू करते हैं और फिर उन उपकरणों का उपयोग बेहतर बनाने के लिए करते हैं। पहली असेंबली लैंग्वेज बहुत थीं 1: 1 चिप के लिए मानकीकृत निर्देश बायटेकोड्स का अनुवाद; 8086 आर्किटेक्चर और इसके असेंबलर Z80, RISC, आदि जैसे अन्य आर्किटेक्चर पर हावी हो गए, और इसलिए हमने उन भाषाओं को विकसित करना शुरू किया, जिन्हें 8086 विधानसभा में पचाया जा सकता है, जैसे कि FORTRAN, COBOL, पास्कल और C. प्रोग्राम जो सोर्स कोड की व्याख्या करता है इन भाषाओं को कुछ और आदिम रूप में लिखा जाना चाहिए, अन्यथा आप चिकन-एंड-एग तर्क में समाप्त होते हैं; यदि पहले C कंपाइलर के लिए सोर्स कोड C में लिखा गया था, तो उस C सोर्स कोड को किस संकलित किया गया था, और परिभाषा के अनुसार, पहला C कंपाइलर नहीं होगा?

मूल रूप से, "C # को C ++ में लिखा गया है" का अर्थ यह लिया जाना चाहिए कि पहला और / या सबसे लोकप्रिय कंपाइलर और रनटाइम / कोर लाइब्रेरी जो सी # भाषा के विनिर्देश का पालन करता है (जो कि Microsoft का .NET फ्रेमवर्क है, और कमांड-लाइन कंपाइलर है) कार्यक्रम CSC.exe) C ++ में लिखे गए हैं।


0

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


C ++ का एक आधिकारिक कार्यान्वयन नहीं है। सी ++ के मामले में, कल्पना सही है, और कल्पना में अपरिभाषित व्यवहार आपके कार्यान्वयन में कुछ भी कर सकता है। तो नहीं, यह सही नहीं है।
वॉरेन पी

I do not see what the previous comment has to do with my answer. I didn't make any universally quantified statement about all languages, and so the C++ counterexample is not applicable. A statement of the form "A is written in B", where A is "C++", does not make sense, except when B is "English".
Kaz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.