Bajt-kod

S Vikipedije, slobodne enciklopedije
(preusmereno sa Бајткод)

Bajt-kod, poznat i pod imenom p-kod (prenosivi kod) je vrsta skupa instrukcija namenjenih za efikasnije izvršenje operacija softverskog interpretatora. Za razliku od izvornih kodova koje ljudi mogu da čitaju, bajt-kod čini skup numeričkih kodova, konstanti i referenci (uglavnom su to numeričke adrese) koji šifriraju rezultate raščlanjavanja i semantičkih analiza stvari poput tipa, oblasti dejstva, kao i potprograma postojećih programa. Oni omogućavaju mnogo bolje preformanse od direktne interpretacije izvornog koda.

Naziv bajt-kod potiče od seta instrukcija koji sadrži operativni bajt u kojem su postavljeni raznovrsni parametri. Bajt-kod se u programskom jeziku može koristiti da bi se uprostila interpretacija, ili da bi se smanjila zavisnost hardvera ili operativnog sistema omogućavajući istom kodu da može da se pokrene na različitim platformama. Bajt-kod često može ili da obavlja ulogu virtualne mašine (interpretatora) ili da se ubaci u mašinski kod radi boljih performansi.

Pošto se instrukcije bajt-koda tehnološki obrađuju kroz softver, mogu biti kompleksni, i pored toga svakako zahtevaju tradicionalne instrukcije hardvera; virtualne stek mašine su vrlo česte, mada su izgrađene i virtualne mašine registraciju podataka.[1][2] Slično kao i kod objektnih datoteka, određeni delovi koda se smeštaju u različite fajlove, ali se zajedno aktiviraju prilikom izvršavanja operacija.

Izvršavanje[uredi | uredi izvor]

Bajt-kod program može da se izvrši raščlanjivanjem zapisa i direktnim izvršenje instrukcija, jednu po jednu. Ovakva vrsta bajt-kod interpretatora je veoma prenosiva. Neki sistemi, zvani dinamički prevodioci, ili "just-in-time"(JIT) prevodioci, prevode bajt-kod u mašinski jezik kad god je to potrebno u rantajmu: ovo pomaže virtualnoj mašini da poboljša hardver, a da se pri tome prenosivost bajt-koda ne gubi. Na primer, Java i Smalltalk kod je formatiran kao bajt-kod, pa ga (JIT) prevodilac može prevesti u mašinski kod pre aktiviranja. Ovo stvara blagi zastoj pre pokretanja programa, ali značajno povećava brzinu rada kada se uporedi sa direktnom interpretacijom izvornog koda.

Zbog ovog poboljšanja performansi, danas mnogi programski jezici pokreću svoje programe u dve etape, prvo prevode izvorni kod u bajt-kod i posle ubacuju bajt-kod u virtualnu mašinu. Ovde su virtuelne mašine bazirane na bajt-kodu, to su Java, Pajton, PHP,[3] Tcl i Fort (mada je Fortova virtuelna mašina malo drugačija, pa se i bajt-kodovi prevode na svojstven način). Programski jezici kao što su Perl i Ruby 1.8 koriste apstraktno sintaksno stablo kako bi raščlanili izvorni kod.

Nedavno su autori V8 [4] i Darta [5] zaključili da je bajt-kod neophodan ako želimo brzu i efikasnu VM implementaciju. Implementacija oba gore pomenuta jezika koriste direktno JIT prevođenje izvornog koda u mašinski kod bez korištenja bajt-koda.[6]

Primeri[uredi | uredi izvor]

>>> import dis #"dis" - Disassembler of Python byte code into mnemonics.
>>> dis.dis('print("Hello, World!")')
  1           0 LOAD_NAME                0 (print)
              2 LOAD_CONST               0 ('Hello, World!')
              4 CALL_FUNCTION            1
              6 RETURN_VALUE

Reference[uredi | uredi izvor]

  1. ^ The Implementation of Lua 5.0 involves a register-based virtual machine.
  2. ^ „Dalvik VM”. Arhivirano iz originala 18. 5. 2013. g. Pristupljeno 22. 11. 2015.  is register based
  3. ^ Although PHP opcodes are generated each time the program is launched, and are always interpreted and not Just-In-Time compiled
  4. ^ „Dynamic Machine Code Generation”. Google. 
  5. ^ Loitsch, Florian. „Why Not a Bytecode VM?”. Google. Arhivirano iz originala 12. 05. 2013. g. Pristupljeno 22. 11. 2015. 
  6. ^ „JavaScript myth: JavaScript needs a standard bytecode”. 
  7. ^ The Implementation of Icon and Unicon a Compendium
  8. ^ „The Implementation of the Icon Programming Language” (PDF). Arhivirano iz originala (PDF) 5. 3. 2016. g. Pristupljeno 22. 11. 2015. 
  9. ^ For the details refer to „United States Patent 6,973,644”. Arhivirano iz originala 05. 03. 2017. g. Pristupljeno 22. 11. 2015. 
  10. ^ For the details refer to „R Installation and Administration”.