ओकैमल

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

सतत विकास
OCaml में बढ़ते व्यावसायिक और शैक्षणिक कोडबेस का समर्थन करने के लिए पिछले दो दशकों में भाषा सुधारों को क्रमिक रूप से जोड़ा गया है। 2012 में OCaml 4.0 रिलीज़ में भाषा के लचीलेपन को बढ़ाने के लिए सामान्यीकृत बीजगणितीय डेटा प्रकार (GADTs) और प्रथम श्रेणी के मॉड्यूल जोड़े गए। OCaml 5.0.0 2022 में रिलीज़ होगा भाषा रनटाइम का पूर्ण पुनर्लेखन है, वैश्विक दुभाषिया लॉक को हटाना और सीमांकित निरंतरता के माध्यम से प्रभाव प्रणाली को जोड़ना। ये परिवर्तन क्रमशः समानांतर_प्रोग्रामिंग_मॉडल#साझा_मेमोरी|साझा-मेमोरी समानता और रंग-अंधा समवर्ती के लिए समर्थन सक्षम करते हैं।

ओकैमल का विकास 2005 तक आईएनआरआईए में क्रिस्टाल टीम के भीतर जारी रहा, जब गैलियम टीम ने इसका स्थान लिया। इसके बाद, गैलियम को 2019 में कैम्बियम टीम द्वारा सफल बनाया गया।

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

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

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

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

नेटिव कोड कंपाइलर यूनिक्स, माइक्रोसॉफ़्ट विंडोज़  और एप्पल इंक. मैकओएस सहित कई प्लेटफार्मों के लिए उपलब्ध है। प्रमुख आर्किटेक्चर के लिए मूल कोड जनरेशन (कंपाइलर) समर्थन के माध्यम से पोर्टेबिलिटी हासिल की जाती है:


 * X86-64 (AMD64), RISC-V, और ARM64 (OCaml 5.0.0 और उच्चतर में)
 * पावर ISA, IBM Z (OCaml 5.0.0 से पहले, और भविष्य में 5.x रिलीज़ में पुनः प्रदर्शित होने के कारण)
 * IA-32 और एआरएम वास्तुकला (OCaml 5.0.0 से पहले)
 * SPARC (OCaml 4.06.0 से पहले)
 * डीईसी अल्फा, एचपीपीए, आईए64 और एमआईपीएस वास्तुकला (ओकैमल 4.00.0 से पहले)

जब मूल कोड जनरेशन उपलब्ध नहीं होता है, तो बाइटकोड कंपाइलर किसी भी 32- या 64-बिट आर्किटेक्चर पर ऑपरेशन का समर्थन करता है, जिसके लिए केवल सी कंपाइलर की आवश्यकता होती है।

OCaml बाइटकोड और नेटिव कोड प्रोग्राम को प्रीमेप्टिव संदर्भ स्विचिंग के साथ थ्रेड (कंप्यूटर विज्ञान) शैली में लिखा जा सकता है। एक ही डोमेन में OCaml थ्रेड्स केवल टाइम शेयरिंग द्वारा निष्पादित करें। हालाँकि, एक OCaml प्रोग्राम में कई डोमेन हो सकते हैं। वितरित कंप्यूटिंग के लिए कई लाइब्रेरी हैं जैसे फंक्टरी और ocamlnet/Plasma।

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

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

फिर कोड को # प्रॉम्प्ट पर दर्ज किया जा सकता है। उदाहरण के लिए, 1+2*3 की गणना करने के लिए: OCaml अभिव्यक्ति के प्रकार को int (एक शब्द (कंप्यूटर वास्तुकला) |मशीन-प्रिसिजन इंटीजर (कंप्यूटर विज्ञान)) मानता है और परिणाम 7 देता है।

हैलो वर्ल्ड
निम्नलिखित प्रोग्राम hello.ml :

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

$ ocamlc hello.ml -o नमस्ते

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

$ ocamlopt hello.ml -o नमस्ते

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

ocamlc का पहला तर्क, hello.ml, संकलित करने के लिए स्रोत फ़ाइल को निर्दिष्ट करता है और -o hello ध्वज आउटपुट फ़ाइल को निर्दिष्ट करता है।

विकल्प
OCaml में विकल्प प्रकार का कंस्ट्रक्टर, हास्केल में शायद प्रकार के समान, किसी दिए गए डेटा प्रकार को या तो दिए गए डेटा प्रकार के कुछ मान को वापस करने के लिए, या कुछ भी नहीं लौटाने के लिए बढ़ाता है। इसका उपयोग यह व्यक्त करने के लिए किया जाता है कि कोई मान मौजूद हो भी सकता है और नहीं भी। यह एक फ़ंक्शन का उदाहरण है जो या तो किसी विकल्प से एक इंट निकालता है, यदि अंदर कोई है, और इसे एक स्ट्रिंग में परिवर्तित करता है, या यदि नहीं, तो एक खाली स्ट्रिंग लौटाता है:

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

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

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

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

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

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

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

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

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

OCaml में, Num मॉड्यूल (अब ZArith मॉड्यूल द्वारा प्रतिस्थापित) मनमाना-सटीक अंकगणित प्रदान करता है और इसका उपयोग करके इसे चालू शीर्ष-स्तर में लोड किया जा सकता है: फैक्टोरियल फ़ंक्शन को तब मनमाना-सटीक संख्यात्मक ऑपरेटरों का उपयोग करके लिखा जा सकता है =/, */ और -/ :

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

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

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

$ ocamlc -I + lablGL lablग्लूट.cma lablgl.cma Simple.ml -o सरल

या इसके साथ मूल कोड के लिए:

$ ocamlopt -I + lablGL lablग्लूट.cmxa lablgl.cmxa Simple.ml -o सरल

या, अधिक सरलता से, ocamlfind बिल्ड कमांड का उपयोग करना $ ocamlfind ऑप्ट सिंपल.एमएल -पैकेज लैबलग्ल.ग्लूट -लिंकपीकेजी -ओ सिंपल

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

$ ./सरल

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

फाइबोनैचि अनुक्रम
निम्नलिखित कोड इनपुट किए गए किसी संख्या n की फाइबोनैचि संख्या की गणना करता है। यह टेल रिकर्सन और पैटर्न मिलान का उपयोग करता है।

उच्च-क्रम के कार्य
फ़ंक्शंस इनपुट के रूप में फ़ंक्शंस ले सकते हैं और परिणाम के रूप में रिटर्न फ़ंक्शंस ले सकते हैं। उदाहरण के लिए, किसी फ़ंक्शन f पर दो बार लागू करने से एक फ़ंक्शन प्राप्त होता है जो f को उसके तर्क पर दो बार लागू करता है।  # add2 98;; - : पूर्णांक = 100 # add_str टेस्ट ;; - : स्ट्रिंग = टेस्ट टेस्ट टेस्ट टेस्ट  फ़ंक्शन दो बार टाइप वेरिएबल 'a' का उपयोग यह इंगित करने के लिए करता है कि इसे केवल int->int फ़ंक्शंस के बजाय किसी भी फ़ंक्शन f मैपिंग पर टाइप 'a' से लागू किया जा सकता है। विशेष रूप से, दो बार स्वयं पर भी लागू किया जा सकता है।  # मान लीजिए चार गुना f = (दो बार दो बार) f;; वैल चार बार : ('ए -> 'ए) -> 'ए -> 'ए = <मजेदार> # चलो add4 = चार गुना inc;; वैल ऐड4 : int -> int = # add4 98;; - : पूर्णांक = 102 

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

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

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

परिणाम है:

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

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

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

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

 * शून्य स्थापना, एक मल्टी-प्लेटफॉर्म पैकेज मैनेजर।
 * CamlPDF, पीडीएफ फाइलों को पढ़ने, लिखने और संशोधित करने के लिए एक OCaml लाइब्रेरी
 * कोकिनेले (सॉफ्टवेयर), सी (प्रोग्रामिंग भाषा) प्रोग्राम के स्रोत कोड को बदलने के लिए एक उपयोगिता।
 * कॉक, एक औपचारिक प्रमाण प्रबंधन प्रणाली।
 * एफएफटीडब्ल्यू, असतत फूरियर परिवर्तनों की गणना के लिए एक पुस्तकालय (कंप्यूटिंग)। नाम के OCaml प्रोग्राम द्वारा कई C रूटीन तैयार किए गए हैं.
 * फेसबुक संदेशवाहक का वेब संस्करण।
 * फ्लो, फेसबुक पर बनाया गया एक स्थिर प्रोग्राम विश्लेषण जो टाइप सिस्टम#जावास्क्रिप्ट के लिए स्टेटिक प्रकार की जांच का अनुमान लगाता है और जांचता है।
 * उल्लू वैज्ञानिक कंप्यूटिंग, वैज्ञानिक और इंजीनियरिंग कंप्यूटिंग के लिए एक समर्पित प्रणाली।
 * सामने-सी, सी कार्यक्रमों के विश्लेषण के लिए एक रूपरेखा।
 * जीनवेब, मुफ़्त और ओपन-सोर्स मल्टी-प्लेटफ़ॉर्म वंशावली सॉफ़्टवेयर।
 * फेसबुक पर बनाया गया हैक (प्रोग्रामिंग भाषा)  प्रोग्रामिंग लैंग्वेज कंपाइलर, स्थिर प्रकारों के साथ PHP का विस्तार करता है।
 * मिला हुआ प्रोग्रामिंग भाषा कंपाइलर।
 * एचओएल लाइट, एक औपचारिक प्रमाण सहायक।
 * इनफ़र, जावा (प्रोग्रामिंग भाषा), सी, सी++ और उद्देश्य सी  के लिए फेसबुक पर बनाया गया एक स्थिर विश्लेषक है, जिसका उपयोग आईओएस और एंड्रॉइड (ऑपरेटिंग सिस्टम) ऐप्स में बग का पता लगाने के लिए किया जाता है।
 * Lexifi Apropos, जटिल डेरिवेटिव मॉडलिंग के लिए एक प्रणाली।
 * मिराजओएस, शुद्ध ओकैमल में लिखा गया एक unikernel प्रोग्रामिंग फ्रेमवर्क।
 * MLdonkey, EDonkey नेटवर्क पर आधारित एक पीयर-टू-पीयर फ़ाइल साझाकरण एप्लिकेशन।
 * Ocsigen, एक OCaml वेब ढाँचा ।
 * ओपा (प्रोग्रामिंग भाषा), वेब विकास के लिए एक स्वतंत्र और ओपन-सोर्स प्रोग्रामिंग भाषा।
 * पायर-चेक, फेसबुक पर पायथन (प्रोग्रामिंग भाषा) के लिए एक प्रकार का चेकर बनाया गया।
 * सेमग्रेप, एक बग-फाइंडिंग टूल जो कई प्रोग्रामिंग भाषाओं का समर्थन करता है।
 * Tezos, एक स्व-संशोधित स्मार्ट अनुबंध प्लेटफ़ॉर्म जो XTZ को मूल मुद्रा के रूप में उपयोग करता है।
 * Unison, दो निर्देशिकाओं के बीच फ़ाइलों को सिंक्रनाइज़ करने के लिए एक फ़ाइल सिंक्रनाइज़ेशन प्रोग्राम।
 * WebAssembly के लिए संदर्भ दुभाषिया, वेब ब्राउज़र के अंदर निष्पादन के लिए एक निम्न-स्तरीय बाइटकोड।
 * [[ एक्सईएन क्लाउड प्लेटफ़ॉर्म]] (एक्ससीपी), ज़ेन सूत्र के लिए एक टर्नकी वर्चुअलाइजेशन समाधान।

उपयोगकर्ता
कई दर्जन कंपनियाँ कुछ हद तक OCaml का उपयोग करती हैं। उल्लेखनीय उदाहरणों में शामिल हैं:
 * ब्लूमबर्ग एल.पी., जिसने जावास्क्रिप्ट को लक्षित करने वाला एक OCaml कंपाइलर बैकएंड BuckleScript बनाया।
 * Citrix Systems, जो Citrix Systems#Networking और क्लाउड में OCaml का उपयोग करता है (2018 के दौरान Citrix हाइपरवाइज़र के रूप में पुनः ब्रांडेड)।
 * फेसबुक, जिसने OCaml में फ्लो, हैक, इनफर, पीएफएफ और रीज़न विकसित किया।
 * जेन स्ट्रीट कैपिटल, एक मालिकाना व्यापारिक फर्म, जिसने अपने शुरुआती दिनों में OCaml को अपनी पसंदीदा भाषा के रूप में अपनाया।

बाहरी संबंध

 * OCaml manual
 * OCaml Package Manager
 * Real World OCaml
 * Real World OCaml