जावास्क्रिप्ट या पायथन जैसे गतिशील भाषाओं में, चर का प्रकार रनटाइम पर निर्धारित किया जाता है। यह एक कारण है कि वे जावा जैसी टाइप की गई भाषाओं की तुलना में धीमी हैं।
प्रकार की जाँच कैसे की जाती है? यह प्रक्रिया धीमी होने का आवश्यक कारण क्या है?
जावास्क्रिप्ट या पायथन जैसे गतिशील भाषाओं में, चर का प्रकार रनटाइम पर निर्धारित किया जाता है। यह एक कारण है कि वे जावा जैसी टाइप की गई भाषाओं की तुलना में धीमी हैं।
प्रकार की जाँच कैसे की जाती है? यह प्रक्रिया धीमी होने का आवश्यक कारण क्या है?
जवाबों:
प्रश्न में भ्रम है।
एक धारणा है कि प्रकार की जाँच धीमी है, जो कि जरूरी नहीं है।
यह सवाल भी टाइप चेकिंग के साथ प्रेषण की प्रक्रिया को भ्रमित करने के लिए लगता है , और वे दो अलग-अलग चीजें हैं। एक एक प्रक्रिया है जिसे रन टाइम पर किया जाता है, दूसरा संकलन समय पर एक प्रक्रिया है। मुझे संदेह है कि प्रश्न वास्तव में टाइप प्रेषण के बारे में पूछ रहा है।
यह प्रेषण प्रकार है जो रनटाइम के दौरान ओवरहेड को पेश कर सकता है, क्योंकि गणना निर्देश के साथ समय बिताती है, जो तय करती है, गतिशील रूप से, क्या कार्रवाई करनी है, यह रन टाइम में देखे जाने वाले मूल्यों के प्रकार के आधार पर। एक गतिशील भाषा में, यदि मैं दो चीजों पर "+" लागू करता हूं, तो मेरा मतलब संख्यात्मक जोड़, या स्ट्रिंग संघनन हो सकता है, इसलिए मुझे यह देखने में समय बिताना होगा कि क्या करना है यह तय करने के लिए हाथ में क्या है। मूल्यांकन रणनीतियाँ हैं जो गतिशील प्रेषण की लागत को कम कर सकती हैं। (जैसे अनुरेखण JITs)
जावास्क्रिप्ट में टाइप-चेकिंग के संबंध में, देखें: http://www.cs.brown.edu/~sk/Publications/Papers/Published/gsk-flow-typing-theory/ । किस प्रकार के चेकर्स काम करते हैं, इसके अधिक सामान्य अवलोकन के लिए, एक मानक प्रोग्रामिंग भाषा पाठ्यपुस्तक एल्गोरिदम को कवर करेगी। उदाहरण के लिए, http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/
बहुत मूल रूप से, अप्रकाशित भाषाओं में, हर संदर्भ एक ऐसी वस्तु की ओर संकेत करता है जिसमें प्रकार और मूल्य दोनों होते हैं। उदाहरण के लिए var a = 3
एक ऐसे उदाहरण की ओर इशारा करते हैं जिसमें मान 3 और प्रकार इंट शामिल हैं, यदि आप बनाते हैं a = "bla"
, तो संदर्भ को एक उदाहरण में अद्यतन किया जाता है जिसमें स्ट्रिंग "bla" और प्रकार स्ट्रिंग शामिल है, पुरानी वस्तु को त्याग दिया गया है, आदि ...
यह धीमा है क्योंकि हर बार a + b
इन बुनियादी प्रकारों पर एक ऑपरेशन (जैसे ) किया जाना चाहिए, रनटाइम को पहले ऑब्जेक्ट को डीरेंस करना होगा, यह जांचें कि उनका प्रकार संगत है, ऑपरेशन करें, एक नई ऑब्जेक्ट बनाएं।
इसके विपरीत, a + b
C ++ या Java में संकलन समय पर जांचता है कि प्रकार मान्य और संगत हैं, फिर a और b को तत्काल मान (संदर्भ नहीं) के रूप में संग्रहीत किया जाता है, और इसके अलावा इन मानों पर एक साधारण प्रोसेसर ऑपरेशन होता है।
बेशक, यह सब बहुत सैद्धांतिक है। व्यवहार में, अधिकांश ओवरहेड से बचने के लिए इस प्रक्रिया पर बहुत अधिक अनुकूलन किया जा सकता है, और गतिशील रूप से टाइप की गई भाषाएं काफी तेज हो सकती हैं।