ഒകാമൽ

കാമൽ പ്രോഗ്രാമിംഗ് ഭാഷയുടെ പ്രധാന നടപ്പാക്കലാണ് **ഒകാമൽ**(OCaml) (/ oʊˈkæməl / oh-KAM-)) (1996-ൽ സേവ്യർ ലെറോയ്, ജെറോം വോയിലോൺ, ഡാമിയൻ ഡോളിഗെസ്, ഡിഡിയർ റൂമി, അസ്കെൻഡർ സുവാരസ്, മറ്റുള്ളവർ). ഒബ്‌ജക്റ്റ് ഓറിയെന്റഡ് സവിശേഷതകളോടെ ഇത് കാമലിനെ വിപുലീകരിക്കുന്നു, കൂടാതെ എം‌എൽ കുടുംബത്തിലെ അംഗവുമാണ്.

ഒകാമൽ ടൂൾചെയിനിൽ ഒരു സംവേദനാത്മക ടോപ്പ് ലെവൽ ഇന്റർപ്രെറ്റർ, ഒരു ബൈറ്റ്കോഡ് കംപൈലർ, ഒപ്റ്റിമൈസ് ചെയ്യുന്ന നേറ്റീവ് കോഡ് കംപൈലർ, റിവേർസിബിൾ ഡീബഗ്ഗർ, ഒരു പാക്കേജ് മാനേജർ (OPAM) എന്നിവ ഉൾപ്പെടുന്നു. ഇതിന് ഒരു വലിയ സ്റ്റാൻഡേർഡ് ലൈബ്രറി ഉണ്ട്, ഇത് പൈത്തൺ, പേൾ എന്നിവപോലുള്ള നിരവധി ആപ്ലിക്കേഷനുകൾക്ക് ഉപയോഗപ്രദമാക്കുന്നു, കൂടാതെ വലിയ തോതിലുള്ള സോഫ്റ്റ്‌വേർ എഞ്ചിനീയറിംഗിന് ഇത് ബാധകമാക്കുന്ന ശക്തമായ മോഡുലാർ, ഒബ്ജക്റ്റ്-ഓറിയന്റഡ് പ്രോഗ്രാമിംഗ് നിർമ്മിതികളുമുണ്ട്.

കാമൽ(CAML) എന്നതിന്റെ ചുരുക്കെഴുത്ത് യഥാർത്ഥത്തിൽ കാറ്റഗോറിക്കൽ അബസ്ട്രാക്ട് യന്ത്ര ഭാഷയെ സൂചിപ്പിച്ചിരുന്നു, എന്നാൽ ഒകാമൽ ഈ അമൂർത്ത യന്ത്രത്തെ ഒഴിവാക്കുന്നു.  ഫ്രഞ്ച് ഇൻസ്റ്റിറ്റ്യൂട്ട് ഫോർ റിസർച്ച് ഇൻ കമ്പ്യൂട്ടർ സയൻസ് ആൻഡ് ഓട്ടോമേഷൻ (INRIA) നിയന്ത്രിക്കുകയും പ്രധാനമായും പരിപാലിക്കുകയും ചെയ്യുന്ന ഒരു സ്വതന്ത്ര ഓപ്പൺ സോഴ്സ് സോഫ്റ്റ്‌വെയർ പ്രോജക്റ്റാണ് ഒകാമൽ. 2000 കളുടെ തുടക്കത്തിൽ, ഒകാമിൽ നിന്നുള്ള ഘടകങ്ങൾ പല ഭാഷകളും സ്വീകരിച്ചു, പ്രത്യേകിച്ച് എഫ്#,സ്കാല.
## തത്ത്വശാസ്ത്രം
കംപൈലറുകൾക്കും എം‌എൽ-ഉരുത്തിരിഞ്ഞ ഭാഷകൾ നന്നായി അറിയപ്പെടുന്നു. ഒരു എം‌എൽ‌ പോലുള്ള ടൈപ്പ് സിസ്റ്റത്തിന് കീഴിൽ ഒകാമൽ പ്രവർത്തനപരവും അനിവാര്യവും ഒബ്‌ജക്റ്റ്-ഓറിയന്റഡ് പ്രോഗ്രാമിംഗും ഏകീകരിക്കുന്നു. അതിനാൽ, ഒകാമൽ ഉപയോഗിക്കുന്നതിന് പ്രോഗ്രാമർമാർക്ക് ശുദ്ധമായ പ്രവർത്തനപരമായ ഭാഷാ മാതൃകയെക്കുറിച്ച് കൂടുതൽ പരിചയം ആവശ്യമില്ല.

പ്രോഗ്രാമർ അതിന്റെ സ്റ്റാറ്റിക് ടൈപ്പ് സിസ്റ്റത്തിന്റെ പരിമിതികൾക്കുള്ളിൽ പ്രവർത്തിക്കാൻ ആവശ്യപ്പെടുന്നതിലൂടെ, ചലനാത്മകമായി ടൈപ്പ് ചെയ്ത ഭാഷകളുമായി ബന്ധപ്പെട്ട ടൈപ്പ് സംബന്ധിയായ റൺടൈം പ്രശ്നങ്ങൾ ഒകാം ഇല്ലാതാക്കുന്നു. കൂടാതെ, ഒകാമിന്റെ ടൈപ്പ്-ഇൻഫെറിംഗ് കംപൈലർ മിക്ക സ്റ്റാറ്റിക്ക് ടൈപ്പ് ചെയ്ത ഭാഷകളിലും ആവശ്യമായ മാനുവൽ ടൈപ്പ് വ്യാഖ്യാനങ്ങളുടെ ആവശ്യകതയെ വളരെയധികം കുറയ്ക്കുന്നു. ഉദാഹരണത്തിന്, ജാവ, സി# പോലുള്ള ഭാഷകളിൽ ചെയ്യുന്നതുപോലെ, വേരിയബിളുകളുടെ ഡാറ്റാ തരവും ഫംഗ്ഷനുകളുടെ ഒപ്പും വ്യക്തമായി പ്രഖ്യാപിക്കേണ്ടതില്ല, കാരണം അവ ഓപ്പറേറ്റർമാരിൽ നിന്നും മറ്റ് വേരിയബിളുകളിലും മറ്റ് മൂല്യങ്ങളിലും പ്രയോഗിക്കുന്ന മറ്റ് ഫംഗ്ഷനുകളിൽ നിന്നും അനുമാനിക്കാം. കോഡിൽ. ഒകാമൽ ന്റെ ടൈപ്പ് സിസ്റ്റത്തിന്റെ ഫലപ്രദമായ ഉപയോഗത്തിന് ഒരു പ്രോഗ്രാമറുടെ ഭാഗത്തുനിന്ന് ചില സങ്കീർണതകൾ ആവശ്യമായി വരും, എന്നാൽ ഈ അച്ചടക്കത്തിന് വിശ്വസനീയവും ഉയർന്ന പ്രകടനമുള്ളതുമായ സോഫ്റ്റ്‌വേർ ലഭിക്കും.

പ്രകടനത്തിന് ഔന്നൽ നൽകിക്കൊണ്ട് അക്കാദമിയുടെ ഉത്ഭവമുള്ള മറ്റ് ഭാഷകളിൽ നിന്ന് ഒകാമിനെ ഏറ്റവും വ്യത്യസ്തനാക്കാം. ഇതിന്റെ സ്റ്റാറ്റിക് ടൈപ്പ് സിസ്റ്റം റൺടൈം തരം പൊരുത്തക്കേടുകളെ തടയുന്നു, അതിനാൽ ചലനാത്മകമായി ടൈപ്പുചെയ്ത ഭാഷകളുടെ പ്രകടനത്തെ ബാധിക്കുന്ന റൺടൈം തരവും സുരക്ഷാ പരിശോധനകളും ഒഴിവാക്കുന്നു, അതേസമയം റൺടൈം സുരക്ഷ ഉറപ്പ് നൽകുന്നു, അറേ ബൗണ്ട് ചെക്കിംഗ് ഓഫുചെയ്യുമ്പോഴോ സീരിയലൈസേഷൻ പോലുള്ള ചില തരം സുരക്ഷിതമല്ലാത്ത സവിശേഷതകൾ ഉപയോഗിക്കുമ്പോഴോ ഒഴികെ . ഇവ ഒഴിവാക്കുന്നത് പ്രായോഗികമായി തികച്ചും സാദ്ധ്യമാണ്.

ടൈപ്പ് ചെക്കിംഗ് ഓവർഹെഡ് മാറ്റിനിർത്തിയാൽ, ഫംഗ്ഷണൽ പ്രോഗ്രാമിംഗ് ഭാഷകൾ പൊതുവേ, ഫണാർഗ് പ്രശ്നം പോലുള്ള പ്രശ്നങ്ങൾ കാരണം കാര്യക്ഷമമായ മെഷീൻ ലാംഗ്വേജ് കോഡിലേക്ക് കംപൈൽ ചെയ്യുന്നത് വെല്ലുവിളിയാണ്. സ്റ്റാൻഡേർഡ് ലൂപ്പ്, രജിസ്റ്റർ, ഇൻസ്ട്രക്ഷൻ ഒപ്റ്റിമൈസേഷനുകൾ എന്നിവയ്‌ക്കൊപ്പം, മൂല്യ ബോക്സിംഗും ക്ലോഷർ അലോക്കേഷനും ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിന് സ്റ്റാറ്റിക് പ്രോഗ്രാം വിശകലന രീതികൾ ഒകാമിന്റെ ഒപ്റ്റിമൈസിംഗ് കംപൈലർ ഉപയോഗിക്കുന്നു, ഇത് പ്രവർത്തനപരമായ പ്രോഗ്രാമിംഗ് നിർമ്മിതികളെ വ്യാപകമായി ഉപയോഗിച്ചാലും ഫലമായുണ്ടാകുന്ന കോഡിന്റെ പ്രകടനം പരമാവധി വർദ്ധിപ്പിക്കാൻ സഹായിക്കുന്നു.

സേവ്യർ ലെറോയ് "മാന്യമായ സി കംപൈലറിന്റെ പ്രകടനത്തിന്റെ 50 ശതമാനമെങ്കിലും ഒകാം നൽകുന്നു" എന്ന് പ്രസ്താവിച്ചു, നേരിട്ടുള്ള താരതമ്യം അസാധ്യമാണെങ്കിലും. മറ്റ് ഭാഷകളിലെ സ്റ്റാൻ‌ഡേർഡ് ലൈബ്രറികളിലെ തുല്യമായ ഫംഗ്ഷനുകളേക്കാൾ വേഗതയേറിയ അൽ‌ഗോരിതം ഉപയോഗിച്ചാണ് ഒകാമൽ സ്റ്റാൻ‌ഡേർഡ് ലൈബ്രറിയിലെ ചില ഫംഗ്ഷനുകൾ‌ നടപ്പിലാക്കുന്നത്. ഉദാഹരണത്തിന്, സിദ്ധാന്തത്തിലെ ഒകാം സ്റ്റാൻഡേർഡ് ലൈബ്രറിയിൽ സെറ്റ് യൂണിയൻ നടപ്പിലാക്കുന്നത് അനിവാര്യമായ ഭാഷകളുടെ സ്റ്റാൻഡേർഡ് ലൈബ്രറികളിലെ (ഉദാ. സി++, ജാവ) തുല്യമായ പ്രവർത്തനത്തേക്കാൾ അസിംപ്റ്റോട്ടിക്ക് വേഗതയുള്ളതാണ്, കാരണം ഇൻ‌പുട്ടിന്റെ ഭാഗങ്ങൾ‌ പുനരുപയോഗിക്കുന്നതിന് സെറ്റുകളുടെ മാറ്റമില്ലായ്മയെ ഒകാം നടപ്പാക്കൽ ഉപയോഗപ്പെടുത്തുന്നു.ഔട്ട്‌പുട്ടിൽ സജ്ജമാക്കുന്നു (സ്ഥിരമായ ഡാറ്റ ഘടന കാണുക).

## അവലംബം