अन्य प्रोग्रामिंग भाषाएं क्यों नहीं हैं जो पायथन बाइटकोड को संकलित करती हैं?


51

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

हालाँकि, पायथन इंटरप्रेटर द्वारा चलाने से पहले पायथन भी बायटेकोड (.pyc फ़ाइलों) में बदल जाता है। मैं शायद अनभिज्ञ हो सकता हूं, लेकिन कोई अन्य प्रोग्रामिंग भाषाएं क्यों नहीं हैं जो बाइटकोड के अजगर को संकलित करती हैं?

क्या यह सिर्फ इसलिए है क्योंकि किसी ने परेशान नहीं किया है, या किसी तरह का अंतर्निहित प्रतिबंध या बाधा है जो इतना मुश्किल काम करता है?


30
... क्योंकि वे GIL से निपटना नहीं चाहते हैं? ;)
मेसन व्हीलर

4
वृत्ति मुझे बताएगी कि जेवीएम के परिपक्व होने के साथ यह बहुत कुछ करना है, अच्छी तरह से निर्दिष्ट है, और जेवीएम लगभग सभी प्लेटफार्मों पर या मूर्खता प्राप्त करना आसान है।
ऋग्वेद

4
मुझे यह भी संदेह है कि अधिकांश जेवीएम अजगर के दुभाषियों की तुलना में बहुत तेज हैं।
पीटर स्मिथ

19
जावा बाइटकोड को लक्षित करके, आपको एक जेवीएम (सुरक्षा, प्रदर्शन, पोर्टेबिलिटी, स्केलेबिलिटी, और इसी तरह) की सभी सुविधाएँ मिलती हैं। पायथन बाइटकोड को लक्षित करना आपको बहुत अधिक नहीं मिलता है।
डेविड श्वार्ट्ज

3
पायथन बाइटकोड को पायथन दुभाषिया के बाद के संस्करणों द्वारा मान्यता प्राप्त नहीं है। कोई भी प्रोग्रामिंग भाषा कैसे लागू कर सकता है जो पायथन बाइटकोड को संकलित करता है?
गस

जवाबों:


77

सरल - पिछली बार जब मैंने जाँच की, तो पायथन के पास कोई औपचारिक विनिर्देश नहीं था, जिसमें उसका बायटेकोड भी शामिल था। CPython कल्पना है, और bytecode पोर्टेबिलिटी IIRC की आवश्यकता नहीं है। इस प्रकार, यह एक विशिष्ट भाषा के लिए बनाया गया एक चलता-फिरता अविवादित लक्ष्य है।


22
वास्तव में, बाइटकोड प्रारूप का विवरण अक्सर मामूली संस्करणों के बीच बदल जाता है, और यहां तक ​​कि 99% संगत PyPy भी कोशिश नहीं करता है (वास्तव में, वे अपने खुद के बायोटेक निर्देश जोड़ते हैं)।

नोट: अजगर - भाषा - का एक औपचारिक विनिर्देश है ("पीईपी" देखें)। 'पायथन वर्चुअल मशीन' नहीं है। यह वास्तव में जावा (जैसे) जावा के विपरीत है, जहां दोनों निर्दिष्ट हैं।
अल्बर्ट

56

कई JVM भाषाएं हैं क्योंकि प्रतिभाशाली लोग थे जो कोड लिखना चाहते थे जो मौजूदा जावा कोड के साथ काम करेंगे, लेकिन वे जावा लिखना नहीं चाहते थे

जाहिरा तौर पर ऐसे कोई प्रोग्रामर नहीं हैं जो मौजूदा पायथन कोड के साथ काम करना चाहते हैं, लेकिन पायथन को एक और भाषा को पायथन बाइटकोड इंटरप्रेटर में पोर्ट करने से काफी नफरत है।

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


7
मुझे आशा है कि आप अनुमान नहीं लगा रहे हैं कि जावा बेकार है या जावा अजगर से अधिक बेकार है :-)
जियोर्जियो

8
@ जियोर्जियो: मेरा मानना ​​है कि ग्रूवी, स्काला, क्लोजर, आदि के रचनाकारों ने सोचा कि सुधार के लिए काफी जगह थी। क्या आप अनुमान लगा रहे हैं कि पायथन चूसता है?
केविन क्लाइन

8
अजगर के साथ काम करने के बाद मैं कहूंगा कि "कम चूसना कारक" गलत होगा। यह बहुत ज्यादा सामान्‍य रूप से स्‍वीकार किया गया सामान है और यह पूरी 'स्‍व' चीज बेहद प्रतिशोधी है। वास्तव में गूंगा। क्लास विधि कैसे नहीं जानती कि वह कहाँ है?
रिग

6
@ निजी तौर पर, मुझे लगता है कि पायथन का दृष्टिकोण अधिक सुरुचिपूर्ण है। OO एक विशेष कीवर्ड को एक विशेष कीवर्ड की आवश्यकता के बजाय सिंटैक्स से व्यवस्थित रूप से अनुसरण करता है जो एक चर की तरह दिखता है। क्‍यों क्‍योंकि क्‍लास मेथड्स यह नहीं जानते कि वे कहां हैं, ऐसा इसलिए है क्‍योंकि पायथन क्‍लास की परिभाषाएं सिर्फ कोड हैं, और यह कोड निजी नहीं है क्‍योंकि ऐसा होता है क्‍योंकि यह एक वर्ग परिभाषा के अंदर स्थित होता है। आप कहीं भी तरीकों को परिभाषित कर सकते हैं और उन्हें रनटाइम पर एक कक्षा में जोड़ सकते हैं। वास्तव में, आप एक ही फ़ंक्शन ले सकते हैं और इसे कई वर्गों में एक विधि के रूप में उपयोग कर सकते हैं, कुछ ऐसा जो वास्तव में thisप्रतिमान के साथ काम नहीं करेगा ।
एंटिमोनी

6
मुझे लगता है कि यह भाषा नहीं VMs का मामला है। जेवीएम एक प्रदर्शनकारी कचरा संग्रहकर्ता, जेआईटी, आदि के साथ एक वीएम है, जबकि सीपीथॉन संदर्भ गणना का उपयोग करता है और एक दुभाषिया है। यह सीपीथॉन है जो एक प्लैटफॉर्म के रूप में चूसता है। Btw hyhy मौजूद है।
PuercoPop

26

सीपीथॉन में जीआईएल जैसे तकनीकी कमियां हैं, लेकिन कुछ कथित भाषा की कमियां हैं, इसलिए रनटाइम पायथन समुदाय का विक्रय बिंदु नहीं है। इसके ठीक विपरीत, GIL / CPython कार्यान्वयन के असंतोष के कारण अधिक बैकेंड रनटाइम विकल्प हैं।

जावा लैंग्वेज JVM (जावा समुदाय में भी) की तुलना में बहुत अधिक बदनाम है।

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


10

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

कुछ और शोध किए और जाहिर है कि वास्तव में दो GIL हैं न कि केवल एक। अन्य आयात आयात करता है ।


1
"जीआईएल फ्री" "कारण पर वर्णित तकनीकी कारणों में से एक है कि पायथन विकी में सीपीथॉन प्रोग्रामर आयरनपाइथन में रुचि ले सकते हैं" ।
यानिस

1
@YannisRizos: निश्चित रूप से .NET फ्रेमवर्क तक पहुंच पूरी तरह से असंगत नहीं है। बेशक, यह संभव है कि CPython उपयोगकर्ता उस में पूरी तरह से उदासीन हो सकते हैं।
रॉबर्ट हार्वे

@ रोबर्टहवे निंजा ने संपादित किया। हालाँकि मैं तकनीकी कारणों से "फैंसी नए खिलौनों तक पहुंच" के बारे में नहीं सोचता (ऐसा नहीं है कि खिलौने महान नहीं हैं), विकी का यह भी उल्लेख है कि आयरनपिथॉन का विस्तार करना आसान है।
यानिस

8

अन्य जवाब बहुत मायने रखते हैं, लेकिन वास्तव में अब ऐसी भाषाएं हैं जो पायथन को संकलित करती हैं। जहां चाह...

मैं इन भाषाओं के बारे में कुछ भी नहीं जानता, लेकिन वे पायथन एएसटीएस के लिए अपने स्रोत कोड को ट्रांसप्लान्ट करके काम करते हैं और पायथन को पेड़ों को बायटेकोड पर संकलित करने देते हैं, अन्य उत्तरों में वर्णित समस्याओं से बचते हैं।

टिप्पणियों के आधार पर, हम वर्तमान में तीन वैकल्पिक भाषाओं के बारे में जानते हैं जो पायथन वीएम का उपयोग करती हैं (यहां किसी अन्य को जोड़ने के लिए स्वतंत्र महसूस करें):

  • मोची खुद को कार्यात्मक प्रोग्रामिंग और अभिनेता-शैली प्रोग्रामिंग के लिए गतिशील रूप से टाइप की गई प्रोग्रामिंग भाषा के रूप में बताता है ।
  • Hy : खुद को लिस्प की एक बोली के रूप में बताता है जो पायथन में एम्बेडेड है
  • डीजी : खुद को एक (तकनीकी रूप से) सरल भाषा के रूप में बताता है जो कि सीपीथॉन बायटेकोड के लिए संकलित है

2
इसके अलावा HyLang का उल्लेख करने के लायक है
ideasman42


6

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

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

सिर से सिर की तुलना में, जेवीएम आमतौर पर पायथन वीएम के मुकाबले दोगुना होता है। JVM (surprizingly) यहां तक ​​कि मूल रूप से संकलित कोड के साथ भी अच्छी तरह से प्रतिस्पर्धा करता है, जो "हॉट" अनुकूलन के आधार पर होता है। और यह भी अधिक परिष्कृत धागा हैंडलिंग, आदि की गिनती नहीं है।

मैं पायथन से प्यार करता हूं, मैं वास्तव में करता हूं, और यह कहने के लिए नफरत करता हूं, लेकिन कभी-कभी प्रदर्शन मुझे सिर्फ दांतों में मारता है - अन्यथा, क्यूपी या स्पीपी जैसे महत्वपूर्ण पायथन पुस्तकालयों को सी कोड में वापस आना होगा?

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

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