एक गतिशील भाषा दुभाषिया / संकलक, जैसे कि जावास्क्रिप्ट में कैसे टाइप किया जाता है?


11

जावास्क्रिप्ट या पायथन जैसे गतिशील भाषाओं में, चर का प्रकार रनटाइम पर निर्धारित किया जाता है। यह एक कारण है कि वे जावा जैसी टाइप की गई भाषाओं की तुलना में धीमी हैं।

प्रकार की जाँच कैसे की जाती है? यह प्रक्रिया धीमी होने का आवश्यक कारण क्या है?


वे धीमी नहीं हैं क्योंकि वे गतिशील हैं, वे धीमी हैं क्योंकि उन्हें तेज करना कठिन है। जावास्क्रिप्ट वास्तव में सबसे अधिक अनुकूलित है और काफी तेज है।
डेरेक लिट्ज़

जवाबों:


5

प्रश्न में भ्रम है।

एक धारणा है कि प्रकार की जाँच धीमी है, जो कि जरूरी नहीं है।

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

यह प्रेषण प्रकार है जो रनटाइम के दौरान ओवरहेड को पेश कर सकता है, क्योंकि गणना निर्देश के साथ समय बिताती है, जो तय करती है, गतिशील रूप से, क्या कार्रवाई करनी है, यह रन टाइम में देखे जाने वाले मूल्यों के प्रकार के आधार पर। एक गतिशील भाषा में, यदि मैं दो चीजों पर "+" लागू करता हूं, तो मेरा मतलब संख्यात्मक जोड़, या स्ट्रिंग संघनन हो सकता है, इसलिए मुझे यह देखने में समय बिताना होगा कि क्या करना है यह तय करने के लिए हाथ में क्या है। मूल्यांकन रणनीतियाँ हैं जो गतिशील प्रेषण की लागत को कम कर सकती हैं। (जैसे अनुरेखण JITs)

जावास्क्रिप्ट में टाइप-चेकिंग के संबंध में, देखें: http://www.cs.brown.edu/~sk/Publications/Papers/Published/gsk-flow-typing-theory/ । किस प्रकार के चेकर्स काम करते हैं, इसके अधिक सामान्य अवलोकन के लिए, एक मानक प्रोग्रामिंग भाषा पाठ्यपुस्तक एल्गोरिदम को कवर करेगी। उदाहरण के लिए, http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/


मैंने JIT और गतिशील भाषाओं के बारे में hashcollision.org/comprehensive/tracing.pdf

जावास्क्रिप्ट इंटरप्रेटर टाइप प्रेषण के लिए प्रत्येक मान के साथ टैग बिट्स को ले जाता है। क्या आप इस पर थोड़ा विस्तार कर सकते हैं? उदाहरण के लिए, टैग बिट्स का उपयोग क्या है? क्या एक बिट एक प्रकार के अनुरूप है?

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

1
निरंतर: लेकिन अक्सर, विशेष रूप से गतिशील भाषाओं में, आप विभिन्न प्रकारों के मूल्यों का प्रतिनिधित्व करना चाहते हैं। इस भेदभाव को करने के कई तरीके हैं। टाइप टैग आम हैं, लेकिन अन्य तकनीकें हैं। उदाहरण के लिए, आप मेमोरी के अवरुद्ध-बंद क्षेत्रों में कुछ प्रकार रख सकते हैं। देखें "डायनामिक रूप से टाइप की गई भाषाओं में टाइपिंग की जानकारी।" प्रतिनिधित्व तकनीकों के व्यापक सर्वेक्षण के लिए lambda-the-ultimate.org/node/3912

7

बहुत मूल रूप से, अप्रकाशित भाषाओं में, हर संदर्भ एक ऐसी वस्तु की ओर संकेत करता है जिसमें प्रकार और मूल्य दोनों होते हैं। उदाहरण के लिए var a = 3एक ऐसे उदाहरण की ओर इशारा करते हैं जिसमें मान 3 और प्रकार इंट शामिल हैं, यदि आप बनाते हैं a = "bla", तो संदर्भ को एक उदाहरण में अद्यतन किया जाता है जिसमें स्ट्रिंग "bla" और प्रकार स्ट्रिंग शामिल है, पुरानी वस्तु को त्याग दिया गया है, आदि ...

यह धीमा है क्योंकि हर बार a + bइन बुनियादी प्रकारों पर एक ऑपरेशन (जैसे ) किया जाना चाहिए, रनटाइम को पहले ऑब्जेक्ट को डीरेंस करना होगा, यह जांचें कि उनका प्रकार संगत है, ऑपरेशन करें, एक नई ऑब्जेक्ट बनाएं।

इसके विपरीत, a + bC ++ या Java में संकलन समय पर जांचता है कि प्रकार मान्य और संगत हैं, फिर a और b को तत्काल मान (संदर्भ नहीं) के रूप में संग्रहीत किया जाता है, और इसके अलावा इन मानों पर एक साधारण प्रोसेसर ऑपरेशन होता है।

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


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

0

प्रत्येक मूल्य को उसके प्रकार के साथ संग्रहीत किया जाता है, जिसे पहले निरीक्षण करने की आवश्यकता होती है। इसके अलावा रूपांतरण से स्ट्रिंग से लेकर संख्या तक निरीक्षण के माध्यम से कहा जाता है।


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