OCaml आलोचना: यह अभी भी वैध है?


15

मैं OCaml के साथ एक पूर्ण नौसिखिया हूँ। मैंने हाल ही में OCaml के प्रति आलोचना की अच्छी मात्रा को सूचीबद्ध करते हुए इस पृष्ठ में ठोकर खाई है ।

यह देखते हुए कि यह पृष्ठ काफी पुराना है (2007): गोलियों के कौन से बिंदुओं को सूचीबद्ध किया गया है जो आज भी सत्य हैं? उदाहरण के लिए: क्या यह अभी भी सही है कि सामान्य वस्तु को प्रिंट करना असंभव है?

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


5
मैं विषय से हटकर के रूप में इस सवाल को बंद करने के मतदान रहा हूँ क्योंकि meta.programmers.stackexchange.com/questions/6417/...
फिलिप

3
एक कांटा है जहाँ उन लोगों को तय किया गया है: tryfsharp.org
डेन

7
बेशक आप जिस निबंध से जुड़े हैं उसमें राय मान्य है, लेकिन क्या ये आलोचनाएँ आपके लिए प्रासंगिक हैं या नहीं, यह पूरी तरह से अलग मामला है। ध्यान दें कि लेखक एक आम लिस्प पृष्ठभूमि से आता है और इसलिए इसमें लिस्पिश मूल्य हैं। यदि आप OCaml को Lisp (उदाहरण के लिए "OCaml केवल मनुष्यों के लिए Haskell है" या "यदि C एक कार्यात्मक भाषा थी, तो आप OCaml है") की तुलना करने के बजाय इसे और अधिक संतोषजनक पाएंगे। इसकी सभी खामियों के लिए, OCaml एक बेहतरीन भाषा है और मैं आपको इसके बावजूद इसे फिर से डब करने के लिए प्रोत्साहित करूंगा।
आमोन

5
जहां तक ​​मुझे पता है कि हार्डवेयर में पूर्णांक ओवरफ़्लो का पता लगाने का कोई तरीका नहीं है , इसलिए आपको इसे पता लगाने के लिए पूरे स्थान पर रनटाइम चेक सम्मिलित करना होगा; लेकिन लेखक ने प्रदर्शन के आधार पर "bignum" का उपयोग करते हुए खारिज कर दिया! स्टैटिक टाइपिंग अमाउंट के बारे में शिकायत यह है कि सीट बेल्ट खराब हैं क्योंकि आपको लगता है कि आप कार दुर्घटना में नहीं मर सकते। मॉड्यूल अपरिवर्तनीयता के बारे में शिकायत कह रही है कि वह चीजों को बंद करना चाहती है - एक विरोधी मॉड्यूलर और त्रुटि-प्रवण अभ्यास। "छोटे प्रकार के चिड़ियाघर" का प्रकार अनुमान से कोई लेना-देना नहीं है। यह स्पष्ट है कि उसके पक्षपात कहां हैं
डोभाल

2
@ डोवाल: बेशक आप हार्डवेयर में अतिप्रवाह का पता लगा सकते हैं। हालांकि, इससे निपटना एक सॉफ्टवेयर मामला है।
मेसन व्हीलर

जवाबों:


13

इस लेख में कई स्थानों पर चर्चा की गई है:

संक्षेप में: हाँ, OCaml एक लिस्प नहीं है, और नहीं, यह सही नहीं है (इसका क्या मतलब है?)। मुझे नहीं लगता कि ब्लॉग पोस्ट में उल्लिखित बिंदु दिन-प्रतिदिन ओएईएमएल प्रोग्रामर के लिए प्रासंगिक हैं।

O'Caml का अध्ययन करने के बाद, मुझे लगता है कि यह एक दिलचस्प भाषा है, जो आपको उन कार्यक्रमों के निर्माण में मदद कर सकती है, जिन्हें आप लिखने की हिम्मत भी नहीं करेंगे, कहते हैं, C / C ++ / Java: उदाहरण के लिए, Frama-C पर एक नज़र डालें ।

O'Caml के अप-टू-डेट विवरण के लिए, मैं आपको इसकी विशेषताओं के बारे में पढ़ने के लिए प्रोत्साहित करता हूं : भाषा मजबूत स्थैतिक प्रकार की जाँच तकनीकों को बढ़ावा देती है जो कार्यान्वयन को उत्पादक, अभी तक सुरक्षित, रनटाइम पर ध्यान केंद्रित करने की अनुमति देती है।

महत्वपूर्ण : मैं कोई OCaml विशेषज्ञ नहीं हूं: यदि आप उनमें से एक हैं और देखते हैं कि मैंने कुछ गलत लिखा है, तो कृपया मुझे सुधारें। मैं इस पोस्ट को तदनुसार संपादित करूंगा।

स्टेटिक प्रकार की जाँच

  • सुरक्षा की झूठी भावना

    यह सच है, लेकिन स्पष्ट है।

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

    जब डायनामिक चेकिंग तकनीक लागू की जा सकती है: OCaml कंपाइलर में डिबगिंग सूचना के साथ निष्पादन उत्पन्न करने के लिए झंडे होते हैं, और इसी तरह ... या, यह कोड उत्पन्न कर सकता है जो प्रोग्रामर पर आँख बंद करके भरोसा करता है और टाइप जानकारी को यथासंभव मिटा देता है। प्रोग्रामर जो मजबूत कार्यक्रम चाहते हैं, उन्हें स्पष्ट रूप से गतिशील चेक लागू करना चाहिए।

    यही बात उदाहरण के लिए आम लिस्प पर भी लागू होती है, लेकिन उलट: गतिशील प्रकार पहले, वैकल्पिक प्रकार की घोषणाओं के साथ और संकलक निर्देश दूसरा।

  • कुछ बुनियादी प्रकार

    अभी भी लागू होता है: मूल भाषा नहीं बदली है (या नाटकीय रूप से नहीं)।

  • साइलेंट इंटेगर ओवरफ्लो

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

  • मॉड्यूल अपरिवर्तनीयता

    1. लेखक फंडर्स का उल्लेख करता है लेकिन मैं यह देखने में विफल हूं कि उसका उदाहरण कैसे लागू नहीं किया जा सकता है। Https://realworldocaml.org के फर्स्ट क्लास मॉड्यूल्स चैप्टर को पढ़कर ऐसा लगता है कि नए मॉड्यूल्स को बनाने और बनाने के लिए मॉड्यूल्स का इस्तेमाल किया जा सकता है । बेशक, किसी मौजूदा मॉड्यूल को संशोधित करने के लिए स्रोत कोड संशोधन की आवश्यकता होती है, लेकिन फिर, यह प्रोग्रामिंग भाषाओं के बीच असामान्य नहीं है।

    2. " शब्दार्थ , कार्यों को ऑनलाइन संकलित किया जाता है"

    असहमति से ऊपर का लाल धागा कह रहा है कि बंधन समय पर हल हो गया है। हालाँकि, यह एक कार्यान्वयन विवरण है और मुझे लगता है कि जोर दिया हुआ शब्दार्थ कार्य के समाधान के तरीके से संबंधित है। उदाहरण:

     let f x y = x + y ;;
     let g a b = f b a ;;
     let f x y = x * y ;;
     exit (g 2 3) ;;
    

    उपरोक्त कार्यक्रम संकलित करता है, और जब निष्पादित किया जाता है, तो 5 लौटता है, क्योंकि gपहले संस्करण के साथ परिभाषित किया गया है f, जैसे -यदि कॉलिंग फ़ंक्शन gकॉल को इनबिल्ड करता है f। यह "बुरा" नहीं है, वैसे, यह ओ'कमल के नाम के छायांकन नियमों के अनुरूप है।

    संक्षेप में : हाँ, मॉड्यूल अपरिवर्तनीय हैं । लेकिन वे भी रचना योग्य हैं

  • बहुरूपता रन-टाइम प्रकार त्रुटियों का कारण बनता है

    मैं उल्लेखित त्रुटि को पुन: पेश नहीं कर सकता। मुझे लगता है कि यह एक संकलक त्रुटि है।

कोई मैक्रों नहीं

वास्तव में, मैक्रोज़ नहीं हैं, लेकिन प्रीप्रोसेसर (OcamlP4, OcamlP5, ...) हैं।

माइनर लैंग्वेज सक्सेसनेस

  • रिकॉर्ड फ़ील्ड नामकरण नरक

    सही है, लेकिन आपको मॉड्यूल का उपयोग करना चाहिए:

    1. दो रिकॉर्ड के दो क्षेत्रों OCaml में एक ही लेबल है
    2. क्षेत्र के नाम हल करना
  • वाक्य - विन्यास

    अभी भी लागू होता है (लेकिन वास्तव में, यह सिर्फ वाक्यविन्यास है)।

  • कोई बहुरूपता नहीं

    अभी भी लागू होता है, लेकिन किसी तरह ऐसे लोग हैं जो लिस्प के संख्यात्मक टॉवर के बजाय पसंद करते हैं (मुझे नहीं पता क्यों)। मुझे लगता है कि यह प्रकार की मदद करता है।

  • असंगत फ़ंक्शन सेट करता है

    OCaml बैटरियों शामिल परियोजना देखें । विशेष रूप से, बैटर्रे , map2सरणियों के उदाहरण के लिए।

  • कोई गतिशील चर नहीं

    लागू किया जा सकता है:

    1. http://okmij.org/ftp/ML/dynvar.txt
    2. http://okmij.org/ftp/ML/index.html#dynvar
  • वैकल्पिक ~ तर्क चूसना

    भाषा प्रतिबंध द्वारा, आप सामान्य लिस्प में वैकल्पिक और कीवर्ड तर्क नहीं मिला सकते हैं। क्या इसका मतलब है कि यह बेकार है? (बेशक, यह मैक्रोज़ के साथ बदला जा सकता है (उदाहरण के लिए मेरा जवाब देखें ))। O'Caml में वैकल्पिक और नामित तर्क के लिए O'Caml के दस्तावेज देखें ।

  • आंशिक तर्क आवेदन असंगति

    मुझे नहीं लगता कि यह वास्तव में व्यवहार में कष्टप्रद है।

  • अंकगणित की पठनीयता

    यह रखती है, लेकिन यदि आप चाहें तो संख्यात्मक समस्याओं के लिए आप आर या पायथन का उपयोग कर सकते हैं।

  • मूक नाम संघर्ष संकल्प

    अभी भी लागू होता है, लेकिन ध्यान दें कि यह अच्छी तरह से प्रलेखित है।

  • कोई वस्तु इनपुट / आउटपुट नहीं

    अभी भी लागू होता है।

कार्यान्वयन, पुस्तकालय

ये हर दिन बदलते रहते हैं: कोई निश्चित उत्तर नहीं है।

आखिरकार,

"आपको OCaml (या, बेहतर अभी तक, हास्केल) की कोशिश करनी चाहिए, भले ही आपको लगता है कि यह बेकार है और आप इसका उपयोग नहीं कर रहे हैं। इसके बिना, आपकी कंप्यूटर विज्ञान की शिक्षा अधूरी है, ठीक उसी तरह जैसे कुछ लिस्प और (या) के बिना अधूरी है। , बेहतर अभी तक, विधानसभा) जोखिम। "

... अभी भी लागू होता है।


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

@ और इसके बाद मैंने अपना उत्तर संपादित किया।
coredump

1
"... ऐसे लोग हैं जो पसंद करते हैं कि लिस्प के संख्यात्मक टॉवर के बजाय (मुझे नहीं पता क्यों)। मुझे लगता है कि यह प्रकार की सहायता से मदद करता है।" बिंगो। SML और OCaml के टाइप सिस्टम के लिए जरूरी है कि हर एक्सप्रेशन का एक ही प्रकार हो। SML का गणित संचालकों का अधिभार भाषा में निर्मित एक अपवाद है। यह हास्केल का भी सच है; उस तरह की ओवरलोडिंग को सक्षम करना, प्रकार की कक्षाओं के पीछे प्रेरणा थी। पकड़ यह है कि आपके पास प्रति प्रकार केवल एक प्रकार का वर्ग उदाहरण हो सकता है। आप नेत्रहीन भी पूर्णांक को समान आकार के फ्लोट में नहीं बदल सकते हैं - एक 64-बिट फ्लोट में केवल 54 बिट्स सटीक होते हैं।
डोभाल

@ डोभाल ने रैकेट के लिए संख्यात्मक टॉवर टाइप करने जैसी किसी चीज़ के बारे में क्या कहा ? क्या हम एक ओकेएमएल पुस्तकालय की कल्पना कर सकते हैं जो बहुरूपिक गणित संचालकों को प्रदान करने के लिए प्रकार वर्ग या सामान्यीकृत बीजीय डेटा प्रकार (GADT) का शोषण करेगा? रूपांतरण के बारे में: सभी ऑपरेशन संभव नहीं हैं, लेकिन कुछ हैं और टाइप किए जा सकते हैं।
coredump

2
@ डोभाल: "रे: बहुरूपिया गणित के संचालक, मुझे नहीं लगता कि हास्केल के प्रकार की कक्षाओं को लागू किए बिना कोई रास्ता है"। एफ # में प्रकार की कक्षाओं के बिना बहुरूपी गणित संचालक हैं।
जॉन हैरोप

7

यह देखते हुए कि यह पृष्ठ काफी पुराना है (2007): गोलियों के कौन से बिंदुओं को सूचीबद्ध किया गया है जो आज भी सत्य हैं?

  • सुरक्षा की झूठी भावना । यह बकवास है।

  • कुछ बुनियादी प्रकार । OCaml में अब बाइट्स और बाइट सरणियाँ हैं, लेकिन कोई बिल्ट-इन यूनिकोड स्ट्रिंग्स, 16-बिट पूर्णांक, अहस्ताक्षरित पूर्णांक, 32-बिट फ़्लोट्स, वैक्टर या मैट्रीस नहीं हैं। तृतीय-पक्ष पुस्तकालय इनमें से कुछ प्रदान करते हैं।

  • साइलेंट इंटेगर ओवरफ्लो । अपरिवर्तित लेकिन यह कभी कोई समस्या नहीं थी।

  • मॉड्यूल अपरिवर्तनीयता । उनकी सिफारिश है कि फ़ंक्शंस और मॉड्यूल को एक-दूसरे के साथ जोड़ा जाना चाहिए और लिस्प और वास्तव में एक बुरा विचार है। includeयदि आप चाहते हैं तो आप मॉड्यूल का उपयोग कर सकते हैं, लेकिन आप उन्हें म्यूट नहीं कर सकते, निश्चित रूप से।

  • बहुरूपता रन-टाइम प्रकार त्रुटियों का कारण बनता है । यह OCaml के साथ एक बड़ी समस्या है और इसे ठीक नहीं किया गया है। जब आपके प्रकार बहुरूपता की समानता को विकसित करते हैं, तो तुलना और हैशिंग तब विफल होने लगेंगे जब वे फ़ंक्शन जैसे प्रकारों का सामना करते हैं और समस्या को डीबग करना बहुत कठिन है। एफ # के पास इस समस्या का एक शानदार समाधान है।

  • कोई मैक्रों नहीं । विडंबना यह है कि जब उन्होंने लिखा था कि यह ओकेमेल वास्तव में मैक्रोज़ के लिए पूर्ण समर्थन था, लेकिन उन्होंने अब इस सुविधा को बाहर खींचने का फैसला किया है।

  • लपेटने वाला । यह एक वास्तविक समस्या थी और इसे ठीक नहीं किया गया है। अभी भी try ... finallyOCaml भाषा में कोई निर्माण नहीं है और कोई रैपर इसे stdlib में लागू नहीं करता है।

  • स्थान । अपरिवर्तित लेकिन एक गैर-समस्या।

  • रिकॉर्ड फ़ील्ड नामकरण नरक । मॉड्यूल का उपयोग करके अपने कोड को ठीक से संरचना करें।

  • सिंटेक्स । अपरिवर्तित लेकिन एक गैर-समस्या।

  • कोई बहुरूपता नहीं । यह ज्यादातर बकवास था जब उन्होंने इसे लिखा था और कुछ भी नहीं बदला है।

  • असंगत फ़ंक्शन सेट करता है । OCaml में अभी भी एक consफंक्शन नहीं है । कोई बात नहीं। मैं अपनी भाषा में लिस्प सामान नहीं चाहता, धन्यवाद।

  • कोई गतिशील चर नहीं । OCaml के बारे में एक अच्छी बात थी। अभी भी OCaml के बारे में अच्छी बात है।

  • वैकल्पिक ~ तर्क चूसना । वैकल्पिक तर्क रॉक। मैंने Microsoft को F # के लिए वैकल्पिक तर्क जोड़ने के लिए खराब किया।

  • आंशिक तर्क आवेदन असंगति । एह?

  • अंकगणित की पठनीयता । यह बदल गया है क्योंकि मैंने 8 साल पहले OCaml का उपयोग बंद कर दिया था। जाहिर है अब आप कर सकते हैं Int64.((q * n - s * s) / (n - 1L))

  • मूक नाम संघर्ष संकल्प । वह REPL में पूर्ण विकसित सॉफ्टवेयर विकास करने की कोशिश कर रहा था जैसा कि आप लिस्प में करेंगे। OCaml में ऐसा मत करो। केवल परीक्षण, डिस्पोजेबल कोड और इंटरैक्टिव तकनीकी कंप्यूटिंग चलाने के लिए REPL के लिए फ़ाइलों और बैच संकलन का उपयोग करें।

  • मूल्यांकन का आदेश । यह गलत था जब उन्होंने इसे लिखा था। OCaml में मूल्यांकन का क्रम अपरिभाषित है।

  • कोई वस्तु इनपुट / आउटपुट नहीं । उन्होंने एक तीसरे पक्ष के पुस्तकालय का हवाला दिया जिसने पहले ही इस "समस्या" को हल कर दिया था।

  • पहली त्रुटि के बाद कंपाइलर बंद हो जाता है । एह?

  • मूल रूप से संकलित निष्पादनयोग्य के लिए कोई स्टैक ट्रेस नहीं । फिक्स्ड।

  • डिबगर बेकार है । मैंने डिबगर का उपयोग कभी नहीं किया। स्टेटिक टाइप चेकिंग मेरे लगभग सभी बग्स को पकड़ लेती है।

  • जीसी चूसता है । मैंने पाया कि OCaml की GC एक बड़ी समस्या को छोड़कर शानदार है: वैश्विक लॉक समानांतर प्रोग्रामिंग को रोकता है।

  • कोई अंतर्निहित आगे की घोषणाएं नहीं । सभी विधायकों में डिजाइन द्वारा पारस्परिक पुनरावृत्ति स्पष्ट है। एकमात्र शर्त यह है कि typeपरिभाषाएँ डिफ़ॉल्ट रूप letसे पुनरावर्ती हैं, जबकि बाइंडिंग डिफ़ॉल्ट रूप से गैर-पुनरावर्ती हैं।

  • फंक्शन राउंड अनुपस्थित है । OCaml में अभी भी एक नंगे हड्डियाँ stdlib है लेकिन जेन सेंट के कोर जैसे तीसरे पक्ष के पुस्तकालय प्रदान करते हैं roundऔर मित्र हैं।

  • सूचियाँList.mapअभी भी पुनरावर्ती पूंछ नहीं है। मैंने पैच को इस तरह गंभीर कीड़े को ठीक करने के लिए प्रस्तुत किया और उन्हें रिलीज होने से पहले वर्षों इंतजार करना पड़ा। सूचियाँ अभी भी अपरिवर्तनीय हैं। और इसलिए उन्हें होना चाहिए

  • गति । मेरा मानना ​​है कि बड़े पॉलीमॉर्फिक वेरिएंट के लिए संकलन समय निर्धारित किया गया है।

  • पैटर्न मिलान । वास्तविकता पर आशा की विजय। लिस्प समुदाय ऐसा करने में विफल रहा है। इसलिए मेरा 10 वां नियम: किसी भी पर्याप्त रूप से जटिल लिस्प कार्यक्रम में ओकेएमएल के पैटर्न मैच कंपाइलर का आधा हिस्सा अनौपचारिक रूप से निर्दिष्ट और बग-राइड कार्यान्वयन है।

उदाहरण के लिए: क्या यह अभी भी सही है कि सामान्य वस्तु को प्रिंट करना असंभव है?

जब उन्होंने लिखा कि आप बस नहीं कर सकते:

print value

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


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

2
@ कॉर्डंप: "मैं वास्तव में इस बारे में थोड़ा और विस्तार देखना चाहूंगा, यदि संभव हो तो"। F # ने उपयोगकर्ता को कुछ ऑपरेटरों और कार्यों पर तदर्थ बहुरूपता परिभाषित किया है। तो आप +इनट्स, फ्लोट्स और कॉम्प्लेक्स का उपयोग कर सकते हैं , लेकिन आप अपने स्वयं के प्रकारों को भी परिभाषित कर सकते हैं और +अपने प्रकार पर काम करने के लिए एक अधिभार जोड़ सकते हैं। यह SML या OCaml के अनुमानित-अच्छे प्रदर्शन के साथ लिस्प या हास्केल की संक्षिप्तता और पठनीयता प्रदान करता है, जो कि कोई अन्य भाषा नहीं करती है।
जॉन हैरोप

@coredump: "OCaml सोर्स कोड और ऑप्टिमा दोनों एक ही पेपर को संदर्भित करते हैं"। उस कागज में वर्णित तकनीकों को पूरी तरह से एमएल प्रकार प्रणाली पर बनाया गया है। एक प्रकार की प्रणाली जो लिस्प के पास नहीं है। ऑप्टिमा उस कागज में वर्णित बहुत कुछ नहीं करता है और नहीं कर सकता है। बस धारा ४.२ "थकावट जानकारी का उपयोग करना" देखें। लिस्प में कोई थकावट की जानकारी नहीं है क्योंकि कोई प्रकार नहीं हैं। उदाहरण के लिए, OCaml नेस्टेड जंपर्स या पत्तियों की संख्या के आधार पर एक प्रेषण तालिका के बीच चयन करता है लेकिन यह जानकारी लिस्प में अज्ञात है।
जॉन हैरोप

लिस्प और OCaml को अलग-अलग चीजों (जैसे गतिशीलता, छवि-आधारित प्रोग्रामिंग) के लिए डिज़ाइन किया गया है। लेकिन लिस्प है एक प्रकार प्रणाली, Hindley-मिलनर से अलग, और कार्यान्वयन करते संकलन के दौरान यह शोषण करते हैं। कागज के 4.2 खंड से उदाहरण के साथ इस एसबीसीएल सत्र को देखें। थकावट पहले ही प्रकार के अनुमान और घोषणाओं से संकलक द्वारा जाँच की जाती है। ऑप्टिमा अन्य रणनीतियों के लिए संकलन-टाइम मैक्रोएक्सपेंशन (या SBCL VOPs) के लिए कार्यान्वयन-विशिष्ट कोड जोड़ सकता है, लेकिन ऐसा करने के लिए पर्याप्त प्रोत्साहन नहीं है।
coredump

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