OCaml

From alpha
Jump to navigation Jump to search

OCaml
OCaml Logo.svg
ParadigmMulti-paradigm: functional, imperative, modular,[1] object-oriented
परिवारML
द्वारा डिज़ाइन किया गयाXavier Leroy, Jérôme Vouillon, Damien Doligez, Didier Rémy, Ascánder Suárez
DeveloperInria
पहली प्रस्तुति1996; 28 years ago (1996)
Stable release
Script error: The module returned a nil value. It is supposed to return an export table. / Script error: The module returned a nil value. It is supposed to return an export table.; Error: first parameter cannot be parsed as a date or time. (Script error: The module returned a nil value. It is supposed to return an export table.)

ओकैमल (/ˈkæməl/ oh-KAM-əl, पूर्व में ऑब्जेक्टिव कैमल) एक सामान्य प्रयोजन प्रोग्रामिंग भाषा है | सामान्य-उद्देश्य, बहु-प्रतिमान प्रोग्रामिंग भाषा जो वस्तु उन्मुख कार्यकर्म | ऑब्जेक्ट-ओरिएंटेड सुविधाओं के साथ ML (प्रोग्रामिंग लैंग्वेज) की कैमल बोली का विस्तार करती है। OCaml को 1996 में जेवियर लेरॉय, जेरोम वॉइलन, डेमियन डोलिजेज़, डिडिएर रेमी, एस्केन्डर सुआरेज़ और अन्य लोगों द्वारा बनाया गया था।

OCaml toolchain में एक इंटरेक्टिव टॉप-लेवल इंटरप्रेटर (कंप्यूटिंग), एक बाईटकोड संकलक, एक ऑप्टिमाइज़िंग देसी कोड कंपाइलर, एक रिवर्सिबल डिबगर और एक पैकेज मैनेजर (OPAM) शामिल हैं। OCaml को शुरू में स्वचालित प्रमेय साबित करने के संदर्भ में विकसित किया गया था, और स्थैतिक कार्यक्रम विश्लेषण और औपचारिक तरीकों के सॉफ्टवेयर में इसकी उपस्थिति बहुत बड़ी है। इन क्षेत्रों से परे, इसे सिस्टम प्रोग्रामिंग, वेब विकास, और वित्तीय इंजीनियरिंग, अन्य एप्लिकेशन डोमेन में गंभीर उपयोग मिला है।

परिवर्णी शब्द CAML मूल रूप से श्रेणीबद्ध सार मशीन भाषा के लिए खड़ा था, लेकिन OCaml इस अमूर्त मशीन को छोड़ देता है।[2] OCaml एक मुफ़्त और ओपन-सोर्स सॉफ़्टवेयर प्रोजेक्ट है जिसका प्रबंधन और मुख्य रूप से कंप्यूटर विज्ञान और स्वचालन में अनुसंधान के लिए फ्रेंच संस्थान (इनरिया) द्वारा किया जाता है। 2000 के दशक की शुरुआत में, OCaml के तत्वों को कई भाषाओं द्वारा अपनाया गया, विशेष रूप से F Sharp (प्रोग्रामिंग भाषा)|F# और Scala (प्रोग्रामिंग भाषा)।

दर्शन

एमएल (प्रोग्रामिंग लैंग्वेज)-व्युत्पन्न भाषाएं अपने स्टैटिक प्रकार प्रणाली और टाइप इंफेरेंस | टाइप-इनफेरिंग कंपाइलर्स के लिए जानी जाती हैं। OCaml कार्यात्मक प्रोग्रामिंग, अनिवार्य प्रोग्रामिंग और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को एमएल-जैसी प्रकार की प्रणाली के तहत एकीकृत करता है। इस प्रकार, प्रोग्रामर को ओकैमल का उपयोग करने के लिए शुद्ध कार्यात्मक भाषा प्रतिमान से अत्यधिक परिचित होने की आवश्यकता नहीं है।

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

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

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

ज़ेवियर लेरॉय ने कहा है कि OCaml एक अच्छे C कंपाइलर के प्रदर्शन का कम से कम 50% प्रदान करता है,[3] यद्यपि प्रत्यक्ष तुलना असम्भव है। OCaml मानक पुस्तकालय में कुछ कार्य अन्य भाषाओं के मानक पुस्तकालयों में समकक्ष कार्यों की तुलना में तेज़ एल्गोरिदम के साथ कार्यान्वित किए जाते हैं। उदाहरण के लिए, सिद्धांत रूप में OCaml मानक पुस्तकालय में सेट यूनियन का कार्यान्वयन अनिवार्य भाषाओं (जैसे, C++, Java) के मानक पुस्तकालयों में समकक्ष फ़ंक्शन की तुलना में विषम रूप से तेज़ है क्योंकि OCaml कार्यान्वयन इनपुट के भागों का पुन: उपयोग करने के लिए सेट की अपरिवर्तनीयता का शोषण करता है। आउटपुट में सेट (लगातार डेटा संरचना देखें)।

इतिहास

एमएल का विकास

1970 और 1980 के दशक के बीच, रॉबिन मिलनर, एक ब्रिटिश कंप्यूटर वैज्ञानिक और ट्यूरिंग अवार्ड विजेता, ने कंप्यूटर विज्ञान की नींव के लिए एडिनबर्ग विश्वविद्यालय की प्रयोगशाला में काम किया।[4][5] मिलनर और अन्य स्वचालित प्रमेय साबित करने पर काम कर रहे थे, जो लिस्प (प्रोग्रामिंग भाषा) जैसी भाषाओं में ऐतिहासिक रूप से विकसित हुए थे। मिलनर बार-बार इस मुद्दे पर भागे कि प्रमेय सिद्ध करने वाले गैर-प्रमाणों को एक साथ रखकर एक प्रमाण (सत्य) का दावा करने का प्रयास करेंगे।[5]नतीजतन, वह अपने संगणनीय कार्यों के लिए तर्क के लिए एमएल (प्रोग्रामिंग लैंग्वेज) विकसित करने के लिए चला गया, एक ऐसी भाषा जो केवल लेखक को अपने बहुरूपी प्रकार प्रणाली के साथ वैध प्रमाण बनाने की अनुमति देगी।[6] विभिन्न मशीनों पर LCF के उपयोग को सरल बनाने के लिए ML को एक कंपाइलर में बदल दिया गया था, और 1980 के दशक तक, इसे स्वयं की एक पूर्ण प्रणाली में बदल दिया गया था।[6]ML अंततः OCaml के निर्माण के लिए एक आधार के रूप में काम करेगा।

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


पहला कार्यान्वयन

कैमल को शुरुआत में जेरार्ड हूएट की अध्यक्षता वाली आईएनआरआईए की फॉर्मल टीम द्वारा डिजाइन और विकसित किया गया था। कैमल का पहला कार्यान्वयन 1987 में बनाया गया था और 1992 तक इसे और विकसित किया गया था। हालांकि इसका नेतृत्व एस्केंडर सुआरेज़, पियरे वीस (कंप्यूटर वैज्ञानिक) और मिशेल मौनी (कंप्यूटर विज्ञान) ने किया था, जो 1988 में उनके जाने के बाद विकास के साथ आगे बढ़े।[7]

गाई कजिन्यू को यह याद करते हुए उद्धृत किया गया है कि प्रोग्रामिंग भाषा के कार्यान्वयन के साथ उनका अनुभव शुरू में बहुत सीमित था, और इसमें कई कमियां थीं जिसके लिए वह जिम्मेदार हैं। इसके बावजूद, उनका मानना ​​है कि एस्केंडर, पियरे और मिशेल ने काफी अच्छा काम किया है।[7]


कैमल लाइट

1990 और 1991 के बीच, जेवियर लेरॉय ने C (प्रोग्रामिंग लैंग्वेज) में लिखे एक बायटेकोड दुभाषिया के आधार पर Caml का एक नया कार्यान्वयन तैयार किया। इसके अलावा, डेमियन डोलिजेज़ ने इस कार्यान्वयन के लिए एक स्मृति प्रबंधन प्रणाली लिखी, जिसे अनुक्रमिक कचरा संग्रह (कंप्यूटर विज्ञान) r के रूप में भी जाना जाता है।[6]यह नया कार्यान्वयन, जिसे कैमल लाइट के रूप में जाना जाता है, ने पुराने कैमल कार्यान्वयन को बदल दिया और छोटी डेस्कटॉप मशीनों पर चला।[7]बाद के वर्षों में, मिशेल मौनी के सिंटैक्स हेरफेर उपकरण जैसे पुस्तकालय दिखाई दिए और शैक्षिक और अनुसंधान टीमों में कैमल के उपयोग को बढ़ावा देने में मदद की।[6]


कैमल स्पेशल लाइट

1995 में, जेवियर लेरॉय ने कैमल स्पेशल लाइट जारी किया, जो कैमल का एक उन्नत संस्करण था।[7]बाइटकोड कंपाइलर में एक अनुकूलतम नेटिव कोड|नेटिव-कोड कंपाइलर जोड़ा गया था, जिसने प्रदर्शन को मुख्यधारा की भाषाओं जैसे C++ के साथ तुलना करने योग्य स्तर तक बढ़ा दिया।[6][7]इसके अतिरिक्त, लेरॉय ने मानक एमएल के मॉड्यूल सिस्टम से प्रेरित एक उच्च-स्तरीय मॉड्यूल सिस्टम तैयार किया, जो अमूर्तता और पैरामीटरकरण के लिए शक्तिशाली सुविधाएं प्रदान करता है और बड़े पैमाने पर कार्यक्रमों का निर्माण आसान बनाता है।[6]


उद्देश्य कैमल

डिडिएर रेमी और जेरोम वॉइलन ने वस्तुओं और कक्षाओं के लिए एक अभिव्यंजक प्रकार की प्रणाली तैयार की, जिसे कैमल स्पेशल लाइट के भीतर एकीकृत किया गया था। इसके कारण ऑब्जेक्टिव कैमल लैंग्वेज का उदय हुआ, जिसे पहली बार 1996 में रिलीज़ किया गया और बाद में 2011 में इसका नाम बदलकर OCaml कर दिया गया। इस ऑब्जेक्ट सिस्टम ने विशेष रूप से कई प्रचलित ऑब्जेक्ट-ओरिएंटेड मुहावरों को स्टैटिकली टाइप-सेफ तरीके से सपोर्ट किया, जबकि उन्हीं मुहावरों के कारण अस्वस्थता या आवश्यकता हुई। C++ या Java (प्रोग्रामिंग लैंग्वेज) जैसी भाषाओं में रनटाइम चेक करता है। 2000 में, जैक्स गैरिग ने ऑब्जेक्टिव कैमल को कई नई सुविधाओं जैसे बहुरूपी तरीकों, वेरिएंट और लेबल और वैकल्पिक तर्कों के साथ विस्तारित किया।[6][7]


चल रहा विकास

OCaml में बढ़ते वाणिज्यिक और शैक्षणिक कोडबेस का समर्थन करने के लिए पिछले दो दशकों में भाषा सुधारों में वृद्धि की गई है।[6]2012 में OCaml 4.0 रिलीज़ ने भाषा के लचीलेपन को बढ़ाने के लिए सामान्यीकृत बीजगणितीय डेटा प्रकार (GADTs) और प्रथम श्रेणी के मॉड्यूल जोड़े।[6]OCaml 5.0.0 का शून्य अल्फा रिलीज़ 14 जून 2022 को जारी किया गया था।[8] OCaml का विकास 2005 तक INRIA में क्रिस्टल टीम के भीतर जारी रहा, जब गैलियम टीम द्वारा इसका स्थान लिया गया।[9] इसके बाद, 2019 में कैम्बियम टीम द्वारा गैलियम का स्थान लिया गया।[10][11]


विशेषताएं

OCaml में सिमेंटिक एनालिसिस (कंप्यूटर साइंस) टाइप सिस्टम, टाइप इंट्रेंस, पैरामीट्रिक बहुरूपता, पूंछ पुनरावर्तन, पैटर्न मिलान, फर्स्ट क्लास लेक्सिकल क्लोजर (कंप्यूटर साइंस), फंक्शन ऑब्जेक्ट # अन्य अर्थ | फंक्शनलर्स (पैरामीट्रिक मॉड्यूल), एक्सेप्शन हेंडलिंग और इंक्रीमेंटल हैं। पीढ़ीगत कचरा संग्रह (कंप्यूटर विज्ञान)।

OCaml एक सामान्य-उद्देश्य वाली भाषा में ऑब्जेक्ट सिस्टम के लिए ML-शैली प्रकार के अनुमान का विस्तार करने के लिए उल्लेखनीय है। यह संरचनात्मक उपप्रकार की अनुमति देता है, जहां ऑब्जेक्ट प्रकार संगत होते हैं यदि उनके विधि हस्ताक्षर संगत होते हैं, उनकी घोषित विरासत (सांख्यिकीय रूप से टाइप की गई भाषाओं में एक असामान्य विशेषता) के बावजूद।

लिंकर (कंप्यूटिंग) से सी (प्रोग्रामिंग लैंग्वेज) आदिम के लिए एक विदेशी फ़ंक्शन इंटरफ़ेस प्रदान किया गया है, जिसमें सी और फोरट्रान दोनों के साथ संगत स्वरूपों में कुशल संख्यात्मक सरणी डेटा संरचना के लिए भाषा समर्थन शामिल है। OCaml OCaml फ़ंक्शंस की लाइब्रेरी बनाने का भी समर्थन करता है जिसे C में एक मुख्य प्रोग्राम से जोड़ा जा सकता है, ताकि OCaml लाइब्रेरी को C प्रोग्रामर्स को वितरित किया जा सके जिन्हें OCaml का ज्ञान या इंस्टॉलेशन नहीं है।

OCaml वितरण में शामिल हैं:

  • शाब्दिक विश्लेषण और पदच्छेद टूल जिसे ocamllex और ocamlyacc कहा जाता है
  • डीबगर जो त्रुटियों की जांच करने के लिए पीछे की ओर कदम बढ़ाने का समर्थन करता है
  • दस्तावेज़ जनरेटर
  • Profiler (कंप्यूटर विज्ञान) - प्रदर्शन को मापने के लिए
  • कई सामान्य प्रयोजन पुस्तकालय (कंप्यूटिंग)

नेटिव कोड कंपाइलर यूनिक्स, माइक्रोसॉफ्ट विंडोज और एप्पल इंक. मैकओएस सहित कई प्लेटफॉर्म के लिए उपलब्ध है। पोर्टेबिलिटी प्रमुख आर्किटेक्चर के लिए देशी कोड जनरेशन (संकलक) समर्थन के माध्यम से प्राप्त की जाती है: IA-32, X86-64 (AMD64), पावर ISA, RISC-V, ARM आर्किटेक्चर और ARM64[12] ओकैमल बायटेकोड और देशी कोड प्रोग्राम को थ्रेड (कंप्यूटर साइंस) शैली में लिखा जा सकता है, प्रीमेप्टिव संदर्भ स्विचिंग के साथ। OCaml रनटाइम सिस्टम का कचरा संग्राहक (जो भाषा का एकमात्र वर्तमान में उपलब्ध पूर्ण कार्यान्वयन है) को समवर्ती के लिए डिज़ाइन नहीं किया गया है, और सममित बहु प्रसंस्करण असमर्थित है।[13] एक ही प्रक्रिया में OCaml थ्रेड्स केवल समय साझा करके निष्पादित होते हैं। हालाँकि वितरित कंप्यूटिंग के लिए कई पुस्तकालय हैं जैसे Functory और ocamlnet/Plasma। OCaml 5.0 रिलीज़ (वर्तमान में मई 2022 तक विकास में) प्रभाव प्रणाली और मल्टीकोर समानांतरवाद के माध्यम से समवर्ती का समर्थन करने वाली पहली होगी।[14]


विकास पर्यावरण

2011 से, OCaml विकास परिवेश में कई नए टूल और लाइब्रेरी का योगदान दिया गया है:

  • विकास उपकरण
    • opam OCaml के लिए पैकेज मैनेजर है।
    • Merlin कई संपादकों के लिए आईडीई जैसी कार्यक्षमता प्रदान करता है, जिसमें थ्रोबैक, गो-टू-डेफिनिशन और ऑटो-पूर्णता शामिल है।
    • Dune OCaml के लिए एक कंपोजेबल बिल्ड-सिस्टम है।
    • OCamlformat OCaml के लिए एक ऑटो-फॉर्मेटर है।
    • ocaml-lsp-server OCaml एकीकृत विकास पर्यावरण एकीकरण के लिए एक भाषा सर्वर प्रोटोकॉल है।
  • वेब साइट्स:
    • OCaml.org भाषा के लिए प्राथमिक साइट है।
    • चर्चा.ocaml.org डिस्कोर्स (सॉफ़्टवेयर) का एक उदाहरण है जो OCaml के लिए प्राथमिक चर्चा स्थल के रूप में कार्य करता है।
  • OCaml के लिए वैकल्पिक संकलक:
    • js_of_ocaml, Occigen टीम द्वारा विकसित, OCaml से JavaScript के लिए एक अनुकूलन संकलक है।
    • BuckleScript, जो पठनीय, मुहावरेदार जावास्क्रिप्ट आउटपुट बनाने पर ध्यान देने के साथ जावास्क्रिप्ट को भी लक्षित करता है।
    • ocamlcc, OCaml से C तक का एक कंपाइलर है, जो असमर्थित प्लेटफॉर्म के लिए नेटिव कोड कंपाइलर का पूरक है।
    • OCamlJava, INRIA द्वारा विकसित, OCaml से जावा वर्चुअल मशीन (JVM) का एक संकलक है।
    • OCaPic, Lip6 द्वारा विकसित, तस्वीर माइक्रोकंट्रोलर के लिए OCaml कंपाइलर है।

कोड उदाहरण

OCaml कोड के स्निपेट्स को शीर्ष-स्तरीय रीड-इवल-प्रिंट लूप में दर्ज करके सबसे आसानी से अध्ययन किया जाता है। यह एक इंटरैक्टिव OCaml सत्र है जो अनुमानित प्रकार के परिणामी या परिभाषित भावों को प्रिंट करता है।[15] OCaml शीर्ष-स्तर केवल OCaml प्रोग्राम को क्रियान्वित करके शुरू किया गया है:

<वाक्यविन्यास लैंग = कंसोल> $ ओकैमल

    उद्देश्य कैमल संस्करण 3.09.0

</वाक्यविन्यास हाइलाइट> कोड तब # प्रांप्ट पर दर्ज किया जा सकता है। उदाहरण के लिए, 1+2*3 की गणना करने के लिए: <वाक्यविन्यास लैंग = कंसोल>

  1. 1 + 2 * 3 ;;

- : इंट = 7 </वाक्यविन्यास हाइलाइट>

OCaml अभिव्यक्ति के प्रकार को int (एक शब्द (कंप्यूटर आर्किटेक्चर) | मशीन-परिशुद्धता पूर्णांक (कंप्यूटर विज्ञान)) होने का अनुमान लगाता है और परिणाम 7 देता है।

हैलो वर्ल्ड

निम्नलिखित कार्यक्रम hello.ml :

<वाक्यविन्यास प्रकाश लैंग = OCaml> print_endline हैलो वर्ल्ड! </वाक्यविन्यास हाइलाइट>

एक बायटेकोड निष्पादन योग्य में संकलित किया जा सकता है:

$ ocamlc hello.ml -o hello

या एक अनुकूलित मूल-कोड निष्पादन योग्य में संकलित:

$ ocamlopt hello.ml -o hello

और निष्पादित:

<वाक्यविन्यास लैंग = कंसोल> $ ./नमस्ते हैलो वर्ल्ड! $ </वाक्यविन्यास हाइलाइट>

Ocamlc का पहला तर्क, hello.ml, संकलित करने के लिए स्रोत फ़ाइल को निर्दिष्ट करता है और -o hello फ़्लैग आउटपुट फ़ाइल को निर्दिष्ट करता है।[16]


विकल्प

OCaml में विकल्प प्रकार कंस्ट्रक्टर, हास्केल में शायद मोनाड के समान, दिए गए डेटा प्रकार को या तो दिए गए डेटा प्रकार के कुछ मान वापस करने के लिए, या कोई भी वापस करने के लिए नहीं देता है।[17] इसका उपयोग यह व्यक्त करने के लिए किया जाता है कि कोई मान मौजूद हो भी सकता है और नहीं भी।

#  42;;
- :  िकल =  42
#   नहीं;;
- : 'एक िकल =  नहीं

यह एक ऐसे फ़ंक्शन का उदाहरण है जो या तो एक विकल्प से एक इंट निकालता है, यदि कोई अंदर है, और इसे एक स्ट्रिंग में परिवर्तित करता है, या यदि नहीं, तो एक खाली स्ट्रिंग लौटाता है:

चल  = िें
     ि करें
  |  i -> string_of_int i
  |  नहीं -> ;;

<syntaxhighlight lang= ocaml >

  1. अर्क (कुछ 42);;

- : स्ट्रिंग = 42

  1. निकालें कोई नहीं ;;

- : स्ट्रिंग = </वाक्यविन्यास हाइलाइट>

पूर्णांकों की सूची का योग

सूचियाँ OCaml में मूलभूत डेटा प्रकारों में से एक हैं। निम्न कोड उदाहरण एक रिकर्सन (कंप्यूटर साइंस) फ़ंक्शन योग को परिभाषित करता है जो एक तर्क, पूर्णांक को स्वीकार करता है, जिसे पूर्णांकों की सूची माना जाता है। कीवर्ड नोट करें rec जो दर्शाता है कि फ़ंक्शन रिकर्सिव है। फ़ंक्शन पुनरावर्ती रूप से पूर्णांकों की दी गई सूची पर पुनरावृति करता है और तत्वों का योग प्रदान करता है। मैच स्टेटमेंट में C (प्रोग्रामिंग लैंग्वेज) के स्विच स्टेटमेंट एलिमेंट की समानता है, हालांकि यह कहीं अधिक सामान्य है।

<वाक्यविन्यास प्रकाश लैंग = ओकैमल> let rec योग पूर्णांक = (* कीवर्ड rec का अर्थ है 'पुनरावर्ती'। *)

 के साथ पूर्णांकों का मिलान करें
 | [] -> 0 (* यील्ड 0 अगर पूर्णांक खाली है
                                           सूची []। *)
 | पहला :: आराम -> पहला + आराम का योग ;; (* पुनरावर्ती कॉल यदि पूर्णांक गैर-
                                           खाली सूची; पहला पहला है
                                           सूची का तत्व, और बाकी एक है
                                           बाकी तत्वों की सूची,
                                           संभवतः []। *)

</वाक्यविन्यास हाइलाइट> <वाक्यविन्यास प्रकाश लैंग = OCaml>

 # राशि [1;2;3;4;5];;
 - : इंट = 15

</वाक्यविन्यास हाइलाइट>

दूसरा तरीका मानक तह समारोह का उपयोग करना है जो सूचियों के साथ काम करता है।

<वाक्यविन्यास प्रकाश लैंग = ओकैमल> माना पूर्णांकों का योग =

 List.fold_left (मजेदार संचायक x -> संचायक + x) 0 पूर्णांक ;;

</वाक्यविन्यास हाइलाइट> <वाक्यविन्यास प्रकाश लैंग = OCaml>

 # राशि [1;2;3;4;5];;
 - : इंट = 15

</वाक्यविन्यास हाइलाइट>

चूंकि अनाम फ़ंक्शन केवल + ऑपरेटर का अनुप्रयोग है, इसे छोटा किया जा सकता है:

<वाक्यविन्यास प्रकाश लैंग = ओकैमल> माना पूर्णांकों का योग =

 List.fold_left (+) 0 पूर्णांक

</वाक्यविन्यास हाइलाइट>

इसके अलावा, कोई आंशिक अनुप्रयोग का उपयोग करके सूची तर्क को छोड़ सकता है:

<वाक्यविन्यास प्रकाश लैंग = OCaml> चलो योग =

 लिस्ट.फोल्ड_लेफ्ट (+) 0

</वाक्यविन्यास हाइलाइट>

जल्दी से सुलझाएं

OCaml संक्षिप्त रूप से पुनरावर्ती एल्गोरिदम को व्यक्त करने के लिए उधार देता है। निम्न कोड उदाहरण क्विकॉर्ट के समान एक एल्गोरिथ्म को लागू करता है जो एक सूची को बढ़ते क्रम में क्रमबद्ध करता है।

<वाक्यविन्यास प्रकाश लैंग = OCaml>

चलो रिक qsort = function
  | [] -> []
  | धुरी :: आराम ->
    आइए is_less x = x <पिवट इन करें
    बाएँ, दाएँ = सूची। विभाजन is_less आराम में
    qsort बाएँ @ [धुरी] @ qsort दाएँ

</वाक्यविन्यास हाइलाइट>

या >= ऑपरेटर के आंशिक अनुप्रयोग का उपयोग करना।

<वाक्यविन्यास प्रकाश लैंग = OCaml>

चलो रिक qsort = function
  | [] -> []
  | धुरी :: आराम ->
    आइए is_less = (>=) पिवट इन करें
    बाएँ, दाएँ = सूची। विभाजन is_less आराम में
    qsort बाएँ @ [धुरी] @ qsort दाएँ

</वाक्यविन्यास हाइलाइट>

जन्मदिन की समस्या

निम्नलिखित कार्यक्रम एक कमरे में लोगों की सबसे छोटी संख्या की गणना करता है जिनके लिए पूरी तरह से अद्वितीय जन्मदिन की संभावना 50% से कम है (जन्मदिन की समस्या, जहां 1 व्यक्ति के लिए संभावना 365/365 (या 100%) है, 2 के लिए यह है 364/365, 3 के लिए यह 364/365 × 363/365, आदि है) (उत्तर = 23)।

<वाक्यविन्यास प्रकाश लैंग = OCaml> चलो वर्ष_साइज = 365।

चलो जन्मदिन_विरोधाभास लोगों की जांच करें =

 चलो प्रोब = (वर्ष_साइज - लोगों को तैरते हैं) /। वर्ष_आकार *। में जांच
 अगर समस्या <0.5 तब
   Printf.printf उत्तर = %d\n (लोग+1)
 वरना
   जन्मदिन_विरोधाभास समस्या (लोग+1)

जन्मदिन_विरोधाभास 1.0 1 </वाक्यविन्यास हाइलाइट>

चर्च अंक

निम्नलिखित कोड उत्तराधिकारी (सक्सेस) और जोड़ (जोड़ें) के साथ प्राकृतिक संख्याओं के एक चर्च एन्कोडिंग को परिभाषित करता है। एक चर्च अंक n एक उच्च-क्रम का कार्य है जो एक कार्य को स्वीकार करता है f और एक मूल्य x और लागू होता है f प्रति x बिल्कुल n बार। एक चर्च अंक को कार्यात्मक मान से एक स्ट्रिंग में बदलने के लिए, हम इसे एक फ़ंक्शन पास करते हैं जो स्ट्रिंग को प्रीपेन्ड करता है "S" इसके इनपुट और निरंतर स्ट्रिंग के लिए "0".

<वाक्यविन्यास प्रकाश लैंग = OCaml> मान लीजिए शून्य f x = x है माना n f x = f (n f x) चलो एक = सफल शून्य माना दो = सफलता (सफल शून्य) मान लीजिए n1 n2 f x = n1 f (n2 f x) चलो to_string n = n (fun k -> S ^ k) 0 चलो _ = to_string (जोड़ें (सक्सेस दो) दो) </वाक्यविन्यास हाइलाइट>

मनमाना-सटीक तथ्यात्मक कार्य (पुस्तकालय)

OCaml से विभिन्न प्रकार के पुस्तकालयों तक सीधे पहुँचा जा सकता है। उदाहरण के लिए, OCaml में मनमाना-परिशुद्धता अंकगणित के लिए एक अंतर्निहित पुस्तकालय है। जैसा कि फैक्टोरियल फ़ंक्शन बहुत तेज़ी से बढ़ता है, यह मशीन-सटीक संख्याओं (आमतौर पर 32- या 64-बिट्स) को ओवरफ्लो करता है। इस प्रकार, फैक्टोरियल मनमाना-सटीक अंकगणित के लिए एक उपयुक्त उम्मीदवार है।

OCaml में, Num मॉड्यूल (अब ZArith मॉड्यूल द्वारा अधिगृहीत) मनमाने ढंग से सटीक अंकगणितीय प्रदान करता है और इसका उपयोग करके एक रनिंग टॉप-लेवल में लोड किया जा सकता है: <syntaxhighlight lang=ocaml>

    1. टॉपफाइंड का उपयोग करें;;
    2. आवश्यक संख्या ;;
  1. खुला संख्या ;;

</वाक्यविन्यास हाइलाइट>

फिर फैक्टोरियल फ़ंक्शन को मनमाना-सटीक संख्यात्मक ऑपरेटरों का उपयोग करके लिखा जा सकता है =/, */ तथा -/ :

<वाक्यविन्यास प्रकाश लैंग = OCaml>

  1. मान लीजिए तथ्य n =
   अगर n =/Int 0 तो Int 1 और n */ fact(n -/ Int 1);;

वैल तथ्य: संख्या। संख्या -> संख्या। संख्या = <मजेदार> </वाक्यविन्यास हाइलाइट>

यह फ़ंक्शन बहुत बड़े फैक्टोरियल की गणना कर सकता है, जैसे कि 120!:

<वाक्यविन्यास प्रकाश लैंग = OCaml>

  1. string_of_num (तथ्य (इंट 120));;

- : स्ट्रिंग =

6689502913449127057588118054090372586752746333138029810295671352301633

55724496298936687416527198498130815763789321409055253440858940812185989 848111438965000596496052125696000000000000000000000000000 </वाक्यविन्यास हाइलाइट>

त्रिकोण (ग्राफिक्स)

निम्न प्रोग्राम ओपनजीएल का उपयोग करके 2डी में घूर्णन त्रिकोण प्रस्तुत करता है:

<वाक्यविन्यास प्रकाश लैंग = OCaml> चलो () =

 उपेक्षा (Glut.init Sys.argv);
 Glut.initDisplayMode ~double_buffer:true ();
 अनदेखा करें (Glut.createWindow ~शीर्षक: OpenGL डेमो);
 माना कोण t = 10. *. टी *। टी में
 चलो रेंडर () =
   GlClear.clear [`रंग];
   GlMat.load_identity ();
   GlMat.रोटेट ~कोण: (कोण (Sys.time ())) ~z:1. ();
   GlDraw.शुरू `त्रिकोण;
   List.iter GlDraw.vertex2 [-1., -1.; 0., 1.; 11।];
   GlDraw.ends ();
   ग्लूट.स्वैपबफ़र्स () में
 GlMat.mode `मॉडलव्यू;
 ग्लूट.डिस्प्लेफंक ~ सीबी: रेंडर;
 Glut.idleFunc ~cb:(कुछ Glut.postRedisplay);
 ग्लूट मेनलूप ()

</वाक्यविन्यास हाइलाइट>

OpenGL के लिए LablGL बाइंडिंग आवश्यक है। कार्यक्रम को इसके साथ बाइटकोड में संकलित किया जा सकता है:

  $ ocamlc -I +lablGL Lablglut.cma Lablgl.cma simple.ml -o सरल

या देशी कोड के साथ:

  $ ocamlopt -I +lablGL Lablglut.cmxa Lablgl.cmxa simple.ml -o सरल

या, अधिक सरलता से, ocamlfind बिल्ड कमांड का उपयोग करके

  $ ocamlfind ऑप्ट simple.ml -package lablgl.glut -linkpkg -o simple

और भाग खड़ा हुआ:

  $ ./सरल

OCaml में कहीं अधिक परिष्कृत, उच्च-प्रदर्शन 2D और 3D ग्राफ़िकल प्रोग्राम विकसित किए जा सकते हैं। OpenGL और OCaml के उपयोग के लिए धन्यवाद, परिणामी प्रोग्राम क्रॉस-प्लेटफ़ॉर्म हो सकते हैं, कई प्रमुख प्लेटफार्मों पर बिना किसी बदलाव के संकलन कर सकते हैं।

फाइबोनैचि अनुक्रम

निम्नलिखित कोड इनपुट किए गए नंबर एन की फाइबोनैचि संख्या की गणना करता है। यह पूंछ पुनरावर्तन और पैटर्न मिलान का उपयोग करता है। <सिंटैक्सहाइलाइट लैंग = OCaml> चलो तंतु n =

 मान लीजिए fib_aux m a b =
   एम से मिलान करें
   | 0 -> ए
   | _ -> fib_aux (एम - 1) बी (ए + बी)
 fib_aux n 0 1 में

</वाक्यविन्यास हाइलाइट>

उच्च-क्रम के कार्य

कार्य इनपुट के रूप में कार्य कर सकते हैं और परिणाम के रूप में कार्य वापस कर सकते हैं। उदाहरण के लिए, किसी फ़ंक्शन f पर दो बार आवेदन करने से एक ऐसा फ़ंक्शन प्राप्त होता है जो f को उसके तर्क पर दो बार लागू करता है। <सिंटैक्सहाइलाइट लैंग = OCaml> दो बार दें (f : 'a -> 'a) = fun (x : 'a) -> f (f x);; चलो inc (x : int) : int = x + 1;; चलो add2 = दो बार inc;; चलो inc_str (x: string): string = x ^ ^ x;; चलो add_str = दो बार (inc_str);; </वाक्यविन्यास हाइलाइट> <वाक्यविन्यास प्रकाश लैंग = ओकैमल हाइलाइट = 1,3>

 # एड2 98;;
 - : इंट = 100
 # add_str टेस्ट ;;
 - : स्ट्रिंग = टेस्ट टेस्ट टेस्ट टेस्ट टेस्ट

</वाक्यविन्यास हाइलाइट> फ़ंक्शन दो बार एक प्रकार चर 'a' का उपयोग करता है यह इंगित करने के लिए कि इसे किसी भी फ़ंक्शन f मैपिंग पर एक प्रकार 'a' से ही लागू किया जा सकता है, बजाय केवल int->int फ़ंक्शंस के। विशेष रूप से, दो बार खुद पर भी लगाया जा सकता है। <वाक्यविन्यास प्रकाश लैंग = ओकैमल हाइलाइट = 1,3,5>

 # माना चौगुना f = (दो बार दो बार) f;;
 वैल फोरटाइम: ('a -> 'a) -> 'a -> 'a = <fun>
 # चलो add4 = चौगुना inc ;;
 वैल ऐड 4: इंट -> इंट = <फन>
 # add4 98;;
 - : इंट = 102

</वाक्यविन्यास हाइलाइट>

व्युत्पन्न भाषाएँ

मेटाओकैमल

मेटाओकैमल[18] रनटाइम के दौरान नए मशीन कोड के वृद्धिशील संकलन को सक्षम करने के लिए OCaml का एक बहु-स्तरीय प्रोग्रामिंग एक्सटेंशन है। कुछ परिस्थितियों में, मल्टी-स्टेज प्रोग्रामिंग का उपयोग करके महत्वपूर्ण स्पीडअप संभव है, क्योंकि प्रक्रिया के लिए डेटा के बारे में अधिक विस्तृत जानकारी नियमित संकलन समय की तुलना में रनटाइम पर उपलब्ध होती है, इसलिए इंक्रीमेंटल कंपाइलर कंडीशन चेकिंग आदि के कई मामलों को अनुकूलित कर सकता है।

एक उदाहरण के रूप में: यदि संकलन समय पर यह ज्ञात है कि कुछ घातांक x -> x^n अक्सर जरूरत होती है, लेकिन का मूल्य n केवल रनटाइम पर जाना जाता है, मेटाओकैमल में दो-चरण पावर फ़ंक्शन का उपयोग किया जा सकता है:

<वाक्यविन्यास प्रकाश लैंग = OCaml>

चलो आरईसी शक्ति एन एक्स =
  अगर एन = 0
  फिर। <1>।
  वरना
    अगर एन भी
    तब sqr (शक्ति (n/2) x)
    वरना.<.~x *. .~(शक्ति (एन - 1) एक्स)>।

</वाक्यविन्यास हाइलाइट>

जैसे ही n रनटाइम पर जाना जाता है, एक विशेष और बहुत तेज़ पावर फ़ंक्शन बनाया जा सकता है:

<वाक्यविन्यास प्रकाश लैंग = OCaml>

.<fun x -> .~(पॉवर 5 .<x>.)>.

</वाक्यविन्यास हाइलाइट>

परिणाम है:

<वाक्यविन्यास प्रकाश लैंग = OCaml>

मज़ा x_1 -> (x_1 *
    चलो y_3 =
        चलो y_2 = (x_1 * 1)
        में (y_2 * y_2)
    में (y_3 * y_3))

</वाक्यविन्यास हाइलाइट>

नया फ़ंक्शन स्वचालित रूप से संकलित हो जाता है।

अन्य व्युत्पन्न भाषाएं

  • AtomCaml कोड के परमाणु (लेन-देन) निष्पादन के लिए एक तुल्यकालन आदिम प्रदान करता है।
  • एमिली (2006) OCaml 3.08 का एक उपसमुच्चय है जो वस्तु-क्षमता मॉडल क्षमता-आधारित सुरक्षा सिद्धांतों को लागू करने के लिए डिजाइन नियम सत्यापनकर्ता का उपयोग करता है।
  • F Sharp (प्रोग्रामिंग भाषा)|F# OCaml पर आधारित एक .NET Framework भाषा है।
  • ताजा OCaml नामों और बाइंडरों में हेरफेर करने की सुविधा देता है।
  • GCaml OCaml में विस्तारित बहुरूपता जोड़ता है, इस प्रकार ओवरलोडिंग और टाइप-सुरक्षित मार्शलिंग की अनुमति देता है।
  • JoCaml समवर्ती और वितरित कार्यक्रमों के विकास के लिए निर्माण को एकीकृत करता है।
  • OCamlDuce OCaml को XML एक्सप्रेशन और रेगुलर-एक्सप्रेशन प्रकार जैसी सुविधाओं के साथ विस्तारित करता है।
  • OCamlP3l OCaml और P3L भाषा पर आधारित समानांतर प्रोग्रामिंग सिस्टम है।
  • रीज़न (प्रोग्रामिंग लैंग्वेज) एक वैकल्पिक OCaml सिंटैक्स (प्रोग्रामिंग भाषाएं) है और OCaml के लिए फेसबुक पर बनाया गया टूलचेन है, जो देशी कोड और जावास्क्रिप्ट दोनों को संकलित कर सकता है।
  • रीस्क्रिप्ट (प्रोग्रामिंग लैंग्वेज) रीज़न/बकलस्क्रिप्ट टूलचैन से एक रीब्रांडिंग और नई भाषा है, जिसमें अलग सिंटैक्स है और केवल जावास्क्रिप्ट के लिए संकलित है।

== OCaml == में लिखा गया सॉफ्टवेयर

  • शून्य स्थापना, एक मल्टी-प्लेटफॉर्म पैकेज मैनेजर।
  • Coccinelle (सॉफ्टवेयर), C (प्रोग्रामिंग लैंग्वेज) प्रोग्राम के सोर्स कोड को बदलने के लिए उपयोगिता।
  • Coq, एक औपचारिक प्रूफ प्रबंधन प्रणाली।
  • एफएफटीडब्ल्यू, असतत फूरियर रूपांतरणों की गणना के लिए एक पुस्तकालय (कंप्यूटिंग)। नाम के OCaml प्रोग्राम द्वारा कई C रूटीन तैयार किए गए हैं genfft.
  • फेसबुक संदेशवाहक का वेब संस्करण।[19]
  • फ़्लो, फ़ेसबुक पर बनाया गया एक स्थिर प्रोग्राम विश्लेषण जो जावास्क्रिप्ट के लिए टाइप सिस्टम # स्टेटिक टाइप चेकिंग का अनुमान लगाता है और जाँच करता है।[20]
  • उल्लू वैज्ञानिक कंप्यूटिंग, वैज्ञानिक और इंजीनियरिंग कंप्यूटिंग के लिए एक समर्पित प्रणाली।
  • Frama-C, C प्रोग्राम के विश्लेषण के लिए एक रूपरेखा।
  • जीनवेब, फ्री और ओपन-सोर्स मल्टी-प्लेटफॉर्म वंशावली सॉफ्टवेयर।
  • हैक (प्रोग्रामिंग भाषा) प्रोग्रामिंग लैंग्वेज कंपाइलर, फेसबुक पर बनाया गया, स्थिर प्रकारों के साथ PHP का विस्तार।
  • हैक्स प्रोग्रामिंग लैंग्वेज कंपाइलर।
  • एचओएल लाइट, एक औपचारिक प्रमाण सहायक।
  • Infer, जावा (प्रोग्रामिंग लैंग्वेज), C, C++, और Objective-C के लिए फेसबुक पर बनाया गया एक स्टैटिक एनालाइजर है, जिसका उपयोग iOS और Android (ऑपरेटिंग सिस्टम) ऐप्स में बग का पता लगाने के लिए किया जाता है।[21]
  • Lexifi Apropos, कॉम्प्लेक्स डेरिवेटिव मॉडलिंग के लिए एक सिस्टम।
  • MirageOS, शुद्ध OCaml में लिखा गया एक unikernel प्रोग्रामिंग फ्रेमवर्क।
  • MLdonkey, EDonkey नेटवर्क पर आधारित एक पीयर-टू-पीयर फ़ाइल शेयरिंग एप्लिकेशन।
  • ओसीजेन, एक ओकैमल वेब ढांचा
  • Opa (प्रोग्रामिंग भाषा), वेब विकास के लिए एक स्वतंत्र और ओपन-सोर्स प्रोग्रामिंग भाषा।
  • पाइरे-चेक, फेसबुक पर बनाया गया पायथन (प्रोग्रामिंग भाषा) के लिए एक प्रकार का चेकर।[22]
  • Semgrep, एक बग-खोज उपकरण जो कई प्रोग्रामिंग भाषाओं का समर्थन करता है।
  • Tezos, एक देशी मुद्रा के रूप में XTZ का उपयोग करते हुए एक स्व-संशोधित स्मार्ट अनुबंध मंच।
  • Unison, दो निर्देशिकाओं के बीच फ़ाइलों को सिंक्रनाइज़ करने के लिए एक फ़ाइल तुल्यकालन कार्यक्रम।
  • WebAssembly के लिए संदर्भ दुभाषिया, वेब ब्राउज़र के अंदर निष्पादन के लिए एक निम्न-स्तरीय बायटेकोड।[23]
  • एक्सईएन क्लाउड प्लेटफॉर्म (एक्ससीपी), एक्सईएन हाइपरविजर के लिए टर्नकी वर्चुअलाइजेशन समाधान।

उपयोगकर्ता

कई दर्जन कंपनियाँ कुछ हद तक OCaml का उपयोग करती हैं।[24] उल्लेखनीय उदाहरणों में शामिल हैं:

  • ब्लूमबर्ग एल.पी., जिसने BuckleScript बनाया, एक OCaml कंपाइलर बैकएंड जावास्क्रिप्ट को लक्षित करता है।[25]
  • Citrix Systems, जो Citrix Systems # नेटवर्किंग और क्लाउड में OCaml का उपयोग करता है (2018 के दौरान Citrix Hypervisor के रूप में पुनः ब्रांडेड)।
  • Facebook, जिसने OCaml में Flow, Hack, Infer, Pfff, और Reason को विकसित किया।
  • जेन स्ट्रीट कैपिटल, एक मालिकाना ट्रेडिंग फर्म, जिसने अपने शुरुआती दिनों में OCaml को अपनी पसंदीदा भाषा के रूप में अपनाया।[26]


संदर्भ

  1. "Modules". Retrieved 22 February 2020.
  2. "ओकैमल का इतिहास". Retrieved 24 December 2016.
  3. Linux Weekly News.
  4. "ए जे मिलनर - ए.एम. ट्यूरिंग पुरस्कार विजेता". amturing.acm.org. Retrieved 6 October 2022.
  5. 5.0 5.1 al., Michael Clarkson et. "1.2। OCaml · OCaml में कार्यात्मक प्रोग्रामिंग". courses.cs.cornell.edu. Retrieved 6 October 2022.
  6. 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 "प्रस्तावना - रियल वर्ल्ड OCaml". dev.realworldocaml.org. Retrieved 6 October 2022.
  7. 7.0 7.1 7.2 7.3 7.4 7.5 7.6 "ओकैमल का इतिहास - ओकैमल". v2.ocaml.org. Retrieved 7 October 2022.
  8. "ocaml-बेस-कंपाइलर 5.0.0~alpha0 · OCaml पैकेज". OCaml. Retrieved 7 October 2022.
  9. "क्रिस्टल परियोजना". cristal.inria.fr. Retrieved 7 October 2022.
  10. "गैलियम टीम - होम". gallium.inria.fr. Retrieved 7 October 2022.
  11. "घर". cambium.inria.fr. Retrieved 7 October 2022.
  12. "ट्रंक पर ocaml/asmcomp · ocaml/ocaml · GitHub". GitHub. Retrieved 2 May 2015.
  13. "कैमल मेलिंग सूची का संग्रह > जेवियर लेरॉय का संदेश". Retrieved 2 May 2015.
  14. "OCaml मल्टीकोर मासिक अपडेट".
  15. "OCaml - टॉपलेवल सिस्टम या REPL (ocaml)". ocaml.org. Retrieved 17 May 2021.
  16. "OCaml - बैच संकलन (Ocamlc)".
  17. "3.7। विकल्प - OCaml प्रोग्रामिंग: सही + कुशल + सुंदर". cs3110.github.io. Retrieved 7 October 2022.
  18. oleg-at-okmij.org. "बीईआर मेटाओकैमल". okmij.org.
  19. "Messenger.com अब 50% कारण में परिवर्तित हो गया · कारण". reasonml.github.io. Retrieved 27 February 2018.
  20. "फ्लो: जावास्क्रिप्ट के लिए एक स्टेटिक टाइप चेकर". Flow.
  21. "स्थिर विश्लेषक का अनुमान लगाएं". Infer.
  22. "गिटहब - फेसबुक/पायर-चेक: पायथन के लिए प्रदर्शनकारी टाइप-चेकिंग।". 9 February 2019 – via GitHub.
  23. "WebAssembly/spec: WebAssembly विनिर्देश, संदर्भ दुभाषिया और परीक्षण सूट।". World Wide Web Consortium. 5 December 2019. Retrieved 14 May 2021 – via GitHub.
  24. "OCaml का उपयोग करने वाली कंपनियाँ". OCaml.org. Retrieved 14 May 2021.
  25. "बकलस्क्रिप्ट: 1.0 रिलीज़ आ चुकी है! | ब्लूमबर्ग में टेक". Tech at Bloomberg. 8 September 2016. Retrieved 21 May 2017.
  26. Yaron Minsky (1 November 2011). "जनता के लिए OCaml". Retrieved 2 May 2015.


इस पेज में लापता आंतरिक लिंक की सूची

  • कोक
  • ओपा (प्रोग्रामिंग भाषा)
  • अनुमान टाइप करें
  • एल्म (प्रोग्रामिंग भाषा)
  • शक्ति एक
  • मैक ओएस
  • एफ * (प्रोग्रामिंग भाषा)
  • दुभाषिया (कंप्यूटिंग)
  • औपचारिक तरीके
  • स्वचालित प्रमेय साबित करना
  • एमएल (प्रोग्रामिंग भाषा)
  • मुक्केबाजी (कंप्यूटर विज्ञान)
  • हस्ताक्षर टाइप करें
  • रन-टाइम प्रकार की जानकारी
  • फंगस की समस्या
  • सरणी सीमा जाँच
  • कंप्यूटर विज्ञान की नींव के लिए प्रयोगशाला
  • श्रेणीबद्ध सार मशीन
  • पियरे-लुई क्यूरियन
  • गाय Cousineau (कंप्यूटर वैज्ञानिक)
  • पुस्तकालय (कम्प्यूटिंग)
  • शब्दार्थ विश्लेषण (कंप्यूटर विज्ञान)
  • प्रोफाइलर (कंप्यूटर विज्ञान)
  • धागा (कंप्यूटर विज्ञान)
  • प्रवचन (सॉफ्टवेयर)
  • समन्वित विकास पर्यावरण
  • वर्ड (कंप्यूटर आर्किटेक्चर)
  • रिकर्सन (कंप्यूटर विज्ञान)
  • अनाम समारोह
  • आंशिक आवेदन
  • उच्च-क्रम समारोह
  • रीस्क्रिप्ट (प्रोग्रामिंग भाषा)
  • कारण (प्रोग्रामिंग भाषा)
  • औपचारिक प्रमाण
  • गुबरैला (सॉफ्टवेयर)
  • कार्यक्रम परिवर्तन
  • यह नेटवर्क है
  • ज़ेन क्लाउड प्लेटफ़ॉर्म
  • स्वामित्व व्यापार

बाहरी संबंध