जावास्क्रिप्ट वी 8 गति प्राप्त करने के लिए रूबी, पायथन को क्या ब्लॉक करता है? [बन्द है]


261

क्या कोई रूबी / पायथन सुविधाएँ हैं जो अनुकूलन के कार्यान्वयन को रोक रही हैं (जैसे इनलाइन कैशिंग ) V8 इंजन?

पायथन Google लोगों द्वारा सह-विकसित है, इसलिए इसे सॉफ्टवेयर पेटेंट द्वारा अवरुद्ध नहीं किया जाना चाहिए।

या यह Google द्वारा V8 प्रोजेक्ट में डाले गए संसाधनों का मामला है।


6
आत्मनिरीक्षण और ऑपरेटर ओवरलोडिंग शायद बड़े हैं, लेकिन मैं आपको वास्तविक जवाब देने के लिए जेएस को अच्छी तरह से नहीं जानता। PyPy प्रोजेक्ट संभवत: जेएस की तरह की गति तक पहुंचने के लिए पायथन का सबसे अच्छा मौका है।
ncoghlan

11
क्या आपके पास कोई उदाहरण है जहां PyPy कंप्यूटर भाषा शूटआउट को छोड़कर V8 की तुलना में धीमा है, जो कि पूरा बैलॉक है (बस देखो कि अलग-अलग भाषाओं में अलग-अलग सामान कैसे लागू किया जाता है)। या यह सिर्फ गूगल की वास्तविकता विरूपण क्षेत्र है?
फिजल

3
V8 पायथन के बराबर नहीं है। प्रतीक्षा करें जब तक V8 को बेहतर तुलना करने के लिए 1.8 जावास्क्रिप्ट युक्ति को लागू नहीं करना है। और उस बिंदु पर मुझे यकीन है कि कोई जावास्क्रिप्ट के स्थान पर V8 इंजन के शीर्ष पर PyPy को लागू करने का प्रयास करेगा।
माइकल डिलन

14
आप इतना सुनिश्चित क्यों हैं कि V8 पायथन या रूबी से अधिक तेज है? किस पर?
jcoffland

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

जवाबों:


519

जावास्क्रिप्ट वी 8 गति प्राप्त करने के लिए रूबी, पायथन को क्या ब्लॉक करता है?

कुछ भी तो नहीं।

अच्छा, ठीक है: पैसा। (और समय, लोग, संसाधन, लेकिन अगर आपके पास पैसा है, तो आप उन्हें खरीद सकते हैं।)

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

प्रमुख डेवलपर, लार्स बक, सचमुच 25 वर्षों से वीएम पर काम कर रहे हैं (और उन सभी वीएम ने वी 8 तक लीड किया है), जो मूल रूप से उनका संपूर्ण (पेशेवर) जीवन है। रूबी VMs लिखने वाले कुछ लोग 25 साल के भी नहीं हैं।

क्या कोई रूबी / पायथन विशेषताएं हैं जो अनुकूलन के कार्यान्वयन को रोक रही हैं (जैसे इनलाइन कैशिंग) V8 इंजन में?

यह देखते हुए कि कम से कम IronRuby, JRuby, MagLev, MacRuby और Rubinius में या तो मोनोमोर्फिक (IronRuby) या बहुरूपी इनलाइन कैशिंग है, इसका उत्तर स्पष्ट रूप से नहीं है।

आधुनिक रूबी कार्यान्वयन पहले से ही अनुकूलन का एक बड़ा सौदा करते हैं। उदाहरण के लिए, कुछ कार्यों के लिए, रुबिनियस की Hashकक्षा YARV की तुलना में तेज़ है। अब, यह बहुत रोमांचक नहीं लगता है जब तक आपको एहसास नहीं होता है कि रूबिनियस की Hashकक्षा को 100% शुद्ध रूबी में लागू किया गया है, जबकि YARV को 100% हाथ से अनुकूलित सी में लागू किया गया है।

तो, कम से कम कुछ मामलों में, रुबिनियस जीसीसी से बेहतर कोड उत्पन्न कर सकता है!

या यह Google द्वारा V8 प्रोजेक्ट में डाले गए संसाधनों का मामला है।

हाँ। सिर्फ गूगल ही नहीं। V8 के सोर्स कोड का वंश अभी 25 साल पुराना है। V8 पर काम कर रहे लोगों ने Self VM (आज तक बनाए गए सबसे तेज़ गतिशील OO भाषा निष्पादन इंजनों में से एक) का निर्माण किया, एनिमोर्फिक स्मॉलटाक VM (आज तक बनाया गया सबसे तेज़ स्मॉलटाक निष्पादन इंजनों में से एक), HotSpot JVM (अब तक का सबसे तेज़ JVM, शायद सबसे तेज़ VM अवधि) और OOVM (अब तक बनाए गए सबसे कुशल Smalltalk VMs में से एक)।

वास्तव में, V8 के प्रमुख डेवलपर, लार्स बक, उनमें से हर एक पर काम किया , साथ ही कुछ अन्य।


1
क्या हमारे पास कुछ संदर्भ साहित्य हो सकते हैं "यह देखते हुए कि कम से कम आयरनरबी, जेरी, मैगलेव, मैकराबी और रूबिनियस में या तो मोनोमोर्फिक (आयरनरुबी) या पॉलीमोर्फिक इनलाइन कोचिंग है, इसका जवाब स्पष्ट रूप से नहीं है।" कृप्या?
WDRust

14
स्पाइडरमोंकी के पास तुलनात्मक प्रदर्शन है, तो मोज़िला ने यह कैसे किया? उनके पास बहुत सीमित पैसा है ..
सलमान वॉन अब्बास

8
@ सलमानपेक: यह उनका पहला वीएम नहीं है, और मोज़िला में काम करने वाले स्मार्ट लोग भी हैं।
मैथ्यू एम।

3
@ सलमानपीके, मिगुएल: मोज़िला ने रिवर्स इंजीनियरिंग वी 8 द्वारा कम से कम हिस्से में अपना जेएस वीएम बनाया। blog.mozilla.org/dmandelin/2010/09/08/preting-jagermonkey
इयान

2
@ इयान वी 8 खुला स्रोत (बीएसडी लाइसेंस) है, इसलिए रिवर्स इंजीनियर की कोई आवश्यकता नहीं है, बस देखो कि वे क्या कर रहे हैं।
dbkk

78

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

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

इसका साइड बेनिफिट यह है कि हमारे पास दो बेहतरीन हाई परफॉर्मेंस ओपन सोर्स जावास्क्रिप्ट इंजन हैं जो कि सभी तरह के एप्लिकेशन जैसे Node.js. के लिए री-पर्पस किए जा सकते हैं।


43

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

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

इसका बौद्धिक संपदा कानून से कोई लेना-देना नहीं है। न ही पायथन को Google के लोगों द्वारा सह-विकसित किया गया है (इसके निर्माता कुछ अन्य कमिटर्स के साथ वहां काम करते हैं, लेकिन उन्हें पायथन पर काम करने के लिए भुगतान नहीं मिलता है)।

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

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

कई लोगों को यह भी लगता है कि रूबी और पायथन अपने संबंधित वैश्विक दुभाषिया के ताले को हटाने से काफी लाभान्वित हो सकते हैं ।

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


3
दरअसल पायथन 3.2 की हालिया रिलीज के बाद से नई सुविधाओं पर रोक हटा दी गई है।
जद।

2
+1, लेकिन नई भाषा सुविधाओं पर फ्रीज का मतलब अनुकूलन पर खर्च करने के लिए अधिक समय नहीं होगा?
एंड्रयू ग्रिम

1
@ और केवल अगर। फोकस, Jython, IronPython, और PyPy गति अप करने के लिए लाने अजगर 3 कन्वर्ट करने के लिए पुस्तकालयों के लिए इंतजार कर रहे हैं, और अजगर 3. प्रचार पर है
Rafe Kettler

2
"ऑब्जेक्ट-ओरिएंटेशन की वर्ग प्रणाली अकेले वजन का एक बड़ा हिस्सा जोड़ती है" - V8 जैसे आधुनिक जावास्क्रिप्ट वीएम में कक्षाएं हैं, वे बस निहित हैं। जैसे पायथन में आपको स्पष्ट रूप से जावास्क्रिप्ट में एक चर लिखने की जरूरत नहीं है, आपको स्पष्ट रूप से एक वर्ग टाइप करने की आवश्यकता नहीं है। VM आपके कोड के माध्यम से जाने और कक्षाओं को निकालने के लिए पर्याप्त चतुर है।
बेंजामिन ग्रुएनबाम

1
जैसा कि मैंने इसे समझा, V8 एक दुभाषिया के बजाय एक JIT कंपाइलर है ... मुझे पूरा यकीन है कि दोनों के बीच एक अंतर है। शायद नहीं ... मुझे नहीं पता।
ल्यूक

24

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

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


13

भ्रामक प्रश्न। V8 जावास्क्रिप्ट का एक JIT (सिर्फ समय संकलक) कार्यान्वयन है और इसके सबसे लोकप्रिय गैर-ब्राउज़र कार्यान्वयन Node.js में इसे एक इवेंट लूप के आसपास बनाया गया है। CPython एक JIT नहीं है और न ही इसका आयोजन किया गया है। लेकिन ये Python प्रोजेक्ट में Python में सबसे अधिक मौजूद हैं - एक CPython 2.7 (और जल्द ही 3.0+) संगतITIT। और उदाहरण के लिए टॉर्नेडो जैसे इवेंटेड सर्वर लाइब्रेरीज़ का भार है। PyPy के बीच असली दुनिया के परीक्षण मौजूद हैं जो Tornado vs Node.js चल रहे हैं और प्रदर्शन अंतर मामूली हैं।


3
तूफान का उल्लेख करने के लिए +1 । हालांकि यह Node.js की तुलनात्मक गति पर जाता है, इसका gen.engineमॉड्यूल पायथन जनरेटर और yieldकथन के साथ एक साथ है ( 2.5 के बाद से) आपके अतुल्यकालिक कोडिंग को फिर से परिभाषित कर सकता है।
लुकास ब्यूंगर

1
आपकी पोस्ट के बाद से, pypy ने एक स्थिर 3.x समर्थित संस्करण जारी किया (और निश्चित रूप से समर्थन में सुधार करता रहता है): morepypy.blogspot.fr/2014/06/pypy3-231-fulcrum.html
ज़ोग्राड

9

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

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


9

विभिन्न डिजाइन प्राथमिकताओं और उपयोग के मामले के कारण मुझे विश्वास है।

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

यहां एक उदाहरण है: jQuery सॉर्ट के कारण iOS सफारी को फ्रीज किया जाता है । वहां फ्रीज मिलता है जो गेट-बाय-चयनकर्ता कॉल के अत्यधिक उपयोग के कारण होता है। यदि गेट-बाय-चयनकर्ता मूल कोड में लागू किया जाएगा और प्रभावी रूप से यह ऐसी कोई समस्या नहीं होगी।

रे-ट्रेसर डेमो पर विचार करें जो अक्सर V8 प्रदर्शन के लिए डेमो का उपयोग किया जाता है। पायथन दुनिया में इसे देशी कोड में लागू किया जा सकता है क्योंकि पायथन देशी एक्सटेंशन के लिए सभी सुविधाएं प्रदान करता है। लेकिन वी 8 दायरे (क्लाइंट साइड सैंडबॉक्स) में वीएम को [उप] जितना संभव हो उतना प्रभावी बनाने के बजाय आपके पास कोई अन्य विकल्प नहीं है। और इसलिए स्क्रिप्ट कोड का उपयोग करके एकमात्र विकल्प रे-ट्रेसर कार्यान्वयन है।

इतनी अलग प्राथमिकताएँ और प्रेरणाएँ।

में Sciter मैं मूल रूप से काफी पूर्ण jQurey कोर को लागू करने से एक परीक्षण कर लिया है। व्यावहारिक कार्यों जैसे कि ScIDE (HTML / CSS / Script से बनी IDE) मेरा मानना ​​है कि इस तरह के समाधान काफी बेहतर काम करते हैं तो कोई VM अनुकूलन।


5

जैसा कि अन्य लोगों ने उल्लेख किया है, Python के पास PyPy के रूप में एक निष्पादन JIT संकलक है ।

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

मैं किसी निश्चित निष्कर्ष का दावा नहीं करता हूं, लेकिन PyPy मुझे सबसे तेज कार्यान्वयनों में से था, जो कि नोड से कहीं बेहतर था। इसके बजाय, सीपीथॉन रैंकिंग के सबसे धीमे अंत में था।


5

कथन बिलकुल सत्य नहीं है

वी 8 जेएस के लिए सिर्फ एक कार्यान्वयन है, ठीक वैसे ही सीपीथॉन पायथन के लिए सिर्फ एक कार्यान्वयन है। Pypy में V8 से मेल खाते प्रदर्शन हैं

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

लेकिन वेब पर, सबसे लोकप्रिय पायथन और रूबी परियोजनाएं अवरुद्ध हैं। पायथन, विशेष रूप से, तुल्यकालिक WSGI मानक की विरासत है, और प्रसिद्ध Django जैसी रूपरेखा इसके आधार पर हैं।

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

हालांकि, वे कुछ कारण हैं कि क्यों रूबी और पायथन में डिफ़ॉल्ट कार्यान्वयन V8 की तरह तेज नहीं हैं।

अनुभव

जेर्ग डब्ल्यू मित्तग ने बताया, वी 8 पर काम करने वाले लोग वीएम जीनियस हैं। अजगर एक भावुक लोगों द्वारा समर्पित है, बहुत सारे डोमेन में बहुत अच्छा है, लेकिन वीएम ट्यूनिंग में विशेष नहीं है।

साधन

पायथन सॉफ्टवेयर फाउंडेशन के पास बहुत कम पैसा है: पायथन में निवेश करने के लिए एक वर्ष में 40k से कम । यह थोड़े पागल है जब आपको लगता है कि Google, Facebook या Apple जैसे बड़े खिलाड़ी सभी पायथन का उपयोग कर रहे हैं, लेकिन यह बदसूरत सच्चाई है: अधिकांश काम मुफ्त में किया जाता है। वह भाषा जो Youtube को शक्ति प्रदान करती है और जावा के सामने मौजूद है, स्वयंसेवकों द्वारा हस्तनिर्मित की गई है।

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

जब यह काम करता है, तो इसका मतलब है कि आपको अपनी प्राथमिकताओं के बारे में बहुत सावधान रहना होगा। इसलिए, अब हमें देखने की जरूरत है:

उद्देश्य

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

लेकिन वी 8 में आपको गति मिली है।

ऐसा इसलिए है, क्योंकि Google के लिए गति मुख्य उद्देश्य था, क्योंकि यह क्रोम में पेज रेंडरिंग के लिए एक अड़चन है।

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


1

क्योंकि जावास्क्रिप्ट कार्यान्वयन को अपने बाइंडिंग के पीछे की संगतता की परवाह नहीं है।

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

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

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


1

V8 JIT, क्रैंकशाफ्ट, प्रकार हीनता और डेटा-अनुकूलित कोड के कारण तेज है। टैग किए गए पॉइंटर्स, NaN- टैगिंग ऑफ़ डबल्स। और निश्चित रूप से यह बीच में सामान्य संकलक अनुकूलन करता है।

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

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

ज्ञात अनुकूलित बैकेंड, जैसे कि pypy या jruby अभी भी विभिन्न ओवर-इंजीनियरिंग तकनीकों से पीड़ित हैं।


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