मुझे लगता है कि ठेठ अनिवार्य भाषाओं के लिए कई संकलक कार्यान्वयनकर्ता केवल सीपीएस और सीपीएस-आधारित संकलन तकनीकों से परिचित नहीं थे। कार्यात्मक प्रोग्रामिंग समुदाय में सीपीएस और सीपीएस-आधारित संकलन दोनों बहुत अच्छी तरह से ज्ञात तकनीक हैं - गाइ स्टील के काम से उत्तरार्द्ध। फिर भी, एफपी समुदाय में भी, अधिकांश कंपाइलर संकलन के लिए सीपीएस-आधारित तकनीकों का उपयोग नहीं करते हैं जब तक कि भाषा स्वयं नियंत्रण ऑपरेटरों का समर्थन नहीं करती है call/cc
। कुछ और जैसे कि प्रशासनिक सामान्य रूप (ANF) (कभी-कभी इसे मोनाडिक नॉर्मल फॉर्म के रूप में भी संदर्भित किया जाता है, जो स्पष्ट रूप से उन कारणों से संबंधित है, जो स्पष्ट हो जाएंगे) का उपयोग किया जाता है, जिसका सीपीएस की तुलना में एसएसए से भी अधिक गहरा संबंध है ।
अगर मुझे सही तरीके से याद है, तो प्रशासनिक सामान्य रूप इस तथ्य से अपना नाम प्राप्त करता है कि सीपीएस-आधारित संकलन मध्यवर्ती कोड में बीटा-रीडेक्स को जन्म दे सकता है जो स्रोत कोड में कुछ भी अनुरूप नहीं था। इन्हें "प्रशासनिक रेडेक्स" के रूप में संदर्भित किया गया था। ये संकलन-समय पर कम हो सकते हैं, लेकिन एक CPS ट्रांसफॉर्म करने पर अच्छी मात्रा में शोध हुआ, जो पहली बार में प्रशासनिक रीडेक्स के बिना कोड को आउटपुट करेगा। तब लक्ष्य एक सामान्य रूप में आउटपुट का उत्पादन करना था जहां सभी "प्रशासनिक" रिडेक्स को कम कर दिया गया था, और यह प्रशासनिक सामान्य फॉर्म का मूल था। यह महसूस करने में देर नहीं लगी कि टू-स्टेप प्रक्रिया के ए (एन ऑप्टिमाइज़ेशन) के रूप में इसे देखने के लिए बहुत अधिक लाभ नहीं था: सीपीएस-ट्रांसफ़ॉर्मेशन, प्रशासनिक रिडेक्स को कम करना। विशेष रूप से, प्रशासनिक सामान्य रूप हस्केल में सबसे विशेष रूप से अभ्यास (हाथ से) के रूप में बल्कि उन्मादी शैली की तरह दिखता है। CPS रूपांतरण को monadic- शैली में रूपांतरण के रूप में समझा जा सकता है, जहाँ आप बस CPS monad का उपयोग कर रहे हैं (इसलिए वास्तव में विभिन्न मूल्यांकन आदेशों के अनुरूप monadic-style में "कनवर्ट" करने के कई तरीके हैं)। सामान्य तौर पर, हालांकि, आप काफी अलग मोनैड का उपयोग कर सकते हैं, और इसलिए सामान्य शैली में रूपांतरण और इस प्रकार प्रशासनिक सामान्य रूप वास्तव में विशेष रूप से सीपीएस से संबंधित नहीं है।
फिर भी, CPS बनाम ANF के लिए कुछ लाभ थे। विशेष रूप से, कुछ अनुकूलन थे जो आप सीपीएस में कर सकते थे, जैसे कि मानक अनुकूलन, जैसे बीटा कम करना, जो एएनएफ के लिए आवश्यक (प्रतीत होता है) तदर्थ नियम। राक्षसी दृष्टिकोण से, ये नियम धर्मांतरण के अनुरूप हैं। अपशॉट अब एक सिद्धांत है जो समझा सकता है कि नियमों को क्या जोड़ा जाना चाहिए और क्यों। एक हालिया पत्र इस (तार्किक दृष्टिकोण से) का एक नया (और) बहुत स्पष्ट विवरण देता है और इसके संबंधित कार्य खंड उन विषयों पर एक संक्षिप्त लेकिन सभ्य सर्वेक्षण और साहित्य में संदर्भ के रूप में कार्य करता है।
सीपीएस के साथ समस्या इसके मुख्य लाभों में से एक है। CPS ट्रांसफ़ॉर्मेशन आपको कंट्रोल ऑपरेटर्स को लागू करने की अनुमति देता है call/cc
, लेकिन इसका अर्थ है कि CPS इंटरमीडिएट कोड में प्रत्येक गैर-स्थानीय फ़ंक्शन कॉल को संभावित प्रदर्शन नियंत्रण प्रभाव के रूप में माना जाता है। यदि आपकी भाषा में नियंत्रण ऑपरेटर शामिल हैं, तो यह ठीक उसी तरह है जैसे यह होना चाहिए (हालांकि तब भी अधिकांश कार्य संभवत: कोई नियंत्रण नहीं कर रहे हैं shenanigans)। यदि आपकी भाषा में नियंत्रण ऑपरेटर शामिल नहीं हैं, तो निरंतरता के उपयोग पर वैश्विक आक्रमणकारी हैं जो स्थानीय रूप से स्पष्ट नहीं हैं। इसका मतलब यह है कि ऐसे अनुकूलन हैं जो सामान्य सीपीएस कोड पर प्रदर्शन करने के लिए निराधार हैं जो सीपीएस के इस विशेष रूप से अच्छी तरह से व्यवहार किए गए उपयोग पर प्रदर्शन करेंगे। एक तरह से यह प्रकट होता हैडेटा और नियंत्रण प्रवाह विश्लेषण की सटीकता में परिवर्तन । (CPS ट्रांसफ़ॉर्मिंग कुछ मायनों में मदद करता है, दूसरों को नुकसान पहुँचाता है, हालाँकि यह जिन तरीक़ों से मदद करता है, वे अधिकतर CPS पहलू के बजाय दोहराव के कारण होते हैं।) 1 आप बेशक, नियमों को जोड़ सकते हैं और इसके लिए क्षतिपूर्ति करने के लिए विश्लेषण समायोजित कर सकते हैं (यानी शोषण करने के लिए) वैश्विक हमलावरों), लेकिन फिर आपने सीपीएस-आधारित संकलन के प्रमुख लाभों में से एक को हरा दिया है, जो यह है कि कई (विशेष रूप से) विशेष प्रयोजन, तदर्थ अनुकूलन सामान्य-उद्देश्य अनुकूलन (विशेष रूप से बीटा कमी) के विशेष मामले बन जाते हैं। )।
अंतत:, जब तक आपकी भाषा पर नियंत्रण संचालकों का नहीं होता है, आमतौर पर सीपीएस-आधारित संकलन योजना का उपयोग करने का बहुत कारण नहीं होता है। एक बार जब आप ऊपर बताए गए मुद्दों की भरपाई कर लेते हैं, तो आपने आमतौर पर सीपीएस-आधारित संकलन के लाभों को समाप्त कर दिया है और सीपीएस का उपयोग नहीं करने के बराबर कुछ उत्पादित किया है। उस समय, सीपीएस ज्यादा लाभ के लिए सिर्फ इंटरमीडिएट लुकिंग इंटरमीडिएट कोड बना रहा है। 2007 के सीपीएस-आधारित संकलन के लिए एक तर्क इन मुद्दों में से कुछ को संबोधित करता है और सीपीएस रूपांतरण के एक अलग रूप का उपयोग करके कुछ अन्य लाभ प्रस्तुत करता है। जो चीजें पेपर लाती हैं, वे (2017) के पेपर से पहले बताई गई हैं।
1 क्या एसएसए और सीपीएस के बीच समानता यह कम या ज्यादा असंभव नहीं है? नहीं, इस समतुल्यता की स्थिति को प्रस्तुत करने वाली पहली चीजों में से एक यह है कि समतुल्य मनमानी सीपीएस कोड के लिए काम नहीं करता है , लेकिन यह नियंत्रण ऑपरेटरों के बिना एक भाषा के लिए सीपीएस रूपांतरण (जो वे परिभाषित करते हैं) के आउटपुट के लिए काम करता है ।