നിം (പ്രോഗ്രാമിങ് ഭാഷ)
ശൈലി: | multi-paradigm: compiled, concurrent, procedural, imperative, object-oriented |
---|---|
പുറത്തുവന്ന വർഷം: | 2008 |
രൂപകൽപ്പന ചെയ്തത്: | Andreas Rumpf |
ഡാറ്റാടൈപ്പ് ചിട്ട: | static,[1] strong,[2] inferred, structural |
അനുവാദപത്രം: | MIT[3][4] |
വെബ് വിലാസം: | nim-lang |
നിം (മുൻ നാമം നിംറോഡ് എന്നായിരുന്നു), ആൻഡ്രീയാസ് റംബ്ഫ് രൂപകൽപ്പന ചെയ്ത് വികസിപ്പിച്ചെടുത്ത ഒരു മൾട്ടിപാരഡിഗം, ഇംപെറേറ്റീവ് കംപൈൽ ചെയ്ത പ്രോഗ്രാമിങ് ഭാഷയാണ്. [5]അത് "കാര്യക്ഷമവും, ആവിഷ്കരണസമർത്ഥവും, വിശിഷ്ടവുമാണ്" [6]മെറ്റാപ്രോഗ്രാമിംഗ്, ഫങ്ഷണൽ, സന്ദേശം കൈമാറ്റം, പ്രോസീജറൽ, ഒബ്ജക്റ്റ് ഓറിയെന്റഡ് പ്രോഗ്രാമിങ് ശൈലികൾ എന്നിവയെ പിന്തുണയ്ക്കുന്നു കംപൈൽ സമയ കോഡ് ഉൽപാദിപ്പിക്കൽ(compile time code generation), ബീജഗണിതത്തിലെ ആവിഷ്ക്കാരരീതിയിലുള്ള ഡാറ്റ തരങ്ങൾ (algebraic data types), സി യ്ക്കുള്ള ഒരു ഫോറിൻ ഫംഗ്ഷൻ ഇന്റർഫേസ് (FFI), ജാവാസ്ക്രിപ്റ്റ്, സി, സി ++ എന്നിവയിൽ കമ്പൈൽ ചെയ്യുന്നതു പോലുള്ള ധാരാളം സവിശേഷതകൾ നൽകിയിരിക്കുന്നു.
വിവരണം
[തിരുത്തുക]നിം എന്നത് സ്റ്റാറ്റിസ്റ്റിക്കലി ടൈപ്പ് ചെയ്തത് ആണ്.[7]ഇത് കംപൈൽ സമയ മെറ്റാപ്രോഗ്രാമിങ് സവിശേഷതകൾ പിന്തുണയ്ക്കുന്നു, വാക്യഘടനാ മാക്രോകൾ, ടേം റീറൈറ്റിംഗ് മാക്രോസ് എന്നിവ പോലുള്ളവ.[8]നിശ്ചിത കാലാവധിയുള്ള റീറൈറ്റിംഗ് മാക്രോകൾ പൊതു ഡാറ്റാ സ്ട്രക്ച്ചറുകളുടെ ലൈബ്രറി നടപ്പിലാക്കൽ സജ്ജമാക്കുന്നു, കാര്യക്ഷമതയോടെ ബിഗ്നമും(bignum) മെട്രിക്സും നടപ്പിലാക്കുന്നു, മാത്രമല്ല സ്വതേയുള്ള ഭാഷാ സൗകര്യങ്ങളും.[9]ഇറ്ററേറ്ററുകളെ (Iterators) പിന്തുണയ്ക്കുന്നു, ഫങ്ഷനുകൾക്ക് കഴിയുന്ന ഭാഷയിലുള്ള ഫസ്റ്റ് ക്ലാസ് എന്റിറ്റീസ് [8]ആയി ഉപയോഗിക്കാം, ഈ സവിശേഷതകൾ ഫങ്ഷണൽ പ്രോഗ്രാമിങ് ഉപയോഗിക്കാൻ അനുവദിക്കുന്നു. ഒബ്ജക്റ്റ് ഓറിയെന്റഡ് പ്രോഗ്രാമിംഗിന് ഇൻഹെറിറ്റൻസും ഒന്നിലധികം ഡിസ്ചച്ച് പിന്തുണയും നൽകുന്നു. ഫങ്ഷനുകൾ ജനറിക് ആയിരിക്കാം, കൂടാതെ ഓവർലോഡഡ് ആകാം, ജനറിക്സ് കൂടുതൽ ടൈപ്പ് ക്ലാസുകളുടെ പിന്തുണയാൽ കൂടുതൽ മെച്ചപ്പെടുത്താം. ഓപ്പറേറ്റർ ഓവർലോഡിംഗും പിന്തുണയ്ക്കുന്നു.[8]നിമ്മിൽ സൈക്കിൾ ഡിറ്റക്ഷൻ ഉപയോഗിച്ച് കാലതാമസമുള്ള അവലംബങ്ങളെ എണ്ണുന്നതിനെ അടിസ്ഥാനമാക്കി ട്യൂൺ ചെയ്യാവുന്ന സ്വയമേയുള്ള ഗാർബേജ് ശേഖരം ഉൾപ്പെടുന്നു.[10]2014-ൽ ആൻഡ്രൂ ബൻസ്റ്റാക്ക് (ഡോ. ഡോബ്സ് ജേണലിന്റെ എഡിറ്റർ ഇൻ ചീഫ്) പറയുന്നു "നിംറോഡ്[മുൻനാമം]... പാസ്കലിലെ ഒരു യഥാർത്ഥ ഡിസൈൻ അവതരിപ്പിക്കുന്നു, പൈത്തൺ, സി-കോഡ് അല്ലെങ്കിൽ ജാവാസ്ക്രിപ്റ്റ് കമ്പൈൽ ചെയ്യുന്നു. [11]നിം സി++ പതിപ്പിലേക്കും കംപൈൽ ചെയ്യപ്പെടുന്നു.
ചരിത്രം
[തിരുത്തുക]നിമ്മിന്റെ ആദ്യകാല സമാരംഭം 2005 ൽ ആൻഡ്രിയാസ് റംബ്ഫ് ആരംഭിച്ചു. ഫ്രീ പാസ്കൽ കംപൈലർ ഉപയോഗിച്ചുകൊണ്ട് പാസ്കസിൽ നിം കംപൈലറിന്റെ ആദ്യ പതിപ്പ് എഴുതി.[12]2008 ൽ നിമ്മിൽ എഴുതിയ ഒരു കമ്പൈലർ പതിപ്പ് പുറത്തിറങ്ങി.[13]കംപൈലർ സ്വതന്ത്രവും ഓപ്പൺ സോഴ്സ് സോഫ്റ്റ്വെയറാണ്, ആൻഡ്രീയാസ് റബ്ഫിനോട് ചേർന്ന് പ്രവർത്തിക്കുന്ന ഒരു കൂട്ടം സന്നദ്ധപ്രവർത്തകരാണ് ഇത് വികസിപ്പിച്ചുകൊണ്ടിരിയ്ക്കുന്നത്.[14]'നിംറോഡിൽ' നിന്ന് 'നിമ്മി' ലേക്ക് ഭാഷ ഔദ്യോഗികമായി പുനർനാമകരണം ചെയ്യപ്പെട്ടു. 2014 ഡിസംബറിൽ പതിപ്പ് 0.10.2 പതിപ്പ് പുറത്തിറങ്ങി.[15]
ഭാഷാ രൂപകല്പന
[തിരുത്തുക]പൈത്തണിനു സമാനമാണ് നിമ്മിന്റെ വാക്യഘടന.[16] വിശദമായി, ഇത് എതൊക്കെയാണ്സ്വാധീനിച്ചത് എന്നത് താഴെ കൊടുക്കുന്നു:
- മോഡുല-3: ട്രേസ് ചെയ്തിട്ടുള്ള അല്ലെങ്കിൽ ട്രേസ്ചെയ്ത പോയിന്ററുകൾ
- ഒബ്ജക്റ്റ് പാസ്കൽ: സുരക്ഷിതമായ ബിറ്റ് സെറ്റുകൾ (ചരങ്ങളുടെ ഗണം), കേസ് സ്റ്റേറ്റ്മെന്റ് വാക്യഘടന, വിവിധ തരത്തിലുള്ള പേരുകൾ, ഫയൽ നാമങ്ങൾ സ്റ്റാൻഡേർഡ് ലൈബ്രറികൾ
- അഡ: സബ് റേഞ്ച് തരങ്ങൾ, സ്പഷ്ടമായ തരങ്ങൾ, സുരക്ഷിത വേരിയന്റുകൾ / കേയ്സ് വസ്തുക്കൾ
- സി++: ഓവർലോഡിംഗ്, ജെനറിക് പ്രോഗ്രാമിങ്
- പൈത്തൺ: ഓഫ്-സൈഡ് നിയമം
- ലിസ്പ്: മാക്രോ സിസ്റ്റം, എഎസ്ടി(AST), ഹോമോയ്കോണിസിറ്റി(homoiconicity) സ്വീകരിക്കുക
- ഒബറോൺ: എക്സ്പോർട്ട് മാർക്കർ
- സി ഷാർപ്: അസിൻക് /എവേയിറ്റ്, ലാംഡ മക്രോസ്
- ഗോ: ഡിഫർ
കൂടാതെ നിമ്മിന് ഒരു യൂണിഫോം ഫംഗ്ഷൻ വിളിക്കൽ വാക്യഘടന (UFCS) [17], ഐഡന്റിഫയർ സമത്വം എന്നിവയെ പിന്തുണയ്ക്കുന്നു.[18]
കംപൈലർ
[തിരുത്തുക]നിം കംപൈലർ ഒപ്റ്റിമൈസുചെയ്ത സി കോഡ് പുറപ്പെടുവിക്കുന്നു. ഡിഫേഴ്സ് ഒരു ബാഹ്യ കംപൈലറിലേക്ക് [19]കംപൈൽ ചെയ്യാനും, അവയുടെ ഒപ്റ്റിമൈസിംഗ്, പോർട്ടബിലിറ്റി കഴിവുകൾ പ്രയോജനപ്പെടുത്താനും സഹായിക്കുന്നു. നിരവധി കമ്പൈലറുകൾക്ക് ക്ലാങ്, ഗ്നു കമ്പൈലർ ശേഖരം ത്തിന്റെ (ജിസിസി) പിന്തുണയുണ്ട്. ആ ഭാഷകളിൽ എഴുതപ്പെട്ട ആപ്ലിക്കേഷൻ പ്രോഗ്രാമിങ് ഇന്റർഫേസ് (എപിഐ) ഉപയോഗിച്ച് ലളിതമായ ഇന്റർഫേസ് അനുവദിക്കുന്നതിനായി കമ്പൈലർക്ക് സി++, ഒബജ്ക്ടീവ്-സി(Objective-C), ജാവസ്ക്രിപ്റ്റ് കോഡ് പുറപ്പെടുവിക്കാനാകും.[5] ഇത് ഐ.ഒ.എസ്. (iOS), ആൻഡ്രോയ്ഡ് (Android) എന്നിവയ്ക്കുള്ള പ്രോഗ്രാമുകൾ എഴുതാൻ അനുവദിക്കുന്നു.
നിം കംപൈലർ സ്വയം ഹോസ്റ്റിംഗാണ്, ഇത് നിം ഭാഷയിലാണ് എഴുതപ്പെട്ടിട്ടുള്ളത്.[20]
ഉപകരണങ്ങൾ
[തിരുത്തുക]നിമ്പിൾ
[തിരുത്തുക]നിമ്പിൾ എന്നത് മൊഡ്യൂളുകൾ പാക്കേജ് ചെയ്യുന്നതിനായി നിം ഉപയോഗിക്കുന്ന പാക്കേജ് മാനേജർ വളരെ വേഗതയേറിയതാണ്.[21]ഇത് കോൺഫിഗേഷന് വേണ്ടി നിംസ്ക്രിപ്റ്റ്(NimScript) ഉപയോഗിക്കുന്നു. പാക്കേജുകളുടെ പ്രധാന ഉറവിടമായി ഗിറ്റ് റിപ്പോസിറ്ററികളിൽ ഉചിതമായി പ്രവർത്തിക്കുന്നു. അതിന്റെ പാക്കേജുകളുടെ ഒരു പട്ടിക ജാവാസ്ക്രിപ്റ്റ് ഒബ്ജക്റ്റ് നോട്ടേഷൻ (JSON) ഫയലിൽ സൂക്ഷിക്കുന്നു, ഇത് നിമ്-ലാംഗ് / പാക്കേജുകൾ റിപോസിറ്ററിയിൽ ലഭ്യവുമാണു്. ഈ ജെസൺ (JSON) ഫയൽ പാക്കേജ് ക്ലോൺ ചെയ്ത് ഇൻസ്റ്റാൾ ചെയ്യാൻ ഗിറ്റ് യുആർഎൽ(Git URL) ഉപയോഗിച്ച് വേഗത്തിൽ നൽകുന്നു.
സിടുനിം(c2nim)
[തിരുത്തുക]നിം കോഡിലേക്ക് ആൻസി സി (ANSI C) കോഡ് വിവർത്തനം ചെയ്യുന്നതിലൂടെ പുതിയ ബൈൻഡിംഗുകൾ സൃഷ്ടിക്കാൻ സിടുനിം സഹായിക്കുന്നു.[22]ഔട്ട്പുട്ട് എന്നത് മാനുവലായി വായിക്കാവുന്ന നിം കോഡ് ആണ്, പരിഭാഷാ പ്രക്രിയയ്ക്കുശേഷം കൈമാറ്റം ചെയ്യപ്പെടുന്നതിന് ഉദ്ദേശിച്ചുള്ളതാണ്.
ചൂസ്നിം(Choosenim)
[തിരുത്തുക]ഔദ്യോഗിക ഡൗൺലോഡുകൾ, ഉറവിടങ്ങളിൽ നിന്ന് നിം ഇൻസ്റ്റാൾ ചെയ്യുന്നു, സ്ഥിരമായതും വികസിപ്പിക്കുന്നതുമായ കമ്പൈലറുകൾക്ക് എളുപ്പത്തിൽ മാറുന്നതിന് പ്രാപ്തമാക്കുന്നു.[23]
നിംഫിക്സ്
[തിരുത്തുക]പഴയ രീതിയിലുള്ള നിംറോഡ് കോഡ് നിം കോഡായി പരിവർത്തനം ചെയ്യാൻ സഹായിക്കുന്ന ഉപകരണമാണ് നിംഫിക്സ്.[24]നിംഫിക്സ് നിലവിൽ ബീറ്റ ക്വാളിറ്റിയോട് കൂടിയുള്ളതാണ്.[25]
പാസ്ടുനിം(pas2nim)
[തിരുത്തുക]നിം കോഡിലേക്കുള്ള ഒബ്ജക്റ്റ് പാസ്കൽ റാപ്പേഴ്സ് ചെയ്യുന്നതിനുള്ള ഒരു ഉപകരണമാണ് പാസ്ടുനിം(pas2nim).[26]നിം കംപൈലറിന്റെ യഥാർത്ഥ പാസ്കൽ ഉറവിടങ്ങൾ തർജ്ജമ ചെയ്യാൻ ഇത് ഉപയോഗിച്ചു. നിമ്മിനായി എളുപ്പത്തിൽ മാപ്പുചെയ്യുന്നതിനെ മാത്രം പിന്തുണയ്ക്കുന്നതായിരുന്നു ഇത്.
അവലംബം
[തിരുത്തുക]- ↑ "Nim by example". GitHub. Retrieved 2014-07-20.
- ↑ Караджов, Захари; Станимиров, Борислав (2014). Метапрограмиране с Nimrod. VarnaConf (in Bulgarian). Retrieved 2014-07-27.
{{cite conference}}
: CS1 maint: unrecognized language (link) - ↑ "FAQ". Nim-lang.org. Retrieved 2015-03-27.
- ↑ "copying.txt". GitHub. Retrieved 2015-03-27.
- ↑ 5.0 5.1 Rumpf, Andreas (2014-02-11). "Nimrod: A new systems programming language". Dr. Dobb's Journal. Retrieved 2014-07-20.
- ↑ "The Nim Programming Language". Nim-lang.org. Retrieved 2014-07-20.
- ↑ Kehrer, Aaron (akehrer). "Nim Syntax". GitHub. Retrieved 2015-01-05.
- ↑ 8.0 8.1 8.2 "Nim Manual". Nim-lang.org. Retrieved 2014-07-20.
- ↑ "Strangeloop Nim presentation". Archived from the original on 2014-07-13. Retrieved 2015-04-30.
- ↑ "Nim's Garbage Collector". Nim-lang.org. Archived from the original on 2018-01-10. Retrieved 2018-01-10.
- ↑ Binstock, Andrew (2014-01-07). "The Rise And Fall of Languages in 2013". Dr. Dobb's Journal. Retrieved 2018-10-08.
- ↑ "Nim Pascal Sources". GitHub. Retrieved 2013-04-05.
- ↑ "News". Nim-lang.org. Archived from the original on 2016-06-26. Retrieved 2016-06-11.
- ↑ "Contributors". GitHub. Retrieved 2013-04-05.
- ↑ Picheta, Dominik (2014-12-29). "Version 0.10.2 released". Nim-lang.org. Retrieved 2018-10-17.
- ↑ Yegulalp, Serdar (2017-01-16). "Nim language draws from best of Python, Rust, Go, and Lisp". InfoWorld.
- ↑ "Nim Manual: Method call syntax". Retrieved 2018-10-12.
- ↑ "Nim Manual: Identifier equality". Retrieved 2018-10-12.
- ↑ Rumpf, Andreas (2014-01-15). Nimrod: A New Approach to Metaprogramming. InfoQ. Event occurs at 2:23. Retrieved 2014-07-20.
- ↑ Rumpf, Andreas (2018-10-12). "Nim Compiling". GitHub. Retrieved 2018-10-17.
- ↑ "Nimble". GitHub. Retrieved 2018-10-12.
- ↑ "c2nim". GitHub. Retrieved 2018-10-12.
- ↑ "choosenim". GitHub. Retrieved 2018-10-12.
- ↑ "nimfix.nim". GitHub. Retrieved 2018-10-12.
- ↑ "nimfix.nim". Archived from the original on 2018-02-17.
- ↑ "pas2nim". GitHub. Retrieved 2018-10-12.