मेरे ज्ञान के लिए, monomorphism एक बहुत ही असामान्य शब्द है। मैंने व्यक्तिगत रूप से कोडिंग के लिए इसे कभी नहीं सुना है। यह पता लगाने के लिए कि क्या monomorphism है, हालांकि, मुझे लगता है कि हम क्या polimorphism क्या देखकर इसका मतलब क्या अनुमान लगा सकते हैं।
पॉलिमॉर्फिज्म: यह विचार है कि कई (पॉली-) विभिन्न वस्तुओं को मशीन/रनटाइम/दुभाषिया के समान प्रकार से प्रदर्शित किया जा सकता है। उदाहरण के लिए, सी # में, आपके पास जितनी चाहें उतनी कक्षाएं हो सकती हैं जो ICloneable
लागू करती हैं और उनमें से कोई भी एक सामान्य लिंक्ड सूची (उदाहरण के लिए) के लिए प्रतिलिपि निर्माता में उपयोग की जा सकती है। Full un-tested class here as an example if you're interested
ठीक है तो मोनोमोर्फिक का क्या अर्थ है?
मेरे लिए मोनोमोर्फिक का अर्थ है कि ऑब्जेक्ट का दुभाषिया उस सटीक प्रकार को संभालता है जिसकी अपेक्षा की जा रही है, और अपेक्षित प्रकार के लिए कोई विरासत या संशोधन संभव नहीं है। इस संदर्भ में, बतख टाइप की गई जावास्क्रिप्ट भाषा के साथ, वीएम कहता है "इस जावास्क्रिप्ट ऑब्जेक्ट में इन सटीक गुण हैं जो इन सटीक प्रकार हैं और नाम जैसे हैं"। सी # में, अगर हम मोनोमोर्फिक बनना चाहते थे, तो सामान्य प्रकार के प्रतिबंध असंभव होंगे क्योंकि T
को हर समय एक ही प्रकार का होना होगा।
This link प्रदर्शन के लिए महत्वपूर्ण क्यों है, यह एक अच्छी मार्गदर्शिका प्रदान करता है। मेरे लिए यह नीचे संक्षेप में किया जा सकता है।
जावास्क्रिप्ट इंजन गुणों के लिए टेबल लुकअप से बचना चाहते हैं, और ऑब्जेक्ट पॉइंटर ऑफसेट करने के बजाय। मोनोमोर्फिज्म के साथ, कोड की दी गई पंक्ति में ऑब्जेक्ट्स के ऑब्जेक्ट ऑफ़सेट हमेशा समान होंगे और वीएम के पास टेबल लुकअप के बजाय पॉइंटर एडिशन के साथ लुकअप करने का तरीका आसान तरीका है।
हकीकत में, इंजन एक ही कार्य में पारित होने वाली विभिन्न वस्तुओं की एक छोटी राशि को संभालने का प्रयास करते हैं लेकिन यदि ऑब्जेक्ट हमेशा कोड की एक ही पंक्ति पर समान दिखता है तो वीएम सबसे तेज़ होगा।
स्पष्टता के लिए उदाहरण
निम्न उदाहरण है मान्य जावास्क्रिप्ट, लेकिन तर्क o
, f1
कार्य करने के लिए monomorphic नहीं है क्योंकि वीएम दो अलग तरह से आकार का ऑब्जेक्ट्स में पारित किया जा रहा संभाल करने की जरूरत है।
function f1(o) {
console.log(o.prop1)
console.log(o.prop2)
}
// ...
o1 = { prop1: 'prop1', prop2: 'prop2' }
o2 = { prop1: 'prop1', prop2: 'prop2', prop3: 'prop3' }
f1(o1)
f1(o2)
आपके द्वारा प्रदान किए गए लिंक से उद्धरण का बिंदु यह है कि बॉक्स से बाहर AngularJS कोड प्रदान करता है एच अपने सभी जावास्क्रिप्ट फ़ंक्शन तर्कों को "मोनोमोर्फिक" बनाता है क्योंकि उनमें से गुजरने वाली वस्तुएं हर बार एक ही संरचना होती हैं जब उन्हें बुलाया जाता है।
Obligatory read: http://mrale.ph/blog/2015/01/11/whats-up-with-monomorphism.html (पहला Google हिट, बीटीडब्ल्यू) – Bergi