मौलिक सीमा बस उस JVM पूंछ अपनी बाइट कोड में कॉल करता है और इसके परिणामस्वरूप, वहाँ खुद कहता है JVM पर बनाया पूंछ प्रदान करने के लिए एक भाषा के लिए कोई सीधा रास्ता है, प्रदान नहीं करता है। ऐसे कामकाज हैं जो समान प्रभाव प्राप्त कर सकते हैं (जैसे ट्रैम्पोलिनिंग) लेकिन वे भयानक प्रदर्शन की गंभीर लागत पर आते हैं और जेनरेट किए गए इंटरमीडिएट कोड को खराब करते हैं जो डीबगर बेकार बनाता है।
तो जेवीएम किसी भी उत्पादन-गुणवत्ता वाली कार्यात्मक प्रोग्रामिंग भाषाओं का समर्थन नहीं कर सकता है जब तक कि सूर्य लागू करने वाली पूंछ JVM में ही कॉल न हो जाए। वे वर्षों से इस पर चर्चा कर रहे हैं लेकिन मुझे संदेह है कि वे कभी भी पूंछ कॉल लागू करेंगे: यह बहुत मुश्किल होगा क्योंकि उन्होंने ऐसी बुनियादी कार्यक्षमता को लागू करने से पहले अपने वीएम को समय-समय पर अनुकूलित किया है, और सूर्य का प्रयास कार्यात्मक भाषाओं की बजाय गतिशील भाषाओं पर दृढ़ता से केंद्रित है।
इसलिए एक बहुत ही मजबूत तर्क है कि स्कैला वास्तविक कार्यात्मक प्रोग्रामिंग भाषा नहीं है: इन भाषाओं ने पूंछ को एक आवश्यक विशेषता के रूप में माना है क्योंकि योजना 30 साल पहले पहली बार पेश की गई थी।
स्रोत
2008-11-06 02:38:57
मैंने स्पष्टीकरण का काफी पालन नहीं किया। मैंने सोचा कि कंपाइलर द्वारा पूंछ-कॉल अनुकूलन लागू किया गया था। मान लें कि आपके पास एक ऐसा फ़ंक्शन है जो कंपाइलर द्वारा अनुकूलित पूंछ-कॉल हो सकता है, फिर भी आपके पास समकक्ष गैर-रिकर्सिव फ़ंक्शन हो सकता है जो लूप का उपयोग करके समान कार्यक्षमता लागू करता है, सही? यदि ऐसा है, तो यह संकलक द्वारा नहीं किया जा सका। मैं JVM पर निर्भरता का पालन करने में सक्षम नहीं हूं। यह देशी आई386 कोड उत्पन्न करने वाले स्कीम कंपाइलर के साथ तुलना कैसे करता है? –
ठीक है, बस नीचे जॉन का जवाब देखा। इसलिए, ऐसा नहीं है कि इसे कार्यान्वित नहीं किया जा सकता है, यह उचित डीबगर समर्थन –
@ गौथम के साथ लागू नहीं किया जा सकता है: डीबगिंग के बारे में मेरा बयान जेएमवी पर पूंछ कॉल उन्मूलन की कमी के लिए ट्रामपोलिन का उपयोग करने के संदर्भ में था। टेल कॉल उन्मूलन जेवीएम (अर्नोल्ड श्घोफर ने ओपनजेडीके में और एलएलवीएम में भी किया था) पर लागू किया जा सकता है, इसलिए कोई सवाल नहीं है कि यह किया जा सकता है या नहीं। माइक्रोसॉफ्ट के सीएलआर ने निश्चित रूप से 10 वर्षों तक पूंछ कॉल उन्मूलन का समर्थन किया है और एफ # के रिलीज ने दिखाया है कि यह एक गेम परिवर्तक है। मुझे लगता है कि जवाब यह है कि JVM लंबे समय से स्थिर है। –