कई उद्योग-प्रयुक्त कंपाइलरों में निरंतरता गुजर शैली पर स्थिर-एकल असाइनमेंट को क्यों पसंद किया जाता है?


16

स्थैतिक-एकल असाइनमेंट (एसएसए) पर विकिपीडिया पृष्ठ के अनुसार , एसएसए का उपयोग एलएलवीएम, जीसीसी, एमएसवीसी, मोनो, डाल्विक, स्पाइडरमोंकी, और वी 8 जैसी बड़ी और प्रसिद्ध परियोजनाओं द्वारा किया जाता है, जबकि पृष्ठ पर निरंतरता-गुजर शैली का उपयोग करते हुए। (CPS) की तुलना में थोड़ी कमी है।

मेरे पास यह धारणा है कि सीपीएस को मुख्य रूप से कार्यात्मक भाषाओं को लागू करने वाले कंपाइलर और दुभाषियों द्वारा पसंद किया जाता है - विशेष रूप से, हास्केल और स्कीम में प्रथम श्रेणी निरंतरता समर्थन के लिए उत्परिवर्तन या आवश्यकता के कारण सीपीएस शैली के प्रति मजबूत झुकाव है (मुझे लगता है) कि स्मॉलटाक को संभवतः इसकी आवश्यकता होगी)। सीपीएस का उपयोग करने वाले प्रमुख साहित्य से मुझे लगता है कि वे मुख्य रूप से योजना पर काम कर रहे हैं या कुछ मामलों में योजना से संबंधित हैं।

क्या कोई विशेष कारण है कि गोद लेने की गति के अलावा उद्योग में एसएसए का उपयोग किया जाता है? एसएसए और सीपीएस का घनिष्ठ संबंध है; इसका मतलब यह है कि या तो दूसरे के संदर्भ में बताना आसान होगा, लेकिन शायद सूचना प्रतिनिधित्व कम कॉम्पैक्ट होगा या सीपीएस के लिए कम कुशल होगा।


3
IIRC, SSA के लिए पारंपरिक डेटाफ़्लो विश्लेषण हस्तांतरण के दिनों में डिज़ाइन की गई अनिवार्य भाषाओं के लिए पारंपरिक अनुकूलन सीपीएस की तुलना में अधिक आसानी से होते हैं .. विशेष रूप से, उपयोग-डीफ़ और डीफ़-यूज़ चेन को सीधे SSA प्रतिनिधित्व "पढ़ा" जा सकता है। जड़ता कुछ के लिए मायने
रखती

जवाबों:


9

मुझे लगता है कि ठेठ अनिवार्य भाषाओं के लिए कई संकलक कार्यान्वयनकर्ता केवल सीपीएस और सीपीएस-आधारित संकलन तकनीकों से परिचित नहीं थे। कार्यात्मक प्रोग्रामिंग समुदाय में सीपीएस और सीपीएस-आधारित संकलन दोनों बहुत अच्छी तरह से ज्ञात तकनीक हैं - गाइ स्टील के काम से उत्तरार्द्ध। फिर भी, एफपी समुदाय में भी, अधिकांश कंपाइलर संकलन के लिए सीपीएस-आधारित तकनीकों का उपयोग नहीं करते हैं जब तक कि भाषा स्वयं नियंत्रण ऑपरेटरों का समर्थन नहीं करती है call/cc। कुछ और जैसे कि प्रशासनिक सामान्य रूप (ANF) (कभी-कभी इसे मोनाडिक नॉर्मल फॉर्म के रूप में भी संदर्भित किया जाता है, जो स्पष्ट रूप से उन कारणों से संबंधित है, जो स्पष्ट हो जाएंगे) का उपयोग किया जाता है, जिसका सीपीएस की तुलना में एसएसए से भी अधिक गहरा संबंध है

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

फिर भी, CPS बनाम ANF के लिए कुछ लाभ थे। विशेष रूप से, कुछ अनुकूलन थे जो आप सीपीएस में कर सकते थे, जैसे कि मानक अनुकूलन, जैसे बीटा कम करना, जो एएनएफ के लिए आवश्यक (प्रतीत होता है) तदर्थ नियम। राक्षसी दृष्टिकोण से, ये नियम धर्मांतरण के अनुरूप हैं। अपशॉट अब एक सिद्धांत है जो समझा सकता है कि नियमों को क्या जोड़ा जाना चाहिए और क्यों। एक हालिया पत्र इस (तार्किक दृष्टिकोण से) का एक नया (और) बहुत स्पष्ट विवरण देता है और इसके संबंधित कार्य खंड उन विषयों पर एक संक्षिप्त लेकिन सभ्य सर्वेक्षण और साहित्य में संदर्भ के रूप में कार्य करता है।

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

अंतत:, जब तक आपकी भाषा पर नियंत्रण संचालकों का नहीं होता है, आमतौर पर सीपीएस-आधारित संकलन योजना का उपयोग करने का बहुत कारण नहीं होता है। एक बार जब आप ऊपर बताए गए मुद्दों की भरपाई कर लेते हैं, तो आपने आमतौर पर सीपीएस-आधारित संकलन के लाभों को समाप्त कर दिया है और सीपीएस का उपयोग नहीं करने के बराबर कुछ उत्पादित किया है। उस समय, सीपीएस ज्यादा लाभ के लिए सिर्फ इंटरमीडिएट लुकिंग इंटरमीडिएट कोड बना रहा है। 2007 के सीपीएस-आधारित संकलन के लिए एक तर्क इन मुद्दों में से कुछ को संबोधित करता है और सीपीएस रूपांतरण के एक अलग रूप का उपयोग करके कुछ अन्य लाभ प्रस्तुत करता है। जो चीजें पेपर लाती हैं, वे (2017) के पेपर से पहले बताई गई हैं।

1 क्या एसएसए और सीपीएस के बीच समानता यह कम या ज्यादा असंभव नहीं है? नहीं, इस समतुल्यता की स्थिति को प्रस्तुत करने वाली पहली चीजों में से एक यह है कि समतुल्य मनमानी सीपीएस कोड के लिए काम नहीं करता है , लेकिन यह नियंत्रण ऑपरेटरों के बिना एक भाषा के लिए सीपीएस रूपांतरण (जो वे परिभाषित करते हैं) के आउटपुट के लिए काम करता है ।


2
प्रारंभिक उत्तर के बाद से थोड़ी देर हो गई है, लेकिन मुझे यह अच्छा लग रहा है कि आखिरकार उत्तर को स्वीकार करने के लिए मैं 10% से अधिक समझता हूं ...
CinchBlue

2

मैं एक कंपाइलर विशेषज्ञ नहीं हूं, इसलिए जो मैं नमक के एक दाने के साथ कहता हूं, मुझे उम्मीद है कि एक वास्तविक संकलक विशेषज्ञ इसमें झंकार करेगा। मुझे बताया गया था:

  • CPSed कोड गैर-स्थानीय रूप से बहुत अधिक कूदता है, जो कैश इलाके को बर्बाद कर देता है, इसलिए प्रदर्शन।
  • सीपीएस को पारंपरिक संकलन की तुलना में अधिक महंगा कचरा संग्रह की आवश्यकता होती है जो आम तौर पर स्टैक पर बहुत सारे सामान को संग्रहीत कर सकते हैं (जो आवंटित करने और डील करने के लिए तेज है)।

दोनों सीपीएस द्वारा संकलित कोड बनाने के लिए तुलनात्मक रूप से धीमी गति से बदल रहे हैं।


3
मुझे लगता है कि आप CPS एक मध्यवर्ती भाषा का उपयोग करके CPS रूपांतरित स्रोत कोड (या स्रोत से स्रोत परिवर्तन) का मिश्रण कर रहे हैं। मान लें कि आपकी इनपुट भाषा नियंत्रण प्रभावों का समर्थन नहीं करती है , तो, उदाहरण के लिए, एक स्टैक अनुशासन के साथ निरंतरता का उपयोग किया जाएगा - कोई कचरा कलेक्टर की आवश्यकता नहीं होगी, और निरंतरता नियंत्रण प्रवाह के किनारों पर अधिक या कम, अनुरूप होंगे। ग्राफ इसलिए कोई अतिरिक्त कूद नहीं होगा। आपको कुछ सामान्य प्रयोजन के उच्च क्रम के कार्यों का उपयोग करके निरंतरता को लागू करने की आवश्यकता नहीं है। call/cc
डेरेक एल्किंस ने SE

@DerekElkins यह मेरे लिए स्पष्ट नहीं था कि ओपी किस बारे में पूछ रहा था।
मार्टिन बर्गर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.