![]() | |
ശൈലി: | imperative, structured, procedural, modular, concurrent |
---|---|
പുറത്തുവന്ന വർഷം: | 1980s |
രൂപകൽപ്പന ചെയ്തത്: | DEC and Olivetti |
വികസിപ്പിച്ചത്: | elego Software Solutions GmbH |
ഏറ്റവും പുതിയ പതിപ്പ്: | 5.8.6/ July 14, 2010 |
ഏറ്റവും പുതിയ ഉറച്ചതല്ലാത്ത പതിപ്പ്: | 5.8.6/ July 14, 2010 |
ഡാറ്റാടൈപ്പ് ചിട്ട: | strong, static, safe or if unsafe explicitly safe isolated |
പ്രധാന രൂപങ്ങൾ: | SRC Modula-3, CM3, PM3, EZM3, M3/PC Klagenfurt |
വകഭേദങ്ങൾ: | functional, persistent, multimedia, parallel, distributed and Network Modula-3 |
സ്വാധീനിക്കപ്പെട്ടത്: | Modula-2+, Modula-2, Pascal, ALGOL, Oberon, Mesa, Euclid |
സ്വാധീനിച്ചത്: | Java, Python,[1] Caml, C#, Nim[2] |
ഓപറേറ്റിങ്ങ് സിസ്റ്റം: | Cross-platform (multi-platform) |
അനുവാദപത്രം: | Open source |
വെബ് വിലാസം: | [1] |
മോഡുല-3 എന്നത് മോഡുല-2+ എന്നറിയപ്പെടുന്ന മോഡുല-2(Modula-2) അപ്ഗ്രേഡ് ചെയ്ത പതിപ്പിനെ പിന്തുടരുന്ന ഒരു പ്രോഗ്രാമിംഗ് ഭാഷയാണ്. ഗവേഷണ വൃത്തങ്ങളിൽ സ്വാധീനം ചെലുത്തിയപ്പോൾ (ജാവ, സി#, പൈത്തൺ എന്നീ ഭാഷകളുടെ രൂപകൽപ്പനകളെ സ്വാധീനിക്കുന്നു) പക്ഷേ ഇത് വ്യവസായങ്ങളിൽ വ്യാപകമായി ഉപയോഗിക്കപ്പെടുന്നില്ല. ലൂക്കാ കാർഡല്ലി, ജെയിംസ് ഡൊണഹ്യൂ, ലൂസിലി ഗ്ലാസ്മാൻ, മിസ്റ്റർ ജോർദൻ (ഒലിവ്ട്ടി സോഫ്റ്റ്വേർ ടെക്നോളജി ലബോറട്ടറിയിൽ മുൻപ്), ഡിജിറ്റൽ എക്പ്സ് കോർപ്പറേഷൻ (ഡി.ഇ.സി) സിസ്റ്റംസ് റിസേർച്ച് സെൻറർ (എസ്ആർസി), ഒലിവ്ട്ടി റിസർച്ച് സെൻറർ (ഒ ആർ സി), ബിൽ കൽസോവ്, ഗ്രെഗ് നെൽസൻ എന്നിവർ ചേർന്ന് 1980 കളിൽ തുടക്കമിട്ടു.
സിസ്റ്റംസ്-പ്രോഗ്രാമിങ് ഭാഷയുടെ കരുത്ത് നിലനിർത്തുമ്പോൾ, മൊഡുല-3 യുടെ പ്രധാന സവിശേഷതകൾ ലളിതവും സുരക്ഷിതത്വവുമാണ്. ടൈപ്പ് സുരക്ഷയുടെ പാസ്കൽ പാരമ്പര്യം നിലനിർത്താൻ മോഡുല-3 ലക്ഷ്യംവച്ച്, പ്രായോഗികമായ യഥാർത്ഥ പ്രോഗ്രാമിംഗിനുള്ള പുതിയ നിർമ്മാണങ്ങൾ അവതരിപ്പിക്കുന്നു. ജനറിക് പ്രോഗ്രാമിങ് (ടെംപ്ലേറ്റുകൾക്ക് സമാനമായ), പ്രത്യേകിച്ച് മൊഡുല-3 യുടെ പിന്തുണയിൽ മൾട്ടിത്രെഡിംഗ്(multithreading), ഒഴിവാക്കൽ കൈകാര്യം ചെയ്യൽ, ഗാർബേജ് ശേഖരണം, ഒബ്ജക്റ്റ് ഓറിയെൻറഡ് പ്രോഗ്രാമിങ്, ഭാഗികമായി വെളിപ്പെടൽ, സുരക്ഷിതമല്ലാത്ത കോഡിൻറെ സ്പഷ്ടമായ അടയാളം എന്നിവയാണ്. മോഡുല 3 യുടെ ഡിസൈൻ ലക്ഷ്യം ആധുനികമായ, ആധികാരിക ഭാഷകളുടെ ഏറ്റവും പ്രധാനപ്പെട്ട സവിശേഷതകളെ വളരെ അടിസ്ഥാനപരമായ രൂപങ്ങളിൽ നടപ്പിലാക്കുന്ന ഭാഷയാണ്. അപകടകരമായതും സങ്കീർണവുമായ നിരവധി സവിശേഷതകളുള്ള, മൾട്ടിപ്പിൾ ഇൻഹെറിറ്റൻസ്, ഓപ്പറേറ്റർ ഓവർലോഡിംഗും പോലുള്ളവ ഒഴിവാക്കി.
1986 നവംബറിൽ മൊഡുല-3 പ്രോജക്ട് ആരംഭിച്ചു. മോഡുലയുടെ ഒരു പുതിയ പതിപ്പിന് വേണ്ടിയുളള ചില ആശയങ്ങളുമായാണ് നിക്കോളസ് വിർത്ത് മൗറീസ് വിൽക്കെസിന് എഴുതിയത്. വിൽക്സ് ഡി.ഇ.സിക്കു വേണ്ടി പ്രവർത്തിച്ചുവെങ്കിലും, ഇംഗ്ലണ്ടിൽ മടങ്ങിയെത്തിയപ്പോൾ ഒലിവറ്റിന്റെ റിസർച്ച് സ്ട്രാറ്റജി ബോർഡിൽ ചേർന്നു. വിർക് ഒബറോണിലേക്ക് ഇതിനകം മാറിയിരുന്നു, മോഡുല നാമത്തിൻറെ കീഴിൽ വിൽകസിന്റെ സംഘം വികസിപ്പിക്കൽ തുടരുന്നു.1988 ആഗസ്റ്റിൽ ഭാഷാ നിർവ്വചനം പൂർത്തിയായി. 1989 ജനുവരിയിൽ പുതുക്കിയ പതിപ്പായിരുന്നു ഉപയോഗിച്ചിരുന്നത്. ഡി.ഇ.സി(DEC) യുടെ കമ്പൈലറുകളെ ഒലിവേട്ടി ഉടൻതന്നെ പിന്തുടർന്നു, അതിനു ശേഷം മൂന്നാം കക്ഷി ഇപ്ലിമെന്റേഷൻസ് നടപ്പിലാക്കി.
എസ്.ആർ.സിയുടെയും എക്രോൺ കംപ്യൂട്ടർ റിസേർച്ച് സെൻററിൻറെയും ഉപയോഗത്തിൽ Modula-2+ (ആർസി, പിന്നീട് ORC ഒലിവ്ട്ടി ഏക്കോൺ വാങ്ങിയപ്പോൾ) അക്കാലത്ത്, ഡി.സി. ഫയർഫ്ലൈ, മൾട്ടിപ്രോസസർ വാക്സ് (VAX) വർക്ക്സ്റ്റേഷൻ എന്ന ഓപ്പറേറ്റിങ് സിസ്റ്റം എഴുതിയ ഭാഷ, ഏക്രോൺ സിക്ക് വേണ്ടി എക്രോൺ കംപൈലർ എആർഎസിൽ എക്രോൺ ആർക്കിമെഡസ് എന്ന കമ്പ്യൂട്ടർ ശ്രേണിയിലെ ആർക്സ്(ARX) ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം പ്രോജക്ടിനായി ആർക്കി(ARC)ൽ മൊഡ്യുൾ എക്സിക്യൂഷൻ ലൈബ്രറി (കാമൽ) എഴുതി. പരിഷ്കരിച്ച മോഡുല-3 റിപ്പോർട്ട് പ്രസ്താവന പ്രകാരം മെസോ, സെഡാർ, ഒബ്ജക്റ്റ് പാസ്കൽ, ഒബറോൺ, യൂക്ലിഡ് മുതലായ മറ്റു ഭാഷകളും ഈ ഭാഷയെ സ്വാധീനിച്ചു.[3]
1990-കളിൽ, മോഡുല-3 പഠനഭാഷയായി ഗണ്യമായ തുക നേടിക്കൊടുത്തു. എന്നാൽ അത് വ്യാവസായിക ആവശ്യങ്ങൾക്ക് വ്യാപകമായി ഉപയോഗിച്ചില്ല. മോഡുല-3 യുടെ പിന്തുണയോടു കൂടി ഇതിലേക്ക് സംഭാവന നൽകുന്നത് ഡി.ഇ.സി. യുടെ അവസാനം കുറിക്കുകയാകാം(പ്രത്യേകിച്ച് ഡി.ഇ.സി കോംപാകിന് 1998-ൽ വിൽക്കുന്നതിനുമുമ്പ് ഇത് ഫലപ്രദമായി അറ്റകുറ്റപണി ചെയ്തില്ല). ഏത് സാഹചര്യത്തിലും, മോഡുല-3 യ്ക്ക് ലാളിത്യവും ശക്തിയും ഉണ്ടെങ്കിലും, ഒബ്ജക്റ്റ് ഓറിയെന്റഡ് പ്രോഗ്രാമിങ്ങിന്റെ നിയന്ത്രിത നിർവ്വഹണത്തോടുകൂടിയ ഒരു പ്രൊസീഡറൽ സംഗ്രഹിതഭാഷയ്ക്ക് ചെറിയ ആവശ്യം ഉണ്ടായിരുന്നതായി കാണുന്നു. ഒരു സമയം, സിംഎം3(CM3) എന്ന പേരിൽ ഒരു വാണിജ്യ കമ്പൈലർ കൈകാര്യം ചെയ്തു. ഡിസിക്ക് എസ്ആർസിയിൽ മുൻപുള്ള പ്രധാന നിർവ്വാഹക രിൽ ഒരാൾ പരിപാലിക്കുന്നത് വേണ്ടി ഡി.ഇ.സിയെ കോമ്പാക്കിന് വിൽക്കുന്നതിനുമുമ്പ് അയാൾ വാടകയ്ക്കെടുത്തിരുന്നു, റിയാക്ടർ എന്ന ഒരു സംയോജിത വികസന പരിതഃസ്ഥിതിയും എക്സ്റ്റെൻസിബിൾ ജാവ വെർച്വൽ മെഷിൻ (ബൈനറി, സ്രോതസ്സുകളുടെ ഫോർമാറ്റുകളിലും ലൈസൻസുള്ളതും റിയാക്റ്റർ ഉപയോഗിച്ച് നിർമ്മിക്കാൻ കഴിയുന്നതുമാണ്), ക്രിട്ടിക്കൽ മാസ്, ഇൻക്, എന്നാൽ 2000 ൽ ആ കമ്പനി പ്രവർത്തനം നിർത്തി, എൽഗോ സോഫ്റ്റ്വേർ സൊല്യൂഷൻസ് GmbH- യ്ക്ക് അതിന്റെ ഉൽപ്പന്നങ്ങളുടെ ഉറവിടങ്ങൾ നൽകി. യൂണിവേഴ്സിറ്റിയിൽ പ്രോഗ്രാമിങ് ഭാഷാ കോഴ്സുകളിൽ താരതമ്യേന പാഠ്യപദ്ധതി ഇപ്പോൾ പഠിപ്പിക്കുന്നുണ്ട്, അതിന്റെ പാഠപുസ്തകങ്ങൾ അച്ചടിക്കുന്നില്ല. അടിസ്ഥാനപരമായി മോഡുലർ 3 ന്റെ ഏക കോർപ്പറേറ്റ് പിന്തുണക്കാരൻ എൽഗോ സോഫ്റ്റ്വേർ സൊല്യൂഷൻസ് GmbH ആണ്, ഇത് ക്രിട്ടിക്കൽ മാസ്സിന്റെ ഉറവിടങ്ങളിൽ നിന്ന് പാരമ്പര്യമായി കൈമാറ്റം ചെയ്യപ്പെടുകയും, അവയിൽ നിന്നും സിംഎം3 (CM3) സംവിധാനത്തിന്റെ സ്രോതസ്സും ബൈനറി രൂപവും പുറത്തിറക്കിയിട്ടുണ്ട്. റിയാക്റ്റർ ഐഡിഇ(IDE)യ്ക്ക് നിരവധി വർഷങ്ങൾക്ക് ശേഷം ഓപ്പൺ സോഴ്സ് റിലീസ് ചെയ്തു, അതിന്റെ പുതിയ പേര് സിഎം3-ഐഡിഇ(CM3-IDE). 2002 മാർച്ചിൽ എൽഗോ മറ്റൊരു സജീവ മോഡുല-3 വിതരണത്തിന്റെ റിപ്പോസിറ്ററിയും ഏറ്റെടുത്തു, എകോളെ പോളിടെക്കനിക് ഡെ മോൺട്രിയൽ( École Polytechnique de Montréal) ആണ് പിഎം3(PM3) പരിപാലിച്ചുപോന്നത്, എന്നാൽ പിന്നീട് എച്ച്എം3(HM3)യിൽ തുടർന്നുവന്ന പ്രവർത്തനങ്ങൾ പിന്നീട് കാലഹരണപ്പെട്ടു.
ഭാഷയുടെ വാക്യഘടനയുടെ ഒരു പൊതു ഉദാഹരണമാണ് ഹലോ വേൾഡ് പ്രോഗ്രാം.
MODULE Main;
IMPORT IO;
BEGIN
IO.Put("Hello World\n")
END Main.
മോഡുല-3 യിലെ എല്ലാ പ്രോഗ്രാമുകളും ചുരുങ്ങിയത് ഒരു മൊഡ്യൂൾ ഫയലുകളാണെങ്കിലും, മിക്ക ഘടകങ്ങളും മൊഡ്യൂളിൽ നിന്ന് ഡാറ്റാ ആക്സസ് ചെയ്യുന്നതിന് ക്ലയന്റുകൾ ഉപയോഗിക്കുന്ന ഒരു ഇന്റർഫേസ് ഫയൽ ഉൾക്കൊള്ളുന്നു. മറ്റ് ഭാഷകളെ പോലെ മോഡുല-3 പ്രോഗ്രാമിൽ പ്രധാന മൊഡ്യൂൾ എക്സ്പോർട്ട് ചെയ്യണം, അതിന് Main.m3 എന്ന ഫയൽ, അല്ലെങ്കിൽ EXPORT
ഫയൽ വഴി വിളിക്കാം.
MODULE Foo EXPORTS Main
മൊഡ്യൂൾ ഫയൽ നാമങ്ങൾ യഥാർത്ഥ മൊഡ്യൂൾ നാമം പോലെ തന്നെ നിർദ്ദേശിക്കപ്പെട്ടിരിക്കുന്നു, പക്ഷേ, അവ വ്യത്യസ്തമാണെങ്കിൽ കമ്പൈലർ നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകും. സിന്റാക്സിലെ മറ്റ് കൺവെൻഷനുകൾ, ഒരു ഇന്റർഫെയിസ് T
എക്സ്പോർട്ട് ചെയ്തതിന്റെ പേരു് നൽകി, അവയുടെ മുഴനീള നാമങ്ങൾ സാധാരണയായി യോഗ്യതയുള്ളതാണ്, അതിനാൽ ഫൂ എന്ന ഒരു മൊഡ്യൂളിൽ ചെയ്യുന്ന ടൈപ്പിന് Foo.T
എന്ന് നൽകും. സമാനമായ മറ്റൊരു കൺവെൻഷൻ പബ്ലിക്ക് ഒബജക്ടിനെ സൂചിപ്പിക്കുന്നതിനാണ് മുകളിൽ ഊപ്പ് (OOP) ഉദാഹരണങ്ങളിൽ public
നൽകിയിരിക്കുന്നത്.
ഒന്നാമതായി, എല്ലാ സമാഹാര യൂണിറ്റുകളും ഒന്നുകിൽ INTERFACE
അല്ലെങ്കിൽ നടപ്പിലാക്കുന്ന MODULE
s, ഒരു ഫ്ലേവറോ അല്ലെങ്കിൽ മറ്റൊന്നോ ആണ്. INTERFACE
എന്ന കീവേഡിനൊപ്പം ഒരു ആമുഖ സമാഹാര യൂണിറ്റ്, കോൺടെന്ററുകൾ, തരങ്ങൾ, വേരിയബിളുകൾ, ഒഴിവാക്കലുകൾ, നടപടിക്രമങ്ങൾ എന്നിവ നിർവ്വചിക്കുന്നു. കീവേഡ് MODULE
ഉപയോഗിച്ച് ആരംഭിക്കുന്ന നടപ്പിലാക്കൽ ഘടകം, ഇന്റർഫേസ് നടപ്പിലാക്കാൻ ആവശ്യമായ യഥാർത്ഥ കോഡ്, കൂടുതൽ സ്ഥിരാങ്കങ്ങൾ, തരങ്ങൾ അല്ലെങ്കിൽ വേരിയബിളുകൾ നൽകുന്നു. ഡിഫാൾട്ട് ആയി ഒരു ഇംപ്ലിമെൻറ് ഘടകം ഇതേ പേരിലുള്ള ഇന്റർഫെയിസ് നടപ്പിലാക്കും, പക്ഷേ ഒരു മൊഡ്യൂൾ അതേ പേരിൽ EXPORT
ലേക്ക് നൽകാനാവില്ല. ഉദാഹരണത്തിനു് പ്രധാന ഇന്റർഫെയിസിനുള്ള ഒരു പ്രധാന പ്രോഗ്രാം ഇംമ്പ്ലിമെന്റേഷൻ മോഡൂൾ എക്സ്പോർട്ട് ചെയ്യുന്നു.
MODULE HelloWorld EXPORTS Main;
IMPORT IO;
BEGIN
IO.Put("Hello World\n")
END HelloWorld.
ഏതെങ്കിലും സമാഹാര യൂണിറ്റ് IMPORT
ലേക്ക് മറ്റ് ഇന്റർഫേസുകൾക്ക് മുൻഗണന നൽകും, സർക്കുലർ ഇംപോർട്ട് നിരോധിച്ചിട്ടുണ്ട്. ഇംപ്ലിമെൻറ് MODULE
ൽ നിന്ന് ഇറക്കുമതി ചെയ്തുകൊണ്ട് ഇത് പരിഹരിക്കപ്പെടാം. ഇറക്കുമതി ചെയ്ത മൊഡ്യൂളിലെ എന്റിറ്റികൾ, മൊഡ്യൂൾ പേരിന് പകരം, മൊഡ്യൂൾ IMPORT
ഇനം ഉപയോഗിച്ചു [, ഇനം] * സിന്റാക്സ്:
MODULE HelloWorld EXPORTS Main;
FROM IO IMPORT Put;
BEGIN
Put("Hello World\n")
END HelloWorld.
സാധാരണ, ഒരു ഇന്റർഫേസ് മാത്രമേ ഇറക്കുമതിചെയ്യുന്നുള്ളൂ, ഒപ്പം ഇന്റർഫേസിലെ ഇനങ്ങൾ ആക്സസ് ചെയ്യാൻ 'ഡോട്ട്' നോട്ടേഷൻ ഉപയോഗിക്കുന്നു (റെക്കോർഡിനുള്ളിൽ ഫീൽഡുകൾ ആക്സസ് ചെയ്യുന്നതിന് സമാനമാണ്). ഏതെങ്കിലും പിന്തുണാ പ്രക്രിയകൾക്കൊപ്പം ഒരു ഇന്റർഫെയിസ് ഓരോ ഡാറ്റാ ഘടനയും (റെക്കോഡ് അല്ലെങ്കിൽ ഒബ്ജക്റ്റ്) നിർവചിക്കുകയാണ് സാധാരണ ഉപയോഗം. ഇവിടെ പ്രധാന തരം 'T' എന്ന പേരിൽ ലഭിക്കും, myModule.T
ഉപയോഗിക്കുന്നു.
മൊഡ്യൂളിനുളളിൽ ഇറക്കുമതി ചെയ്യുന്ന ഘടകംക്കും മറ്റ് എന്റിറ്റികൾക്കും ഇടയിൽ ഒരു നെയിം കോളീഷൻ ഉണ്ടാകുകയാണെങ്കിൽ, കരുതൽ വാക്കായി AS
എന്നായിരിയ്ക്കണം, ഉദാഹരണത്തിന് IMPORT CollidingModule AS X;
ചില വിശേഷത സുരക്ഷിതമല്ലാത്തതായി കരുതപ്പെടുന്നു, അവിടെ കമ്പൈലർക്ക് തുടർന്നും ഫലമുണ്ടാവില്ല (ഉദാഹരണമായി, സി പ്രോഗ്രാമിങ് ഭാഷയിലേക്ക് ഇടപഴകുമ്പോൾ). INTERFACE
അല്ലെങ്കിൽMODULE
എന്നതിന് മുമ്പുള്ള UNSAFE
കീവേഡ്, ഭാഷയുടെ ചില നിമ്ന തല സവിശേഷതകൾ പ്രാപ്തമാക്കുന്നതിന് കംപൈലർ ഉപയോഗിച്ചേക്കാം. ഉദാഹരണത്തിന്, ഒരു സുരക്ഷിതമല്ലാത്ത ബിറ്റ്, ഒരു ഫ്ലോട്ടിംഗ് പോയിന്റ് REAL
നമ്പറിലേക്ക് ഒരു ഇൻസൈറ്റിന്റെ ബിറ്റുകൾ പകർത്താൻ LOOPHOLE
ഉപയോഗിച്ച് ഒരു സുരക്ഷിതമല്ലാത്ത പ്രവർത്തനം മറികടക്കുന്ന താണ്.
സുരക്ഷിതമല്ലാത്ത ഒരു മൊഡ്യൂൾ ഇറക്കുമതി ചെയ്യുന്ന ഒരു ഇന്റർഫേസ് തന്നെ സുരക്ഷിതമല്ലാത്തതായിരിക്കും. സുരക്ഷിതമായ ഇന്റർഫേസ് സുരക്ഷിതമല്ലാത്ത ഒരു നിർവ്വഹണ ഘടകം വഴി എക്സ്പോർട്ടുചെയ്യാം. ബാഹ്യ ലൈബ്രറികളിലേക്ക് ഇന്റർഫേസ് ചെയ്തപ്പോൾ, സാധാരണയായി ഉപയോഗിക്കുന്നത് രണ്ട് ഇൻറർഫേസുകൾ (ഒന്ന് സുരക്ഷിതമല്ലാത്തത്, മറ്റൊന്ന് സുരക്ഷിതം).
ഒരു സാധാരണ ഇന്റർഫെയിസും അതിനനുസരിച്ചുള്ള ജെനറിക്കൽ ഘടകവും,GENERIC
ഉള്ളINTERFACE
അല്ലെങ്കിൽMODULE
കീവേർഡ് പ്രിഫിക്സ്, കൂടാതെ ഫോർമൽ ആർഗ്യുമെന്റുകൾ മറ്റ് ഇൻറർഫേസുകളായി എടുക്കുകയും ചെയ്യുക. അതിനാൽ (സി ++ ടെംപ്ലേറ്റുകൾ പോലെ) അമൂർത്തമായ ഡാറ്റാ തരം എളുപ്പത്തിൽ നിർവചിക്കുകയും ഉപയോഗിക്കുകയും ചെയ്യാം. എന്നാൽ സി ++ ൽ നിന്ന് വ്യത്യസ്തമായി ഗ്രാനുലാരിറ്റി മോഡുൾ ലെവലാണ്. ഒരു ഇന്റർഫെയിസ് സാധാരണ ആർഗ്യുമെന്റായി സാധാരണ ഇന്റർഫെയിസ്, നടപ്പിലാക്കൽ മൊഡ്യൂളുകൾക്ക് കൈമാറുന്നു, കൂടാതെ കമ്പൈലർ കോൺക്രീറ്റ് മോഡ്യൂളുകൾ സൃഷ്ടിക്കും.
ഉദാഹരണത്തിനു്, ജനറിക് സ്റ്റാക്ക്(GenericStack )നിഷ്കർഷിയ്ക്കാനും, IntegerElem
പോലുള്ള ഇൻറർഫെയിസുകളുമായി ഇതു് ഇൻസ്റ്റാന്റിനേറ്റ്(instantiate) ചെയ്യാം. അല്ലെങ്കിൽ RealElem
അല്ലെങ്കിൽ ഒബ്ജക്റ്റുകളിൽ ഓരോ ഇന്റർഫെയിസുകളും, ജനറിക് മൊഡ്യൂളുകൾ ആവശ്യപ്പെടുന്ന വസ്തുക്കളെ നിർവചിക്കുന്നു. ശ്രദ്ധിക്കുക: അവർ INTEGER
, അല്ലെങ്കിൽ REAL
ഉപയോഗിക്കാൻ കഴിയില്ല, കാരണം അത് മൊഡ്യൂളുകൾ അല്ലാത്തതിനാൽ, ആർഗുമെന്റിനെ അടിസ്ഥാനമാക്കിയുള്ള മൊഡ്യൂളുകൾ ഉപയോഗിക്കുന്ന ജനറിക് സിസ്റ്റം ആണ്. താരതമ്യേന, ഒരു സി ++ ടെംപ്ലേറ്റിൽ, സ്പഷ്ടമായി മാത്രം ഉപയോഗിക്കേണ്ടതാണ്.
FILE: IntegerElem.i3
INTERFACE IntegerElem;
CONST Name = "Integer";
TYPE T = INTEGER;
PROCEDURE Format(x: T): TEXT;
PROCEDURE Scan(txt: TEXT; VAR x: T): BOOLEAN;
END IntegerElem.
FILE: GenericStack.ig
GENERIC INTERFACE GenericStack(Element);
(* Here Element.T is the type to be stored in the generic stack. *)
TYPE
T = Public OBJECT;
Public = OBJECT
METHODS
init(): TStack;
format(): TEXT;
isEmpty(): BOOLEAN;
count(): INTEGER;
push(elm: Element.T);
pop(VAR elem: Element.T): BOOLEAN;
END;
END GenericStack.
FILE: GenericStack.mg
GENERIC MODULE GenericStack(Element);
< ... generic implementation details... >
PROCEDURE Format(self: T): TEXT =
VAR
str: TEXT;
BEGIN
str := Element.Name & "Stack{";
FOR k := 0 TO self.n -1 DO
IF k > 0 THEN str := str & ", "; END;
str := str & Element.Format(self.arr[k]);
END;
str := str & "};";
RETURN str;
END Format;
< ... more generic implementation details... >
END GenericStack.
FILE: IntegerStack.i3
INTERFACE IntegerStack = GenericStack(IntegerElem) END IntegerStack.
FILE: IntegerStack.m3
MODULE IntegerStack = GenericStack(IntegerElem) END IntegerStack.
മറ്റ് ഭാഷകളിലെ 'ഉൾപ്പെടുത്തൽ' സവിശേഷതകളിൽ നിന്ന് വ്യത്യസ്തമായി ഏത് ഐഡന്റിഫയർ ആണെന്നും അത് എവിടെയാണ് ഉത്ഭവിച്ചതെന്ന് കണ്ടെത്താനാവും. ഒരു കമ്പൈലേഷൻ യൂണിറ്റ് ഒരു IMPORT
സ്റ്റേറ്റ്മെന്റ് ഉപയോഗിച്ച് മറ്റ് കംമ്പൈലേഷൻ വിഭാഗങ്ങളിൽ നിന്നുള്ള ഐഡന്റിഫയറുകൾ ഇറക്കുമതിചെയ്യണം. ഒരു റെക്കോർഡിലെ ഒരു ഫീൽഡ് ആക്സസ് ചെയ്യുമ്പോൾ ഉപയോഗിച്ചിരിക്കുന്ന അതേ 'ഡോട്ട്' നോട്ടേഷൻ പോലും ഗണനത്തിന് ഉപയോഗപ്പെടുത്തുന്നു.
INTERFACE A;
TYPE Color = {Black, Brown, Red, Orange, Yellow, Green, Blue, Violet, Gray, White};
END A;
MODULE B;
IMPORT A;
FROM A IMPORT Color;
VAR
aColor: A.Color; (* Uses the module name as a prefix *)
theColor: Color; (* Does not have the module name as a prefix *)
anotherColor: A.Color;
BEGIN
aColor := A.Color.Brown;
theColor := Color.Red;
anotherColor := Color.Orange; (* Can't simply use Orange *)
END B.
റൺടൈമിൽ ഡാറ്റ അനുവദിക്കുന്നതിനെ മോഡുല-3 പിന്തുണയ്ക്കുന്നു. TRACED
, UNTRACED
എന്നിവയ്ക്ക് അനുവദിച്ചിരിക്കുന്ന രണ്ട് തരത്തിലുള്ള മെമ്മറി ഉണ്ട്. ഗാർബേജ് കളക്ടർക്ക്(പ്രോസസ് ചെയ്യുമ്പോൾ മെമ്മറിയിൽ താൽക്കാലികമായി സൂക്ഷിച്ചിരിക്കുന്ന അനാവശ്യ ഡാറ്റ നീക്കം ചെയ്യുന്ന ഒരു പ്രോഗ്രാം.) ഇത് കാണാൻ കഴിയുമോ ഇല്ലയോ എന്ന വ്യത്യാസം ഉണ്ട്. ഈ ക്ലാസ് മെമ്മറിയിൽ ഒന്നിന്റെ ഡാറ്റ അനുവദിക്കുന്നതിനായി NEW ()
ഉപയോഗിക്കുന്നു. UNSAFE
മൊഡ്യൂളിലെ, DISPOSE
കണ്ടെത്താൻ കഴിയാത്ത സ്വതന്ത്ര മെമ്മറിയിൽ ലഭ്യമാണ്.
മോഡുല-3 യിൽ ഒബ്ജക്റ്റ് ഓറിയെന്റഡ് പ്രോഗ്രാമിംഗ് ടെക്നിക്കുകൾ ഉപയോഗിക്കാവുന്നതാണ്, എന്നാൽ അവയുടെ ഉപയോഗം ആവശ്യമില്ല. മോഡുല-3 (മൊഡ്യൂളുകൾ, ജനറിക്സുകൾ) യിൽ നൽകിയിരിക്കുന്ന മറ്റു പല സവിശേഷതകളും സാധാരണയായി ഒബ്ജക്റ്റ് ഓറിയന്റേഷന്റെ കഴിവു നേടാം.
ഒബ്ജക്റ്റ് പിന്തുണ മനഃപൂർവ്വം അതിന്റെ ഏറ്റവും ലളിതമായ രീതിയിൽ സൂക്ഷിച്ചിരിക്കുന്നു. OBJECT
പ്രഖ്യാപനത്തിലൂടെ ഒരു വസ്തു തരം (മറ്റ് ഒബ്ജക്റ്റ് ഓറിയെന്റഡ് ഭാഷകളിൽ "ക്ലാസ്" എന്നു പറയുന്നു) പ്രത്യേകിച്ച് ഒരു RECORD
ഡിക്ലറേഷൻ അതേ സിന്റാക്സ് ഉണ്ട്, ഒരു വസ്തു തരം ഒരു റഫറൻസ് തരം ആണെങ്കിലും, Modula-3 യിലെ RECORD
ഡുകൾ (സി ഭാഷയിലെ സ്ട്രറ്റ് പോലെയുള്ളവ) അല്ല. എക്സറ്റഡ് തരങ്ങൾ സാധാരണയായി ടി എന്ന് കൺവെൻഷൻ വഴിയാണ് സൂചിപ്പിക്കുന്നത്, കൂടാതെ രീതികളും ഡാറ്റയും വെളിപ്പെടുത്തുന്നതിന് ഒരു പ്രത്യേക "പൊതു" തരം സൃഷ്ടിക്കുക. ഉദാഹരണത്തിന്:
INTERFACE Person;
TYPE T <: Public;
Public = OBJECT
METHODS
getAge(): INTEGER;
init(name: TEXT; age: INTEGER): T;
END;
END Person.
ഇത് രണ്ട് തരങ്ങൾ, T
, PUBLIC
, എന്നിവ ഉപയോഗിച്ച് ഒരു ഇന്റർഫേസ് Person
നിർവചിക്കുന്നു, അത് രണ്ട് രീതികളുള്ള getAge (), init () എന്നീ ഒബ്ജക്റ്റുകളെ നിർവചിച്ചിരിക്കുന്നു. <:
ഓപ്പറേറ്റർ ഉപയോഗിക്കുമ്പോൾ, പൊതു ഉപയോഗത്തിന്റെ ഉപഘടകമായാണ് T
വരുന്നത്.
ഒരു പുതിയ Person.T
എന്ന വസ്തു സൃഷ്ടിക്കുന്നതിന്, നമ്മൾ നിർമ്മിച്ച NEW
എന്ന കോഡ് init ()
മെത്തേഡിലാണ് ഉപയോഗിക്കുന്നത്.
VAR jim := NEW(Person.T).init("Jim", 25);
Modula-3 യുടെ REVEAL
ഘടന ക്ലയന്റുകളിൽ നിന്ന് നിർദ്ദിഷ്ട വിശദാംശങ്ങൾ ഒളിപ്പിച്ചു വച്ച ആശയം ലളിതവും ശുദ്ധിയുള്ള വളരെ ശക്തമായ സംവിധാനം നൽകുന്നു, സ്വമേധയാ പല തലത്തിലുള്ള "മൈത്രി" നിലനിർത്തുന്നു. മുകളിൽ ഉള്ള ഉദാഹരണത്തിൽ വ്യക്തിയുടെ ഇൻറർഫേസ് പൂർണ്ണമായി നടപ്പിലാക്കാൻ ഞങ്ങൾ REVEAL
ഉപയോഗിക്കുന്നു.
MODULE Person;
REVEAL T = Public BRANDED
OBJECT
name: TEXT; (* These two variables *)
age: INTEGER; (* are private. *)
OVERRIDES
getAge := Age;
init := Init;
END;
PROCEDURE Age(self: T): INTEGER =
BEGIN
RETURN self.age;
END Age;
PROCEDURE Init(self: T; name: TEXT; age: INTEGER): T =
BEGIN
self.name := name;
self.age := age;
RETURN self;
END Init;
BEGIN
END Person.
BRANDED
കീവേഡിന്റെ ഉപയോഗം ശ്രദ്ധിക്കുക. "ബ്രാൻഡുകൾ" ആയ ഒബ്ജക്റ്റുകളെ ഘടനാപരമായ സമത്വം ഒഴിവാക്കാനായി അവയെ സവിശേഷമാക്കാൻ കഴിയുന്നതാണ്. BRANDED
ഒരു സ്ട്രിംഗിനെ ഒരു ആർഗുമെന്റ് എടുത്തേക്കാം, എന്നാൽ ഒഴിവാക്കുമ്പോൾ, നിങ്ങൾക്കായി ഒരു അദ്വിതീയ സ്ട്രിംഗ് സൃഷ്ടിക്കപ്പെടും.
ഒരു മൊഡ്യൂളിൽ നിന്ന് കർശനമായി യോഗ്യത നേടിയ, ബാഹ്യ ആവലംബങ്ങൾ ആവശ്യമുള്ള കുറച്ച് പ്രോഗ്രാമിംഗ് ഭാഷകളിലൊന്നാണ് മോഡുല-3, അതായത് മോഡുൾ A
യുടെ അവലംബം, ഒബജക്ട് x
ൽ നിന്ന് കയറ്റുമതി ചെയ്ത മോഡുൾB
ഫോം B.x
നിന്ന് എടുക്കേണ്ടതാണ്. ഒരു മൊഡ്യൂളിൽ നിന്ന് "എല്ലാ എക്സ്പോർട്ട് ചെയ്ത പേരുകളും" ഇറക്കുമതി ചെയ്യാൻ മോഡുല-3 യിൽ സാധ്യമല്ല.
നാമ യോഗ്യതയിൽ ഭാഷയുടെ ആവശ്യകതകൾ കാരണം മെത്തേഡ് ഓവർറൈഡിംഗ് മൂലം ഒരു ഇന്റർഫെയിസിലേക്ക് (ഏതെങ്കിലും ഇന്റർഫെയിസിൽ) പുതിയ പ്രഖ്യാപനങ്ങൾ ചേർക്കുന്നതിലൂടെ ഒരു വർക്ക് പ്രോഗ്രാമിനെ തകർക്കുവാൻ സാധ്യമല്ല. വൈരുദ്ധ്യങ്ങൾക്ക് പേരുനൽകുന്നതിനെ കുറിച്ച് യാതൊരു ആശങ്കയും കൂടാതെ, പ്രോഗ്രാമർമാർക്ക് വലിയ പ്രോഗ്രാമുകൾ ഒരേസമയം എഡിറ്റ് ചെയ്യുവാൻ ഇത് സഹായിക്കുന്നു. നിലവിലുള്ള പ്രോഗ്രാമുകളൊന്നും ഈ പ്രക്രിയയിൽ "ബ്രോക്കൺ" എന്നത്, ശക്തമായ അറിവുപയോഗിച്ച് കോർ ഭാഷാ ലൈബ്രറികൾ എഡിറ്റ് ചെയ്യുന്നത് സാധ്യമാക്കുന്നു.
ഒഴിവാക്കലുകൾ കൈകാര്യം ചെയ്യൽ TRY
... EXCEPT
എന്നിവ അടിസ്ഥാനമാക്കിയുള്ളതാണ് ബ്ലോക്ക് സിസ്റ്റം, അതിനു ശേഷം ഇത് പൊതുവായിത്തീർന്നു. ഡെൽഫി, പൈത്തൺ, സ്കാലാ, വിഷ്വൽ ബേസിക്.നെറ്റ് എന്നിവയിലെ ശ്രദ്ധേയമായ ഒഴിവാക്കലുകളോടെ മറ്റു ഭാഷകളിലും ഉപയോഗിക്കാത്ത ഒരു സവിശേഷത, EXCEPT
കൺസ്ട്രക്ടിൽ സ്വിച്ച് സ്റ്റേറ്റ്മെന്റ് നിർവചിച്ചിരിക്കുന്നു എന്നതാണ്. മോഡുല-3 LOOP... EXIT ... END
എന്നതിനെ പിന്തുണയ്ക്കുന്നു, EXIT
സംഭവിക്കുന്നത് വരെ ആ ലൂപ്പുകൾ നിർമ്മിക്കുന്നു, TRY... EXCEPT
ക്ലോസ്സിനുള്ളിൽ ലളിതമായ ലൂപ്പിന് സമാനമായ ഒരു ഘടന ലഭിക്കുന്നു.
ഭാഷ മൾട്ടി-ത്രെഡ്ഡിംഗിനെയും, ത്രെഡുകൾക്കിടയിലുള്ള സമന്വയിപ്പിക്കലിനെയും പിന്തുണയ്ക്കുന്നു. ഇവിടെ ത്രെഡ് എന്ന റൺടൈം ലൈബ്രറി (m3core) ഒരു സ്റ്റാൻഡേർഡ് മോഡ്യൂൾ ആണ്, മൾട്ടി-ത്രെഡ് ആപ്ലിക്കേഷനുകളുടെ ഉപയോഗം പിന്തുണയ്ക്കുന്നു. വാസ്തവത്തിൽ, മോഡുല-3 റൺടൈം ഗാർബേജ് ശേഖരണം പോലുള്ള ആന്തരിക പ്രവർത്തനങ്ങൾക്ക് ഒരു പ്രത്യേക ത്രെഡ് ഉപയോഗപ്പെടുത്താം. സാധ്യമായ കറപ്ക്ഷന്റെയോ റേസിന്റെയോ അവസ്ഥയോ ഉള്ള അവസരങ്ങളിൽ നിന്ന് ഒന്നിലധികം ത്രെഡുകൾ സിൻക്രൊണൈസ് ചെയ്യുന്നതിനും ഡാറ്റ ഘടനകൾ സംരക്ഷിക്കുന്നതിനും അന്തർനിർമ്മിത ഡാറ്റാ ഘടന MUTEX
ഉപയോഗിക്കുന്നു. LOCK
ഉം ബന്ധപ്പെട്ട UNLOCK
നിർദ്ദേശങ്ങളും, ഒരു MUTEX
ലോക്കുചെയ്യുക, അൺലോക്കുചെയ്യുക. MUTEX
ഒരു വസ്തുവാണ്, അതുപോലെ മറ്റു വസ്തുക്കൾ അതിൽ നിന്നും ഉദ്ഭവിച്ചേക്കാം. ഉദാഹരണത്തിനു്, libm3 ലൈബ്രറിയുടെ I / O ഭാഗത്ത്, റീഡേഴ്സും റൈറ്റേഴ്സും (Rd.T, and Wr.T)MUTEX
ൽ നിന്ന് വികസിപ്പിച്ചെടുക്കുകയും ബഫറുകൾ പോലെയുള്ള ഏതൊരു ആന്തരിക ഡാറ്റകൾ ആക്സസ് ചെയ്യുന്നതിനോ പരിഷ്ക്കരിക്കുന്നതിനോ സ്വയം പൂട്ടുന്നു.
ചുരുക്കത്തിൽ, ഭാഷാ സവിശേഷതകൾ താഴെ കൊടുക്കുന്നു:
ക്രമികമായ വികാസ സവിശേഷതകൾ രേഖപ്പെടുത്തപ്പെടുത്തി യിട്ടുള്ള അപൂർവ്വം ഭാഷകളിലൊന്നാണ് മോഡുല-3.
മോഡുല 3-ൽ സിസ്റ്റം പ്രോഗ്രാമിംഗിൽ, ഭാഷാ രൂപകൽപ്പനയിലെ നാല് പ്രധാന സൂചകങ്ങൾ വളരെയധികം ചർച്ച ചെയ്യപ്പെട്ടിട്ടുണ്ട്. ഈ വിഷയങ്ങൾ: അംഗവിധാനം സംബന്ധിച്ചത് vs. നാമ സമത്വം, ഉപടൈപ്പിങ് നിയമങ്ങൾ, സാമാന്യഗതമായ മൊഡ്യൂളുകൾ, കൂടാതെ READONLY
പോലുള്ള പരാമീറ്റർ മോഡുകൾ.
സി പ്രോഗ്രാമിങ് ഭാഷയ്ക്ക് തുടക്കം കുറിച്ച ഒരു പ്രവണത തുടരുന്നു. യഥാർത്ഥ പ്രോഗ്രാമുകൾ എഴുതാൻ ആവശ്യമായ നിരവധി സവിശേഷതകൾ ഭാഷാ നിർവ്വചനത്തിൽ നിന്നും വിട്ടുപോയി. അതിനുപകരം പല ഗുണനിലവാരമുള്ള ലൈബ്രറികളിലൂടെയും നൽകി. താഴെയുള്ള ഇന്റർഫെയിസുകളുടെ ഭൂരിഭാഗവും വിശദമായി പ്രതിപാദിച്ചിരിക്കുന്നു[4]
ഗുണനിലവാരമുള്ള ലൈബ്രറികൾ താഴെ പറയുന്ന സവിശേഷതകൾ നൽകുന്നു. ഇവയെ ഗുണനിലവാരമുള്ള ഇന്റർഫേസുകൾ എന്ന് വിളിക്കുന്നു, അവ (അവ നൽകേണ്ടതുണ്ട്) ഭാഷയിൽ ആവശ്യമുള്ളവയാണ്.
TEXT
കൾ എന്ന് വിളിക്കുന്നുMUTEX
, കൺഡിഷൻ വേരിയബിൾ, ത്രെഡ് പോസ് ചെയ്യൽ എന്നിവയുൾപ്പെടെ ത്രെഡിംഗുമായി ബന്ധപ്പെട്ട പ്രവർത്തനങ്ങൾ. ത്രെഡിംഗ് ലൈബ്രറി പ്രീ-എംപ്റ്റീവ് ത്രെഡുകൾ സ്വിച്ചിംഗ് നൽകുന്നുലഭ്യമായ ഇംമ്പ്ലിമെന്റേഷൻ നടപ്പിലാക്കിയ ചില ഇന്റർഫേസുകൾ, പക്ഷെ ആവശ്യമില്ല
സി(C)യിൽ ഉള്ളപോലെ, മോഡുല-3 യിൽ RD
, Wr
എന്ന് വിളിക്കുന്ന ലൈബ്രറികൾ വഴിയും ഇൻപുട്ട് / ഔട്ട്പുട്ട് (I / O) ലഭ്യമാണ്. ഗ്രിഗെൻ നെൽസൻ പുസ്തകരൂപത്തിൽ നൽകുന്ന ലൈബ്രറികളാണ് RD
,Wr
(യഥാക്രമം വായനക്കാരും എഴുത്തുകാരും) എന്നിവയടങ്ങിയ ഒബ്ജക്റ്റ് ഓറിയന്റഡ് ഡിസൈൻ. മോഡുല 3-യുടെ ഒരു രസകരമായ ഘടകം, ചില പ്രോഗ്രാമിങ് ഭാഷകളിലൊന്നാണ്, ലോക്ക് ചെയ്യുന്ന ബഗ്ഗുകൾ ഉൾപ്പെടെയുള്ള വിവിധ തരത്തിലുള്ള ബഗുകൾ അടങ്ങുന്ന പരമ്പരാഗത ലൈബ്രറികൾ ഔപചാരികമായി പരിശോധിച്ചുവരുന്നത്. ഇത് ലാർച്ച് / മോഡുല-3(Larch / Modula-3 )(Larch കുടുംബം കാണുക), [5] ഡെക്ക് സിസ്റ്റംസ്(DEC Systems) റിസേർച്ച് സെന്ററിൽ വിപുലീകരിച്ച സ്റ്റാറ്റിക് പരിശോധന [6] എന്നീ പ്രോജക്റ്റുകളുടെ കീഴിലായിരുന്നു.
നിരവധി കമ്പൈലറുകൾ ലഭ്യമാണ്, അവയിൽ മിക്കതും ഓപ്പൺ സോഴ്സാണ്.
മോഡുല-3 യിൽ നിന്ന് നഷ്ടപ്പെടാത്ത സി-ഡാറ്റ ഘടനകളുടെ ഏക വശം യൂണിയൻ തരം ആയതിനാൽ, എല്ലാ നിലവിലുള്ള മോഡുല-3 ആക്റ്റിവേഷനുകളും സി-ടൈപ്പ് ഡിസററേഷൻ ഓഫ് അറേ, സ്ട്രറ്റുകൾ എന്നിവയുമായി നല്ല ബൈനറി കോംപാറ്റിബിളിറ്റി ലഭ്യമാക്കുന്നു.
ഈ പുസ്തകങ്ങളൊന്നും അച്ചടിയിൽ ഇല്ലെങ്കിലും, ഉപയോഗിച്ചിരി ക്കുന്ന പകർപ്പുകൾ ലഭിക്കുന്നു, ചിലത് ഡിജിറ്റൽവത്കൃതമോ ഭാഗികമായോ ഡിജിറ്റൽവൽക്കരിക്കപ്പെട്ടവയോ, അവയുടെ ചില അധ്യായങ്ങൾ വെബിൽ നിന്ന് റിസേർച്ച് റിപ്പോർട്ടുകളായി ലഭിക്കത്തക്കതോ പിൻകാലമോ ആയതോ ആയ പതിപ്പുകളാണ്.
മോഡുല-3 യ്ക്ക് മുഖ്യധാര സ്റ്റാൻഡേർഡ് ലഭിച്ചില്ലെങ്കിലും, ഡി.ഇ.സി.-എസ്ആർസി എം 3 വിതരണത്തിന്റെ പല ഭാഗങ്ങളും ചെയ്തു. ഏറ്റവും സ്വാധീനമുള്ള ഭാഗം നെറ്റ്വർക്ക് ഒബ്ജക്ട്സ് ലൈബ്രറിയാണ്, ഇത് യഥാർത്ഥ നെറ്റ്വർക്ക് പ്രോട്ടോക്കോൾ ഉൾപ്പെടെ, ജാവയുടെ ആദ്യ ത്തെ ആർഎംഐ (RMI) നടപ്പിലാക്കലിന്റെ അടിസ്ഥാനമായി. CORBA സ്റ്റാൻഡേർഡിൽ നിന്നും SUN IIOP അടിസ്ഥാനമാക്കിയുള്ള പ്രോട്ടോക്കോളിലേക്ക് മാറ്റുമ്പോൾ, അത് ഉപേക്ഷിച്ചു. വിദൂര വസ്തുക്കളുടെ ശേഖരണങ്ങൾ ശേഖരിക്കുന്നതിനുള്ള രേഖകൾ ഇപ്പോഴും മോഡുല 3 നെറ്റ്വർക്ക് വസ്തുക്കൾക്കായി പ്രവർത്തിച്ചിട്ടുണ്ട്. [14] പൈഥനിലെ ക്ലാസ് മെക്കാനിസവും സി++, മോഡുല-3 എന്നിവയിൽ ക്ലാസ് മെക്കാനിസവും പ്രചോദിപ്പിച്ചിട്ടുണ്ട്. [15]