ബൈറ്റ്കോഡ്
പ്രോഗ്രാം എക്സിക്യൂഷൻ |
---|
പൊതുവായ ആശയങ്ങൾ |
|
ടൈപ്പ്സ് ഓഫ് കോഡ് |
കംപലേഷൻ സ്ട്രാറ്റെജീസ് |
|
ശ്രദ്ധേയമായ റൺടൈമുകൾ |
|
ശ്രദ്ധേയമായ കംപൈലറുകളും ടൂൾചെയിനുകളും |
|
ബൈറ്റ്കോഡ് (പോർട്ടബിൾ കോഡ് അല്ലെങ്കിൽ പി-കോഡ് എന്നും അറിയപ്പെടുന്നു) ഒരു സോഫ്റ്റ്വെയർ ഇൻ്റർപ്രെട്ടറിൻ്റെ കാര്യക്ഷമമായ നിർവ്വഹണത്തിനായി രൂപകൽപ്പന ചെയ്തിരിക്കുന്ന ഇൻസ്ട്രക്ഷൻ സെറ്റിൻ്റെ ഒരു രൂപമാണ്. സോഴ്സ് കോഡിൻ്റെ കോംപാക്റ്റ്, പ്ലാറ്റ്ഫോം-ഇൻഡിപെൻഡന്റ് റെപ്രസന്റേഷനാണ്(വിവിധ ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളിലോ ഹാർഡ്വെയർ പ്ലാറ്റ്ഫോമുകളിലോ പ്രവർത്തിക്കാൻ കഴിയുന്ന സോഫ്റ്റ്വെയറാണ് പ്ലാറ്റ്ഫോം-ഇൻഡിപെൻഡൻ്റ്. ഈ സോഫ്റ്റ്വെയർ ഒരു നിർദ്ദിഷ്ട ഓപ്പറേറ്റിംഗ് സിസ്റ്റവുമായോ (വിൻഡോസ്, മാക്ഒഎസ്, അല്ലെങ്കിൽ ലിനക്സ് പോലുള്ളവ) അല്ലെങ്കിൽ ഒരു പ്രത്യേക തരം ഹാർഡ്വെയറുമായോ ബന്ധിപ്പിച്ചിട്ടില്ല എന്നാണ് ഇതിനർത്ഥം.) ബൈറ്റ്കോഡ്. ഇത് കംപൈലറുകൾ ജനറേറ്റ് ചെയ്യുകയും വെർച്വൽ മെഷീനുകൾ മനസ്സിലാക്കുകയും ചെയ്യുന്നു. ബൈറ്റ്കോഡ് ഉപയോഗിക്കുന്നതിലൂടെ, ഓരോ പ്ലാറ്റ്ഫോമിനും വീണ്ടും കംപൈൽ ചെയ്യാതെ തന്നെ വിവിധ സിസ്റ്റങ്ങളിൽ സോഫ്റ്റ്വെയർ എക്സിക്യൂട്ട് ചെയ്യാൻ കഴിയും. ഇത് പോർട്ടബിലിറ്റി, സുരക്ഷ, കാര്യക്ഷമത എന്നിവ വർദ്ധിപ്പിക്കുന്നു[1].
കമ്പ്യൂട്ടർ നിർദ്ദേശങ്ങൾ എഴുതുന്നതിനുള്ള ഒരു ലളിതമായ മാർഗമാണ് ബൈറ്റ്കോഡ്, അവിടെ ഓരോ പ്രവർത്തനവും ഒരു ചെറിയ സംഖ്യയായി (ഒരു ബൈറ്റ്) കോഡ് ചെയ്യുന്നു, ചിലപ്പോൾ അധിക വിശദാംശങ്ങളുമുണ്ട്. കോഡ് മാറ്റിയെഴുതാതെ തന്നെ ഏത് കമ്പ്യൂട്ടറിലും പ്രവർത്തിക്കാൻ ജാവ അല്ലെങ്കിൽ പൈത്തൺ പോലുള്ള പ്രോഗ്രാമുകളിൽ ഇത് ഉപയോഗിക്കുന്നു. കമ്പ്യൂട്ടറുകൾക്ക് മനസ്സിലാക്കാൻ കഴിയുന്ന ഒരു സാർവത്രിക ഭാഷയാണിത്. ബൈറ്റ്കോഡ് പോലുള്ള ഇൻ്റർമീഡിയറ്റ് റെപ്രസെന്റേഷനുകൾ കോഡ് ഇന്റർപ്രെട്ട് ചെയ്യാനും എക്സിക്യൂട്ട് ചെയ്യാനും എളുപ്പമാക്കുന്നതിന് വേണ്ടി പ്രോഗ്രാമിംഗിൽ ഉപയോഗിക്കുന്നു. നിർദ്ദിഷ്ട ഹാർഡ്വെയർ അല്ലെങ്കിൽ ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളെ ആശ്രയിക്കുന്നത് കുറയ്ക്കാൻ ബൈറ്റ്കോഡ് സഹായിക്കുന്നു, തന്മൂലം ഒരേ പ്രോഗ്രാമിനെ വ്യത്യസ്ത ഉപകരണങ്ങളിലും പ്ലാറ്റ്ഫോമുകളിലും പ്രവർത്തിക്കാൻ പ്രാപ്തമാക്കുന്നു. ബൈറ്റ്കോഡ് ഒരു വെർച്വൽ മെഷീൻ (ഒരു ഇൻ്റർപ്രെറ്റർ പോലെ) നേരിട്ട് എക്സിക്യൂട്ട് ചെയ്യാം അല്ലെങ്കിൽ വേഗത്തിലുള്ള പ്രകടനത്തിനായി മെഷീൻ കോഡിലേക്ക് കംപൈൽ ചെയ്യാം. ഈ ഫ്ലെക്സിബിലിറ്റി അതിനെ കാര്യക്ഷമവും വ്യത്യസ്ത സംവിധാനങ്ങളിലുടനീളം അനുയോജ്യവുമാക്കുന്നു.
സോഫ്റ്റ്വെയർ കൈകാര്യം ചെയ്യുന്ന ബൈറ്റ്കോഡ് നിർദ്ദേശങ്ങൾ വളരെ സങ്കീർണ്ണമാണെങ്കിലും പലപ്പോഴും ഹാർഡ്വെയർ നിർദ്ദേശങ്ങളോട് സാമ്യമുള്ളതാണ്. മിക്കവരും വെർച്വൽ സ്റ്റാക്ക് മെഷീനുകൾ ഉപയോഗിക്കുന്നു, എന്നിരുന്നാലും ചിലത് പെർഫോമൻസ് മികച്ചതാക്കുന്നതിനായി വെർച്വൽ രജിസ്റ്റർ മെഷീനുകളെ അടിസ്ഥാനമാക്കി പ്രവർത്തിക്കുന്നു[2][3]. ഒരു പ്രോഗ്രാമിൻ്റെ വ്യത്യസ്ത ഭാഗങ്ങൾ വെവ്വേറെ ഫയലുകളിൽ സംഭരിക്കാനും എക്സിക്യൂഷൻ സമയത്ത് ആവശ്യമുള്ളപ്പോൾ മാത്രം ലോഡ് ചെയ്യാനും കഴിയും. ഇത് മെമ്മറി സംരക്ഷിക്കുകയും മുഴുവൻ പ്രോഗ്രാമിനെയും ബാധിക്കാതെ ആ ഭാഗങ്ങളിൽ മാത്രം അപ്ഡേറ്റ് അനുവദിക്കുകയും ചെയ്യുന്നു.
നിർവ്വഹണം
[തിരുത്തുക]നിർദ്ദേശങ്ങൾ ഓരോന്നായി വായിച്ച് നടപ്പിലാക്കുന്നതിലൂടെ ഒരു ബൈറ്റ്കോഡ് പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കാൻ കഴിയും, ഇത് ഒരു ബൈറ്റ്കോഡ് ഇൻ്റർപ്രെട്ടർ വഴിയാണ് ചെയ്യുന്നത്. ഈ രീതി പ്രോഗ്രാമിനെ വളരെ പോർട്ടബിൾ(ബൈറ്റ്കോഡിൽ, പോർട്ടബിൾ എന്നാൽ ഒരേ ബൈറ്റ്കോഡിന് വ്യത്യസ്ത കമ്പ്യൂട്ടർ സിസ്റ്റങ്ങളിൽ മാറ്റം വരുത്താതെ പ്രവർത്തിക്കാൻ കഴിയും എന്നാണ്. കാരണം, ബൈറ്റ്കോഡ് ഒരു പ്ലാറ്റ്ഫോം-ഇൻഡിപെൻഡന്റ് കോഡാണ്, അത് എക്സിക്യൂട്ട് ചെയ്യുന്നതിന് ഒരു ഇൻ്റർപ്രെറ്ററിനെ (ജാവ വെർച്വൽ മെഷീൻ പോലെ) ആശ്രയിക്കുന്നു, ഇത് ശരിയായ ഇൻ്റർപ്രെട്ടറുള്ള ഏത് സിസ്റ്റത്തിലും പ്രവർത്തിക്കാൻ അനുവദിക്കുന്നു.) ആക്കുന്നു, കാരണം ഒരേ ബൈറ്റ്കോഡിന് മാറ്റങ്ങളില്ലാതെ വ്യത്യസ്ത സിസ്റ്റങ്ങളിൽ പ്രവർത്തിക്കാൻ കഴിയും. ചില സിസ്റ്റങ്ങൾ, ഡൈനാമിക് ട്രാൻസ്ലേറ്ററുകൾ അല്ലെങ്കിൽ ജസ്റ്റ്-ഇൻ-ടൈം (ജെഐടി) കമ്പൈലറുകൾ എന്നറിയപ്പെടുന്നു, പ്രോഗ്രാം പ്രവർത്തിക്കുമ്പോൾ ബൈറ്റ്കോഡ് മെഷീൻ കോഡാക്കി മാറ്റുന്നു. വരി വരിയായി ഇന്റർപ്രെട്ട് ചെയ്യുന്നതിന് പകരം, ഹാർഡ്വെയറിൽ നേരിട്ട് പ്രവർത്തിപ്പിക്കുന്നതിനാൽ ഇത് പ്രോഗ്രാമിനെ വേഗത്തിൽ പ്രവർത്തിക്കാൻ അനുവദിക്കുന്നു. ഇതിനർത്ഥം വെർച്വൽ മെഷീൻ നിർദ്ദിഷ്ട ഹാർഡ്വെയറിന് അനുയോജ്യമാക്കാം, പക്ഷേ പ്രോഗ്രാം (ബൈറ്റ്കോഡ്) പോർട്ടബിൾ ആയി തുടരുകയും അനുയോജ്യമായ ഏത് വെർച്വൽ മെഷീനിലും പ്രവർത്തിക്കുകയും ചെയ്യും. ഉദാഹരണത്തിന്, ജാവയും സ്മോൾടോക്ക് കോഡും ഒരു ഇൻ്റർമീഡിയറ്റ് റെപ്രസന്റേഷൻ പോലെ പ്രവർത്തിക്കുന്ന ബൈറ്റ്കോഡായി സംഭരിക്കുന്നു. എക്സിക്യൂഷന് മുമ്പ്, ഒരു ജസ്റ്റ്-ഇൻ-ടൈം (ജെഐടി) കംപൈലർ ഈ ബൈറ്റ്കോഡിനെ നിർദ്ദിഷ്ട ഹാർഡ്വെയറിനായി ഒപ്റ്റിമൈസ് ചെയ്ത നേറ്റീവ് മെഷീൻ കോഡാക്കി മാറ്റുന്നു, ഇത് ക്രോസ്-പ്ലാറ്റ്ഫോം പോർട്ടബിലിറ്റി നിലനിർത്തിക്കൊണ്ട് കാര്യക്ഷമമായ നിർവ്വഹണത്തിന് അനുവദിക്കുന്നു. ഒരു പ്രോഗ്രാം ആരംഭിക്കുന്നതിന് മുമ്പ് ഒരു ചെറിയ കാത്തിരിപ്പുണ്ട്, കാരണം അത് കമ്പ്യൂട്ടറിന് മനസ്സിലാകുന്ന രൂപത്തിലേക്ക് പരിവർത്തനം ചെയ്യേണ്ടതുണ്ട്. ഈ കാത്തിരിപ്പ് പ്രോഗ്രാമിനെ ഒറിജിനൽ കോഡിൽ നിന്ന് നേരിട്ട് വരി വരിയായി വായിക്കുന്നതിനേക്കാൾ 10 മടങ്ങ് വേഗത്തിൽ പ്രവർത്തിപ്പിക്കുന്നു[4].
അതിൻ്റെ പ്രകടനത്തിലുണ്ടാകുന്ന നേട്ടം കാരണം, ഇന്ന് പല ഭാഷകളും നിർവഹണം നടത്തുന്നതിനായി രണ്ട് ഘട്ടങ്ങളിലായി ഒരു പ്രോഗ്രാം എക്സിക്യൂട്ട് ചെയ്യുന്നു, ആദ്യം സോഴ്സ് കോഡ് ബൈറ്റ്കോഡിലേക്ക് കംപൈൽ ചെയ്യുന്നു, തുടർന്ന് ബൈറ്റ്കോഡ് വെർച്വൽ മെഷീനിലേക്ക് കൈമാറുന്നു. ജാവ, റാക്കു(Raku), പൈത്തൺ, പിഎച്ച്പി, ടിസിഎൽ(Tcl), മാവ്ക്(mawk), ഫോർത്ത്(Forth) തുടങ്ങിയ നിരവധി ഭാഷകൾക്കായി ബൈറ്റ്കോഡ് അടിസ്ഥാനമാക്കിയുള്ള വെർച്വൽ മെഷീനുകളുണ്ട്. വ്യത്യസ്ത കമ്പ്യൂട്ടറുകളിൽ പ്രോഗ്രാമുകൾ സ്ഥിരമായും വേഗത്തിലും പ്രവർത്തിക്കുന്നുവെന്ന് ഉറപ്പാക്കാൻ മിക്ക ഭാഷകളും ബൈറ്റ്കോഡ് ഉപയോഗിക്കുന്നു. എന്നിരുന്നാലും, ഫോർത്ത് ബൈറ്റ്കോഡിനെ അധികം ആശ്രയിക്കുന്നില്ല; അതിൻ്റെ വെർച്വൽ മെഷീൻ കൂടുതൽ വഴക്കമുള്ളതും വിശാലമായ നിർദ്ദേശങ്ങൾ കൈകാര്യം ചെയ്യുന്നതുമാണ്. ഇതിനർത്ഥം ഫോർത്ത് എല്ലാ കമ്പ്യൂട്ടറുകളിലും പ്രോഗ്രാമുകൾ ഒരേപോലെയാക്കുന്നതിലും വ്യത്യസ്ത ജോലികൾക്കായി വഴങ്ങുന്നതിലും കൂടുതൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു. പേൾ, റൂബി 1.8 എന്നിവ ബൈറ്റ്കോഡ് ഉപയോഗിക്കുന്നില്ല. പകരം, ഈ ഭാഷകൾ ഒരു അബ്സ്ട്രാക്റ്റ് സിൻ്റാക്സ് ട്രീ (ഒരു പ്രോഗ്രാമിൻ്റെ ലോജിക്കൽ ഫ്ലോയെയും ഘടകങ്ങളെയും പ്രതിനിധീകരിക്കുന്ന ഒരു ലളിതമായ, ട്രീ പോലെയുള്ള ഘടനയാണ് അബ്സ്ട്രാക്റ്റ് സിൻ്റാക്സ് ട്രീ (AST). ഒരു കമ്പ്യൂട്ടറിന് മനസ്സിലാക്കാനും പ്രോസസ്സ് ചെയ്യാനും എളുപ്പമുള്ള വിധത്തിൽ ഇത് കോഡിനെ ഓപ്പറേഷനുകൾ, എക്സ്പ്രഷനുകൾ, പ്രസ്താവനകൾ എന്നിങ്ങനെയുള്ള ഘടകങ്ങളായി വിഭജിക്കുന്നു. വൃക്ഷത്തിൻ്റെ ഓരോ "ശാഖയെയും" പോലെ കോഡിൻ്റെ വിവിധ ഭാഗങ്ങൾ പരസ്പരം എങ്ങനെ ബന്ധപ്പെട്ടിരിക്കുന്നുവെന്ന് കാണിക്കുന്നു, ഇത് മൂലം ഒരു പ്രോഗ്രാമിംഗ് ഭാഷയ്ക്ക് കോഡ് ഇന്റർപ്രെട്ട് ചെയ്യുന്നതിനോ കംപൈൽ ചെയ്യുന്നതിനോ ഉള്ള പ്രവർത്തി ലളിതമാക്കുന്നു.) നേരിട്ട് പ്രോസസ്സ് ചെയ്തുകൊണ്ട് പ്രോഗ്രാമുകൾ പ്രവർത്തിപ്പിക്കുന്നു, അത് അതിൻ്റെ ലോജിക്കൽ ഫ്ലോയെയും ഘടനയെയും പ്രതിനിധീകരിക്കുന്ന യഥാർത്ഥ കോഡിൻ്റെ ഘടനാപരമായ പതിപ്പാണ്.
വി8, ഡാർട്ട് (ഗൂഗിളിൻ്റെ പ്രോഗ്രാമിംഗ് ഭാഷ) എന്നിവയുടെ സ്രഷ്ടാക്കൾ, വേഗതയേറിയ വെർച്ച്വൽ മെഷീന്റെ പ്രകടനത്തിന് ഇൻ്റർമീഡിയറ്റ് ബൈറ്റ്കോഡ് അത്യാവശ്യമല്ലെന്ന് കാണിച്ചുതന്നു. രണ്ട് സിസ്റ്റങ്ങളും ജസ്റ്റ്-ഇൻ-ടൈം (ജെഐടി) കംപൈലേഷൻ ഉപയോഗിച്ച് മെഷീൻ കോഡിലേക്ക് സോഴ്സ് കോഡ് നേരിട്ട് കംപൈൽ ചെയ്യുന്നു, അങ്ങനെ ബൈറ്റ്കോഡ് ഘട്ടം ഒഴിവാക്കുന്നു. ഈ സമീപനം മൂലം ഓവർഹെഡ് കുറയ്ക്കുകയും നിർവ്വഹണ(execution) പ്രക്രിയ ലളിതമാക്കുകയും ചെയ്യുന്നു[5].
അവലംബം
[തിരുത്തുക]- ↑ "Dynamic Machine Code Generation". Google Inc. Archived from the original on 2017-03-05. Retrieved 2023-02-21.
- ↑ "The Implementation of Lua 5.0". (NB. This involves a register-based virtual machine.)
- ↑ "Dalvik VM". Archived from the original on 2013-05-18. Retrieved 2012-10-29. (NB. This VM is register based.)
- ↑ "Byte Code Vs Machine Code". www.allaboutcomputing.net. Retrieved 2017-10-23.
- ↑ Loitsch, Florian. "Why Not a Bytecode VM?". Google. Archived from the original on 2013-05-12.