असाइनमेंट के अलावा अनिवार्य स्टेटमेंट के लिए टाइपिंग


10

अनिवार्य भाषाओं के लिए प्रकार प्रणालियों के बारे में शोध पत्रों के लिए मेरी खोज में, मैं केवल परस्पर संदर्भों के साथ एक भाषा के लिए समाधान ढूंढता हूं, लेकिन यौगिक ऑपरेटरों, छोरों या सशर्त जैसे वास्तविक अनिवार्य नियंत्रण संरचनाओं के बिना।

इसलिए यह स्पष्ट नहीं है कि कैसे एक आंशिक भाषा के साथ अनिवार्य भाषा जैसे कि http://rust-lang.org को लागू किया जा सकता है।

कागजात में पैराट्राइज्ड प्रकारों का उल्लेख नहीं किया गया है List of aक्योंकि पैराड्राइज्ड प्रकार हिंडले-मिलनर प्रकार प्रणाली का एक तुच्छ विस्तार हैं - केवल एकीकरण एल्गोरिथ्म को बढ़ाया जाना चाहिए, और बाकी की तरह ही बचाव कार्य भी होता है। हालांकि, असाइनमेंट को तुच्छ रूप से नहीं जोड़ा जा सकता है क्योंकि विरोधाभास उत्पन्न होता है, इसलिए विशेष तकनीक जैसे कि एमएल वैल्यू प्रतिबंध लागू किया जाना चाहिए।

क्या आप अनिवार्य लूप, कंडिशन, IO और कंपाउंड स्टेटमेंट वाली भाषा के लिए एक प्रकार की प्रणाली का वर्णन करने वाले किसी भी पेपर या पुस्तकों की सिफारिश कर सकते हैं?


4
मुझे यकीन नहीं है कि मैं आपके प्रश्न के स्रोत को आंशिक रूप से समझता हूं, क्योंकि मानक एमएल में वास्तव में यौगिक ऑपरेटर, लूप और सशर्त हैं (एक पंक्ति उदाहरण let val x = ref 9 in while !x>0 do (print (Int.toString (!x)); x := !x-1) end)। तो एक शोध प्रश्न के स्तर पर, क्या आप "कैमल / एसएमएल में विकसित तकनीकों को लागू करें, जिसमें मूल्य प्रतिबंध भी शामिल है" का उत्तर है?
रॉ सिम सीमन्स

सवाल था "कैमल / एसएमएल के लिए विकसित तकनीकों के बारे में आप क्या कागजात सुझाते हैं?"
नपेकैपॉप

ठीक है - मुझे यह पता चल गया था, और यह कहने के लिए मेरे आखिरी वाक्य को संपादित करने की कोशिश करने वाला था कि "क्या आप हिंदुली-मिलनर प्रकार के इंजेक्शन के लिए एक सुलभ संदर्भ की तलाश कर रहे हैं क्योंकि यह एमएल में उपयोग किया जाता है?" और फिर मैंने 5 मिनट की संपादन सीमा :-)
रोब सिमंस

जवाबों:


14

यदि आप टाइप- इनफरेंस के लिए एक स्वच्छ, कार्यात्मक संदर्भ की तलाश कर रहे हैं, तो मैं Gundry, McBride, और McKinna के 2010 के "आंशिक संदर्भ में टाइप इंफ़ेक्शन " के लिए थोड़ा आंशिक हूं , हालांकि यह किसी भी वास्तविक मौजूदा योग्यता के लिए एक अच्छा मार्गदर्शक नहीं हो सकता है। ।

मुझे लगता है कि उत्तर का एक हिस्सा यह है कि मूल्य प्रतिबंध से परे, वहाँ वास्तव में इतना मुश्किल नहीं है कि अनिवार्य भाषाओं के लिए हिंडले-मिलनर प्रकार का अनुमान लगाते हुए: यदि आप के e1; e2लिए सिंथेटिक चीनी के रूप में (fn _ => e2) e1परिभाषित करते हैं और एक नियमित रूप से while e1 do e2चीनी के रूप में परिभाषित करते हैं whiledo e1 (fn () => e2), जहां whiledoएक नियमित रूप से चीनी है पुनरावर्ती कार्य

fun whiledo g f = if g then (f (); whiledo g f) else ();

तब सब कुछ ठीक काम करेगा, जिसमें प्रकार का अनुमान भी शामिल है।

एक विशेष तकनीक के रूप में मूल्य प्रतिबंध के लिए, मुझे निम्नलिखित कहानी पसंद है; मुझे पूरा यकीन है कि मैंने इसे कार्ल क्रैरी से उठाया है। निम्नलिखित कोड पर विचार करें, जो मूल्य प्रतिबंध आपको एमएल में लिखने से रोक देगा:

let
   val x: 'a option ref = ref NONE
in
   (x := SOME 5; x := SOME "Hello")  
end

इसकी तुलना निम्न कोड से करें, जो पूरी तरह से अप्रमाणिक है:

let
   val x: unit -> 'a option ref = fn () => ref NONE
in
   (x () := SOME 5; x () := SOME "Hello")  
end

हम जानते हैं कि दूसरा उदाहरण क्या है: यह दो नई रेफ कोशिकाओं को बनाता है NONE, फिर SOME 5पहले एक (ए ) में int option refडालता है, फिर SOME "Hello"दूसरे एक (ए string option ref) में डालता है ।

xxαसंदर्भ(विकल्प(α))xΛαसंदर्भ[α](कोई नहीं)

यह सुझाव देगा कि पहले उदाहरण का एक "अच्छा" व्यवहार ठीक उसी तरह से व्यवहार करना है जिस तरह से दूसरा उदाहरण व्यवहार करता है - टाइप-स्तरीय लैम्ब्डा को दो अलग-अलग समयों पर पलटना। पहली बार जब हम तुरंत पलटा xकरते हैं int, तो x [int]यह एक संदर्भ सेल होल्डिंग का मूल्यांकन करने का कारण होगा NONEऔर फिर SOME 5। दूसरी बार हम दृष्टांत xके साथ stringहै, इस स्थिति में होगा x [string]एक (करने के लिए मूल्यांकन करने के लिए अलग-अलग! ) संदर्भ सेल पकड़े NONEऔर उसके बाद SOME "Hello"। यह व्यवहार "सही" (प्रकार-सुरक्षित) है, लेकिन यह निश्चित रूप से नहीं है कि एक प्रोग्रामर क्या उम्मीद करेगा, और यही कारण है कि हमारे पास एमएल में मूल्य प्रतिबंध है, ताकि प्रोग्रामर इस अप्रत्याशित प्रकार के व्यवहार से निपट सकें।


1
आपके वंशानुगत संस्करण e1; e2में एक बेमेल कोष्ठक और एक अर्धविराम होता है (जिसे इसे परिभाषित करना चाहिए)। क्या आपका मतलब था (fn _ => e2) e1?
त्सुयोशी इतो

राइट-ओ, त्सुयोशी: निश्चित।
रोब सिमंस

आपका अंतिम पैराग्राफ मूल रूप से कहता है: (परिचालन) शब्दार्थ और प्रकार प्रणाली मेल नहीं खाती हैं, एक को ठीक करने की आवश्यकता है, और हम बाद को ठीक करने के लिए चुनते हैं।
राडु GRIGore

राडू: यकीन है, मैं उस सारांश से सहमत हूं।
रोब सिमंस ने

3

जेवियर लेरॉय की पीएचडी थीसिस एक अच्छी शुरुआत है।


1
थीसिस अनिवार्य छोरों, सशर्तों, IO और यौगिक कथनों को कवर नहीं करता है, है ना? मेरे प्रश्न का मुख्य कारण यह था कि मुझे इन विषयों को कवर करने वाले कागजात नहीं मिले। टाइपिंग असाइनमेंट के बारे में कागजात प्रचुर मात्रा में हैं।
nponeccop

0

मुझे अपने स्वयं के प्रश्न को स्पष्ट करने के लिए खेद है, लेकिन प्रश्न में संदर्भ है

मानक एमएल , मिलनर, 1983 के लिए एक प्रस्ताव

भाग 6 "मानक व्युत्पन्न रूप" अनिवार्य रूप से अत्यधिक बड़े पैमाने पर निर्माण को पूरा करता है। और अब तक यह इन बड़े पैमाने पर स्पष्ट परिवर्तनों का सबसे पहला संदर्भ है जो मुझे मिल सकता है।

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