ऐतिहासिक रूप से, यह सिर्फ हर किसी के बारे में क्यों लगता है और उनके बच्चे भाई ने अपने स्वयं के कॉलिंग सम्मेलनों को परिभाषित किया है? आपके पास सी, सी ++, विंडोज, पास्कल, फोरट्रान, फास्टकॉल और शायद एक अरब अन्य लोग हैं जिन्हें मैंने उल्लेख नहीं किया था। क्या अधिकांश सम्मेलन के उपयोग के लिए एक सम्मेलन सबसे कुशल नहीं होना चाहिए? क्या किसी दूसरे को पसंद करने का कोई अच्छा कारण है?इतने सारे अलग-अलग कॉलिंग सम्मेलन क्यों हैं?
उत्तर
आपके द्वारा उल्लिखित कॉलिंग सम्मेलनों को विभिन्न भाषाओं और विभिन्न हार्डवेयर के दशकों के दौरान डिजाइन किया गया था। उन सभी के पास अलग-अलग लक्ष्य थे। printf के लिए cdecl समर्थित परिवर्तनीय तर्क। stdcall के परिणामस्वरूप छोटे कोड जेन, लेकिन कोई परिवर्तनीय तर्क नहीं है। फास्टकॉल पुरानी मशीनों पर केवल एक या दो तर्कों के साथ सरल कार्यों के प्रदर्शन को बहुत तेज कर सकता है (लेकिन शायद ही कभी एक गति तेज है।)
जब x64 को पेश किया गया था, तो ध्यान दें कि कम से कम विंडोज पर, यह डिजाइन करने के लिए डिज़ाइन किया गया था एक एकल कॉलिंग सम्मेलन।
रेमंड चेन ने सम्मेलन के इतिहास पर एक महान श्रृंखला लिखी, आप here शुरू कर सकते हैं।
मुझे रेमंड चेन लेख पसंद है। इसने बहुत सारे सवालों का जवाब दिया। – dsimcha
क्योंकि ऐतिहासिक रूप से हर कोई और उनके बच्चे भाई ने अपने स्वयं के कॉलिंग सम्मेलनों को परिभाषित किया था। वे सभी अलग-अलग उद्देश्यों के लिए बनाए गए थे और इस प्रकार विभिन्न प्रदर्शन आवश्यकताओं से प्रेरित थे। उदाहरण के लिए, C++ this
पैरामीटर को पारित करने के लिए अनुकूलन का पक्ष लेता है।
- उनमें से कुछ प्रदर्शन के संबंध में अधिक कुशल हैं और अन्य कोड आकार में अधिक कुशल हैं।
- कुछ विशेषताएं (परिवर्तनीय तर्क गणना) केवल कुछ सम्मेलनों के साथ समर्थित हैं।
अधिक जानकारी: http://en.wikipedia.org/wiki/X86_calling_conventions
कारण का हिस्सा माइक्रोप्रोसेसर (या प्रोसेसर) की अंतर्निहित संरचना है। अधिकांश भाषाएं एक विशिष्ट सीपीयू पर शुरू होती हैं, और उस आर्किटेक्चर के साथ थोड़ा उलझ जाती हैं। उदाहरण के लिए, पुराने यूनिवैक 1100 श्रृंखला कंप्यूटर में कॉल स्टैक भी नहीं था!
कारण का एक और हिस्सा यह है कि जब तक आप चीजों को करने के कई तरीकों का प्रयास नहीं करते हैं तब तक सबसे अच्छा समाधान देखना संभव नहीं है।
वे विभिन्न उद्देश्यों के लिए और विभिन्न अनुकूलन प्रणालियों के साथ बनाए गए हैं।
उदाहरण के लिए, "स्टैक ओवरफ़्लो" को कम करने के लिए (कोई इरादा नहीं है) कुछ लोगों ने स्टैक ओवरफ्लो असंभव बनाने के लिए फ़ंक्शन कॉल करने के लिए विभिन्न विचारों के बारे में सोचा था।
एक और उदाहरण लैम्ब्डा कैलकुस है। बहुत अस्पष्ट नहीं होना चाहिए, लेकिन लैम्ब्डा में, कार्य केवल एक तर्क पारित कर सकते हैं और एक मूल्य वापस कर सकते हैं, और इस प्रकार अपने स्वयं के कॉलिंग सम्मेलनों की भी आवश्यकता होती है।
- 1. एआरएम मोड और इतने सारे क्यों हैं?
- 2. Win32-API में इतने सारे कस्टम प्रकार क्यों हैं?
- 3. सी # कनेक्शन पूलिंग के लिए इतने सारे sp_resetconnections क्यों?
- 4. एंटिटी फ्रेमवर्क डाटाबेस में इतने सारे राउंडट्रिप्स क्यों करता है?
- 5. इतने सारे पूर्ण डेटाबेस स्कीमा नमूना ऑनलाइन क्यों?
- 6. एमवीसी-मिनी-प्रोफाइलर: इतने सारे एक्स-मिनीप्रोफाइलर-आईडी क्यों?
- 7. वैक्टर इतने उथले क्यों हैं?
- 8. Drupal: इतने सारे जेएस और सीएसएस फाइलें?
- 9. क्या पिछड़ा-संगत कोड में इतने सारे बहिष्कृत विधियां हैं?
- 10. एएसपी.नेट एमवीसी 4 में इतने सारे NuGet पैकेज क्यों हैं और जो वास्तव में महत्वपूर्ण हैं?
- 11. जावाई बनाम PHP - इतने सारे लोग क्यों सोचते हैं कि जावा बेहतर है?
- 12. जावा स्रोतों में एक दूसरे के अंदर इतने सारे फ़ोल्डर्स क्यों हैं?
- 13. यह सरल .NET कंसोल ऐप में इतने सारे धागे क्यों हैं?
- 14. क्यों जावा के पास सी # के विपरीत इतने सारे संस्करण हैं?
- 15. रूबी में एक ही चीज़ करने के लिए इतने सारे अलग-अलग तरीके क्यों हैं?
- 16. "आर्टर्ट" कक्षा में इतने सारे अनावश्यक तरीके क्यों हैं? प्रत्येक का इस्तेमाल कब किया जाना चाहिए?
- 17. अमरूद की अपरिवर्तनीय सूची में इतने सारे अधिभार क्यों हैं() विधियों?
- 18. win32 एप्लिकेशन इतना ऑब्जेक्ट उन्मुख नहीं है और इतने सारे पॉइंटर्स क्यों हैं?
- 19. इतने कम संस्करण फ़ाइल सिस्टम क्यों हैं?
- 20. स्वचालित जीयूआई उपकरण इतने बेकार क्यों हैं?
- 21. डब्ल्यूसीएफ बाइंडिंग्स - इतने सारे! मैं एक कैसे चुनूं?
- 22. के बारे में बताएं एक्स => x.ToString() // इतने सारे कॉल
- 23. एआरएम से सी कॉलिंग सम्मेलन, एनईओएन
- 24. इतने सारे परिचालनों के लिए ओके (एन) में सबसे खराब मामला क्यों है?
- 25. इतने सारे एमवीसी वेब ढांचे एक वर्ग में एकाधिक नियंत्रक कार्यों को समूहबद्ध करने का पक्ष क्यों करते हैं?
- 26. उन जावा रेत के खेल इतने सारे कणों का ट्रैक कैसे रखते हैं?
- 27. एसओए डिज़ाइन में सीआरयूडी ऑपरेशन इतने खराब क्यों हैं?
- 28. मेरे रेल इतने धीमे क्यों परीक्षण कर रहे हैं?
- 29. फाइलसाइज में हास्केल/जीएचसी निष्पादन योग्य इतने बड़े क्यों हैं?
- 30. Android लेआउट फ़ाइल नाम इतने सीमित क्यों हैं?
+1 मैं दूसरा प्रश्न यह प्रश्न! – Poni