मुझे स्थिर रूप से टाइप की गई भाषाओं (वर्तमान में स्कैला सीखना और इसे प्यार करना) के साथ बहुत अधिक अनुभव नहीं है, लेकिन एक बात मैंने देखा है कि उन्हें कभी भी रूबी की विधि_मास्किंग या कोल्डफ्यूजन के ऑनमिशन मोड में कुछ भी नहीं लगता है। क्या स्थैतिक टाइप की गई भाषाओं में कुछ अंतर्निहित सीमा है जो इसे रोकती है या बनाती है?रूबी की विधि_मissing जैसी कुछ चीज़ों से स्थिर रूप से टाइप की गई भाषा को रोकता है?
उत्तर
निश्चित रूप से उन्हें संभालने के लिए एक तंत्र जोड़ा जा सकता है, लेकिन यह स्थिर टाइपिंग के साथ बाधाओं में है: संकलन-समय निर्धारण यह है कि आपका प्रोग्राम प्रकार की त्रुटियों से मुक्त है।
परिशिष्ट
स्काला 2.9 तरीके कि अन्यथा स्थिर प्रकार की जाँच विफल हो जाएगा में प्रकार के लिए पहुंच के गतिशील हैंडलिंग की इस तरह सक्रिय करने के एक प्रयोगात्मक विकल्प पेश किया। इसे परिष्कृत किया गया था और 2.10 में गैर-प्रयोगात्मक बना दिया गया था, हालांकि यह अभी भी एक डिफ़ॉल्ट-अक्षम सुविधा ध्वज द्वारा नियंत्रित है। आप इसके बारे में SIP 17 दस्तावेज़ में पढ़ सकते हैं। स्कैला 2.10 के "मॉड्यूलरलाइजेशन" और फीचर झंडे के स्पष्टीकरण के लिए SIP 18 देखें।
प्रतिबिंब एपीआई भी इसका उल्लंघन करते हैं, लेकिन वे मौजूद हैं और अधिकांश आधुनिक स्थिर भाषाओं में अत्यधिक उपयोग किए जाते हैं –
जो रैंडल ने कहा वह सही है। "ऐतिहासिक रूप से" बेहतर या बदतर के लिए यह बनाम "संकलन समय" के लिए एक बड़ा विभाजन रहा है। ऐसा कहा जा रहा है कि कुछ नई भाषाएं अंतर को ब्रिज करने के करीब आती हैं (स्केल दिमाग में आता है, जो मुझे लगता है कि एक आरईपीएल है)। – rogerdpack
@rogerdpack: स्कैला में निश्चित रूप से एक आरईपीएल है, हालांकि मैं इसे "गतिशील" होने का एक पहलू नहीं मानता, "भाषा के साथ काम करते समय बस एक बड़ी सुविधा। –
सांख्यिकीय रूप से टाइप की गई भाषाओं में, सदस्य फ़ंक्शंस सीधे आवेदक किए जाते हैं। यदि संकलक यह पता नहीं लगा सकता कि कौन सा सदस्य कार्य करने के लिए कार्य करता है, तो प्रोग्राम संकलित नहीं होगा। विधि आवेदक, इस अर्थ में, स्थैतिक है।
गतिशील रूप से टाइप की गई भाषाओं में, सदस्य फ़ंक्शन सीधे नहीं आते हैं। इसके बजाय, कॉलिंग कोड किसी ऑब्जेक्ट को संदेश भेजता है, और फिर भाषा रनटाइम यह बताता है कि उस संदेश के साथ क्या करना है। उदाहरण के लिए, रनटाइम उसी नाम वाले विधि के लिए ऑब्जेक्ट स्कैन करेगा, और उसके बाद ऑब्जेक्ट को method_missing
नाम के साथ स्कैन करेगा। विधि आविष्कार, इस अर्थ में, गतिशील है।
सी # 4 डायनामिक टाइपिंग के साथ स्थिर टाइपिंग को जोड़ता है। एक चर में संकलन-समय का प्रकार dynamic
हो सकता है। इस चर पर किसी भी विधि के आमंत्रण को गतिशील रूप से टाइप की गई भाषाओं में संभाला जाएगा। स्थैतिक प्रकार वाले चर पर किसी भी विधि के आमंत्रण को स्थाई रूप से टाइप की गई भाषाओं में संभाला जाएगा।
# static invocation, bound at compile time by the compiler
var s = 6;
s.ToString();
# dynamic invocation, handled at runtime by the CLR
dynamic d = 6;
d.ToString();
आप सामान मिला रहे हैं। प्रत्येक स्थिर रूप से टाइप की गई ओओ भाषा में गतिशील प्रेषण मौजूद है। और केवल कुछ गतिशील रूप से टाइप की गई भाषाएं टेक्स्टटाउन मॉडल का उपयोग स्मॉलटाक द्वारा अग्रणी के रूप में करती हैं। उदाहरण के लिए पाइथन संदेश पासिंग का उपयोग नहीं करता है (इसके बजाय, 'obj.method (args)' अनुवाद करता है "उस कार्य को प्राप्त करें जो' obj' बिंदुओं के 'विधि' सदस्य को प्राप्त करें, फिर इसे 'obj' के साथ पहले तर्क के रूप में कॉल करें और 'args'")। – delnan
'var' के पास गतिशील टाइपिंग से कोई लेना देना नहीं है। यह संकलक को वैरिएबल के स्थैतिक प्रकार को उस मान से मूल्य का अनुमान लगाने का कारण बनता है। –
सुधार के लिए धन्यवाद, तय। – yfeldblum
बस रंडाल्स पद आगे बढ़ाने के लिए, यह संभव है, लेकिन कारण यह स्थिर प्रतिमान के खिलाफ जाता है कि यह "गतिशील प्रेषण" से परे है है। गतिशील प्रेषण खुशी से आपको ऐसे फ़ंक्शन पर प्रेषित करने देता है जो गतिशील रूप से कोड के ज्ञात स्थिर टुकड़े से बंधे होते हैं। यानी कंपाइलर प्रेषण को सेट करता है जिसे दृढ़ता से रनटाइम पर निष्पादित किया जाता है, इसके परिप्रेक्ष्य से।
method_missing
कॉल क्या करता है, अनिवार्य रूप से "सभी को पकड़ें" जहां आप तय करते हैं कि स्विच स्टेटमेंट का उपयोग करके विधि नाम के आधार पर क्या करना है, या कुछ समकक्ष (जो मुझे यकीन है कि आप जानते हैं)। इस प्रकार, संकलक को पता नहीं है कि यहां क्या होने जा रहा है।
if (function is known at compile time)
{
provide static call or dynamic call to "some" derivation
}
else
{
bind the function call to obj.method_missing(...) and pass in the "details"
}
तो फिर तुम method_missing
इस तरह प्रदान करने के लिए:
def method_missing(intendedFunctionName, arguments)
{
if (intendedFunctionName is "X")
{
X may not need arguments, so just do something
}
else if (intendedFunctionName is "Y")
{
Y expects 5 arguments of varying types
Throw exception if there isn't the right number or types
}
... etc ...
}
संकलक पूछ आप भेजने के लिए "मनमाना" (यानी संकलन समय पर नहीं जाना जाता है) के तर्कों मान लीजिए कि संकलक की तरह कुछ किया करते हैं मनमानी प्रकार, intendedFunctionName
के साथ कि आप इसके लिए लेखांकन नहीं कर रहे हैं ... अच्छा, यह बहुत सुरक्षित नहीं है, और स्कैला का एक स्थिर रूप से सुरक्षित भाषा होना है।
हां, यह एक स्थिर भाषा की भावना में काम करने योग्य नहीं है। यदि आप वास्तव में उस प्रकार की लचीलापन चाहते हैं, तो पॉलीग्लोट प्रोग्रामिंग शायद आपका मित्र है।
नोट: उद्देश्य-सी सख्ती से स्थाई रूप से टाइप नहीं किया गया है। एक रनटाइम इंजन है जिस पर कोड निष्पादित होता है और गतिशील टाइपिंग सिस्टम कोड को छीनने या सी/सी ++ की तरह रेखांकित करने की अनुमति नहीं देता है।
"कंपाइलर को आपको" मनमाने ढंग से "भेजने के लिए पूछना (यानी संकलन समय पर ज्ञात नहीं) मनमानी प्रकार के तर्क" और "बहुत सुरक्षित नहीं" ध्वनि जैसे सी varargs। :) – bk1e
उद्देश्य-सी में "method_missing" है (विशेष रूप से, forwardInvocation और methodSignatureForSelector) और यह तर्कसंगत रूप से टाइप किया गया है। यह काम करता है क्योंकि यह स्थिर प्रकार त्रुटियों को संकलन समय में त्रुटियों की बजाय चेतावनियों के रूप में मानता है, क्योंकि विधि प्रेषण रनटाइम पर C++ में वर्चुअल विधियों की तुलना में बहुत अधिक हद तक होता है (और यही कारण है कि आप "method_missing" कर सकते हैं)।
स्कैला संस्करण 2.9 Dynamic
विशेषता (scaladoc) के माध्यम से इस कार्यक्षमता को प्रस्तुत करता है। Dynamic
का विस्तार करने वाली कक्षाएं जादुई विधि applyDynamic(methodName, args)
प्राप्त करती हैं, जो रूबी के method_missing
के समान है। स्कैला 2.9 के रूप में, -Xexperimental
विकल्प Dynamic
का उपयोग करने के लिए सक्षम होना चाहिए।
- 1. गतिशील रूप से टाइप की गई भाषा के साथ रिफैक्टरिंग
- 2. एक प्रोग्रामिंग भाषा कैसे सांख्यिकीय रूप से टाइप की गई और गतिशील रूप से टाइप की जा सकती है?
- 3. सी # गतिशील रूप से टाइप की गई भाषा
- 4. क्या PowerShell एक दृढ़ता से टाइप की गई भाषा है?
- 5. डायनामिक रूप से टाइप की गई भाषाएं धीमी क्यों हैं?
- 6. निर्भर रूप से टाइप की गई भाषा "असली दुनिया" प्रोग्रामिंग के लिए सबसे उपयुक्त है?
- 7. कार्यों की एक टाइप की गई सरणी
- 8. क्यों (पायथन | रूबी) व्याख्या की गई है?
- 9. किसी को भी किसी भी स्थिर टाइप की गई स्क्रिप्टिंग भाषाओं के बारे में पता है?
- 10. डी में गतिशील टाइपिंग का उपयोग करना, एक स्थिर टाइप की गई भाषा
- 11. गतिशील रूप से लोड की गई लाइब्रेरी
- 12. जो दृढ़ता से टाइप की गई भाषा है: पायथन या प्रोलॉग?
- 13. सीवीएस: स्थानीय रूप से परिवर्तित की गई फ़ाइलों को दिखाएं
- 14. टाइप की गई कमांड लाइन
- 15. Breeze.js टाइप की गई इकाइयां
- 16. विशेष रूप से स्थिर सत्यापन को बनाने के लिए डिज़ाइन की गई भाषाएं
- 17. मजबूत टाइप की गई क्लाइंट साइड भाषाएं?
- 18. रूबी एक स्क्रिप्टिंग भाषा या एक व्याख्या की गई भाषा है?
- 19. आईओसी पैटर्न में कनेक्शनस्ट्रिंग जैसी चीज़ों को कहां रखना है?
- 20. डायनामिक रूप से टाइप की गई भाषाओं में मानचित्र/सूचियों के लिए परिवर्तनीय नामकरण सम्मेलन
- 21. आरपीथॉन में स्थिर रूप से टाइप किया गया क्या है?
- 22. PHP की तरह कमजोर टाइप की गई भाषा में इंटरफेस का बिंदु क्या है?
- 23. स्विंगवर्कर अप्रत्याशित रूप से क्यों रोकता है?
- 24. गतिशील रूप से जेनरेट की गई छवियां, POST
- 25. क्या अंतराल से निपटने के दौरान स्विच जैसी कुछ चीज़ों को प्रतिस्थापित करने का एक शानदार तरीका है?
- 26. एक बतख-टाइप की गई भाषा में स्थैतिक-टाइपिंग के पहलुओं को सिम्युलेट करना
- 27. प्रोग्रामेटिक रूप से बैटरी चार्ज को रोकता है
- 28. जावा। प्रोपर्टीज फाइलें दृढ़ता से टाइप की गई कक्षाओं के रूप में
- 29. कोडनिर्देशक लोड की गई भाषा बदलें
- 30. गतिशील रूप से फाइलों की आवश्यकता है?
एक स्थिर टाइप की गई भाषा के उदाहरण के लिए * * * में इस तरह के कुछ अंतर्निहित हैं, [opDispatch in D] (http://www.digitalmars.com/d/2.0/operatoroverloading.html पर एक नज़र डालें #Dispatch)। 'opDispatch' एक टेम्पलेट विधि है जो संकलन समय पर विधि का नाम और पैरामीटर प्रकार पारित किया जाता है, ताकि आप लापता विधि को "चलाने" के तरीके को निर्धारित करने के लिए मेटाप्रोग्रामिंग का उपयोग कर सकें। बेशक, संकलक द्वारा अभी भी सब कुछ स्थिर रूप से हल किया गया है। [संबंधित SO प्रश्न] (http://stackoverflow.com/questions/3098242/fast-vector-struct-that-allows-i-and-xyz-operations-in-d)। – shambulator