टाइप-चेक एल्गोरिदम


19

मैं टाइपिंग एल्गोरिदम पर एक व्यक्तिगत ग्रंथ सूची अनुसंधान शुरू कर रहा हूं और कुछ सुझाव चाहता हूं। सबसे अधिक उपयोग किए जाने वाले टाइप-चेक एल्गोरिदम, रणनीति और सामान्य तकनीक क्या हैं?

मुझे विशेष रूप से जटिल टाइप-चेकिंग एल्गोरिदम में दिलचस्पी है जो व्यापक रूप से ज्ञात स्थिर टाइप की भाषाओं में लागू किए गए थे, उदाहरण के लिए, C ++, जावा 5+, स्काला या अन्य। IE, टाइपिंग-एल्गोरिदम जो अंतर्निहित भाषा (जैसे जावा 1.4 और नीचे) की बहुत सरल टाइपिंग के कारण बहुत सरल नहीं हैं।

मैं किसी विशिष्ट भाषा X, Y या Z में दिलचस्पी नहीं रखता हूं। मैं उस भाषा की परवाह किए बिना टाइप-चेक एल्गोरिदम में दिलचस्पी रखता हूं, जो वे लक्ष्य करते हैं। यदि आप "भाषा एल जैसा उत्तर देते हैं, जिसके बारे में आपने कभी नहीं सुना है, जो दृढ़ता से टाइप किया गया है और टाइपिंग जटिल है, तो एक प्रकार की जाँच एल्गोरिथ्म है जो ए और बी को एल्गोरिथ्म जेड का उपयोग करके जाँचता है", "या"। रणनीति X और Y का उपयोग स्काला के लिए किया जाता है और A का C के लिए उपयोग किया जाने वाला A का वेरिएंट Z, R, S और T सुविधाओं के कारण अच्छा है जो उस तरह से काम करता है ", तो उत्तर अच्छे हैं।


3
हो सकता है कि एक विशिष्ट भाषा के प्रकार की जाँच के बारे में पूछने के लिए आपको इस प्रश्न को संपादित करना चाहिए। ओपन-एंडेड, सूची-शैली के सवालों को आमतौर पर एसई पर हतोत्साहित किया जाता है (हालांकि इस विशेष साइट में उस बारे में कोई नीति नहीं है)। इसके अलावा: <टाइप-सिस्टम-एलिटिस्ट> जावा का टाइप सिस्टम जटिल नहीं है </ टाइप-सिस्टम-एलिटिस्ट>।
sepp2k

3
शायद प्रश्न अधिक विशिष्ट होने के लिए फिर से तैयार किया जा सकता है, लेकिन मुझे नहीं लगता कि इसे बंद किया जाना चाहिए।
डेव क्लार्क

1
@ sepp2k: मुझे पता है कि यह थोड़ा व्यापक है, लेकिन इस तरह से समाप्त हो गया क्योंकि मैं उत्तरों की उपयोगिता को सीमित नहीं करना चाहता। BTW, मुझे समझ में नहीं आया कि आप क्या कहना चाहते हैं "<-system-elitist> Java का टाइप सिस्टम जटिल नहीं है </ type-system-elitist>"। जावा का 1.4 और नीचे का प्रकार का सिस्टम वास्तव में सरल था, लेकिन जावा 5 में सफेद जेनरिक, यह बहुत अधिक जटिल हो गया।
विक्टर स्टैफुसा

2
एक विशेष भाषा के लिए पूछना इस साइट के लिए प्रश्न को अधिक अनुपयुक्त बना देगा, इम्हो। सवाल शायद सामान्य तकनीकों के लिए पूछना चाहिए।
राफेल

1
@ विक्टर एक बुनियादी उपकरण व्याकरण की विशेषता है । आप शायद हर उस दुष्ट काम को करने में सक्षम नहीं होंगे जिसकी आप उनके साथ कल्पना कर सकते हैं, लेकिन वे एक अच्छे शुरुआती बिंदु हैं।
राफेल

जवाबों:


13

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

पीओपीएल और आईसीएफपी जैसे सम्मेलनों में आपको विशिष्ट प्रकार के सिस्टमों के लिए कई प्रकार के चेकिंग एल्गोरिदम मिलेंगे, और उपन्यास दृष्टिकोण जैसे द्विदिश और त्रिदिश प्रकार की जाँच।

आम तौर पर, आपको शायद दमास-मिलनर एल्गोरिथ्म , स्थानीय प्रकार के अनुमान, द्विदिश और त्रिदिश प्रकार की जाँच के बारे में जानना होगा , और वहाँ से विस्तार करके, कागजात में संदर्भों का पालन करके और Google विद्वान का उपयोग करके यह पता लगाना होगा कि कौन से कागजात इनका हवाला देते हैं और निर्माण करते हैं दृष्टिकोण का वर्णन किया। इसके अलावा, जैसा कि ऊपर बताया गया है, POPL, ICPF, ESOP और यहां तक ​​कि ECOOP और OOPSLA जैसे सम्मेलनों में आपकी खोज से संबंधित कागजात होंगे।


Afaik, Scala का प्रकार प्रणाली अनुसंधान परियोजनाओं में विकसित किया गया है और इस प्रकार प्रकाशित किया गया है। संकलक खुला-खट्टा भी है। हालांकि, दोनों में नहीं देखा है।
राफेल

मुझे अनुमान लगाने की कोई आवश्यकता नहीं है; मुझे पता है कि स्काला के प्रकार प्रणाली पर प्रकाशित पत्र हैं। इस दावे की खोज करके आसानी से जाँच की जाती है । इसके अलावा, मैं कंपाइलर के सोर्स कोड को एल्गोरिथ्म पर पर्याप्त प्रकाशन के रूप में गिनता हूं (बशर्ते यह स्रोतों में शामिल हो; मैं ऐसा मानता हूं लेकिन जांच नहीं करता)। मेरा प्रारंभिक कथन अस्पष्ट, सत्य था, लेकिन आपकी प्रतिक्रिया अनुचित है।
राफेल

2

एक बुनियादी उपकरण विशेषता ग्रामर हैं । आप शायद हर उस दुष्ट काम को करने में सक्षम नहीं होंगे जिसकी आप उनके साथ कल्पना कर सकते हैं, लेकिन वे एक अच्छे शुरुआती बिंदु हैं।

अनिवार्य रूप से, आप किसी प्रोग्राम के सार सिंटैक्स ट्री टॉप-डाउन और / या नीचे-ऊपर चल सकते हैं और जानकारी पास कर सकते हैं। इसलिए, उदाहरण के लिए, आप वैश्विक स्कोप प्रकार की जानकारी (जैसे कक्षाएं और उनके सदस्यों) को नीचे की ओर से पास कर सकते हैं और परिणाम के प्रकारों को पुनरावर्ती रूप से निर्धारित कर सकते हैं, अर्थात परिणामी प्रकारों को ऊपर की ओर से गुजरते हुए।

यहाँ स्लाइड में कुछ स्पष्टीकरण और उदाहरण खोजें (अध्याय 5)।


क्या किसी के पास एक बेहतर संदर्भ है? मुझे लगता है मैं Dragonbook या विल्हेम / Maurer इन दिनों में से एक ... खरीदने की जरूरत
राफेल

1
उपकरण JastAdd एक उत्कृष्ट, आधुनिक संकलक संकलक प्रणाली है जो संदर्भ विशेषता व्याकरण पर आधारित है। हमने कई परियोजनाओं में इसका उपयोग किया है।
डेव क्लार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.