Бајт-код — разлика између измена

С Википедије, слободне енциклопедије
Садржај обрисан Садржај додат
Autobot (разговор | доприноси)
м Разне исправке
м .
Ред 5: Ред 5:
Назив бајткод потиче од сета инструкција који садржи [[Опкод|оперативни]] [[бајт]] у којем су постављени разноврсни параметри. Бајткод се у [[Програмски језик|програмском језику]] може користити да би се упростила [[Интерпретатор (рачунарство)|интерпретација]], или да би се смањила зависност хардвера или [[Оперативни систем|оперативног система]] омогућавајући истом коду да може да се покрене на различитим платформама. Бајткод често може или да обавља улогу [[Виртуелна машина|виртуалне машине]] (интерпретатора) или да се убаци у [[машински код]] ради бољих перформанси.
Назив бајткод потиче од сета инструкција који садржи [[Опкод|оперативни]] [[бајт]] у којем су постављени разноврсни параметри. Бајткод се у [[Програмски језик|програмском језику]] може користити да би се упростила [[Интерпретатор (рачунарство)|интерпретација]], или да би се смањила зависност хардвера или [[Оперативни систем|оперативног система]] омогућавајући истом коду да може да се покрене на различитим платформама. Бајткод често може или да обавља улогу [[Виртуелна машина|виртуалне машине]] (интерпретатора) или да се убаци у [[машински код]] ради бољих перформанси.


Пошто се инструкције бајткода технолошки обрађују кроз софтвер, могу бити комплексни, и поред тога свакако захтевају традиционалне инструкције хардвера; виртуалне [[Стек машина|стек машине]] су врло честе, мада су изграђене и виртуалне машине [[Машина регистар|регистрацију података]].<ref>[http://www.jucs.org/jucs_11_7/the_implementation_of_lua/jucs_11_7_1159_1176_defigueiredo.html The Implementation of Lua 5.0] involves a register-based virtual machine.</ref><ref>{{Cite web|title=Dalvik VM|url = http://source.android.com/tech/dalvik/dalvik-bytecode.html|accessdate=22. 11. 2015|archive-url = https://web.archive.org/web/20130518021154/http://source.android.com/tech/dalvik/dalvik-bytecode.html|archive-date=18. 5. 2013|dead-url = yes|df = }} is register based</ref> Слично као и код [[Објекат (фајл)|објектних датотека]], одређени делови кода се смештају у различите фајлове, али се заједно активирају приликом извршавања операција.
Пошто се инструкције бајткода технолошки обрађују кроз софтвер, могу бити комплексни, и поред тога свакако захтевају традиционалне инструкције хардвера; виртуалне [[Стек машина|стек машине]] су врло честе, мада су изграђене и виртуалне машине [[Машина регистар|регистрацију података]].<ref>[http://www.jucs.org/jucs_11_7/the_implementation_of_lua/jucs_11_7_1159_1176_defigueiredo.html The Implementation of Lua 5.0] involves a register-based virtual machine.</ref><ref>{{Cite web|title=Dalvik VM|url = http://source.android.com/tech/dalvik/dalvik-bytecode.html|accessdate=22. 11. 2015|archive-url = https://web.archive.org/web/20130518021154/http://source.android.com/tech/dalvik/dalvik-bytecode.html|archive-date=18. 5. 2013|url-status=dead|df = }} is register based</ref> Слично као и код [[Објекат (фајл)|објектних датотека]], одређени делови кода се смештају у различите фајлове, али се заједно активирају приликом извршавања операција.


== Извршавање ==
== Извршавање ==
Ред 40: Ред 40:
* Ericsson имплементација [[Erlang (програмски језик)|Erlang]]-а користи [[BEAM бајткод]]
* Ericsson имплементација [[Erlang (програмски језик)|Erlang]]-а користи [[BEAM бајткод]]
* [[Icon (програмски језик)|Icon]] и [[Unicon (програмски језик)|Unicon]]<ref>[http://unicon.sourceforge.net/book/ib.pdf The Implementation of Icon and Unicon a Compendium]</ref> програмски језици
* [[Icon (програмски језик)|Icon]] и [[Unicon (програмски језик)|Unicon]]<ref>[http://unicon.sourceforge.net/book/ib.pdf The Implementation of Icon and Unicon a Compendium]</ref> програмски језици
* [[Infocom]]<ref>{{Cite web|url=http://www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf |title=The Implementation of the Icon Programming Language |accessdate=22. 11. 2015 |archive-url=https://web.archive.org/web/20160305123148/http://www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf |archive-date=5. 3. 2016 |dead-url=yes }}</ref> користи [[З-Машина|З-Машину]] да своје софтверске апликације учини преношљивијим.
* [[Infocom]]<ref>{{Cite web|url=http://www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf |title=The Implementation of the Icon Programming Language |accessdate=22. 11. 2015 |archive-url=https://web.archive.org/web/20160305123148/http://www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf |archive-date=5. 3. 2016 |url-status=dead }}</ref> користи [[З-Машина|З-Машину]] да своје софтверске апликације учини преношљивијим.
* [[Јава бајткод]], који се извршава од стране [[Јава виртуелна машина|Јава виртуелне машине]] 
* [[Јава бајткод]], који се извршава од стране [[Јава виртуелна машина|Јава виртуелне машине]] 
** [[ASM]]
** [[ASM]]

Верзија на датум 27. септембар 2019. у 14:32

Бајткод, познат и под именом п-код (преносиви код), је врста скупа инструкција намењених за ефикасније извршење операција софтверског интерпретатора. За разлику од изворних кодова које људи могу да читају, бајткод чини скуп нумеричких кодова, константи и референци (углавном су то нумеричке адресе) који шифрирају резултате рашчлањавања и семантичких анализа ствари попут типа, области дејства, као и потпрограма постојећих програма. Они омогућавају много боље преформансе од директне интерпретације изворног кода.

Назив бајткод потиче од сета инструкција који садржи оперативни бајт у којем су постављени разноврсни параметри. Бајткод се у програмском језику може користити да би се упростила интерпретација, или да би се смањила зависност хардвера или оперативног система омогућавајући истом коду да може да се покрене на различитим платформама. Бајткод често може или да обавља улогу виртуалне машине (интерпретатора) или да се убаци у машински код ради бољих перформанси.

Пошто се инструкције бајткода технолошки обрађују кроз софтвер, могу бити комплексни, и поред тога свакако захтевају традиционалне инструкције хардвера; виртуалне стек машине су врло честе, мада су изграђене и виртуалне машине регистрацију података.[1][2] Слично као и код објектних датотека, одређени делови кода се смештају у различите фајлове, али се заједно активирају приликом извршавања операција.

Извршавање

Бајткод програм може да се изврши рашчлањивањем записа и директним извршење инструкција, једну по једну. Оваква врста бајткод интерпретатора је веома преносива. Неки системи, звани динамички преводиоци, или "just-in-time"(ЈИТ) преводиоци, преводе бајткод у машински језик кад год је то потребно у рантајму: ово помаже виртуалној машини да побољша хардвер, а да се при томе преносивост бајткода не губи. На пример, Јава и Smalltalk код је форматиран као бајткод, па га (ЈИТ) преводилац може превести у машински код пре активирања. Ово ствара благи застој пре покретања програма, али значајно повећава брзину рада када се упореди са директном интерпретацијом изворног кода.

Због овог побољшања перформанси, данас многи програмски језици покрећу своје програме у две етапе, прво преводе изворни код у бајткод и после убацују бајткод у виртуалну машину. Овде су виртуелне машине базиране на бајткоду, то су Јава, Пајтон, PHP,[3] Тцл и Форт (мада је Фортова виртуелна машина мало другачија, па се и бајткодови преводе на својствен начин). Програмски језици као што су Перл и Рубy 1.8 користе апстрактно синтаксно стабло како би расчланили изворни код.

Недавно су аутори В8 [4] и Дарта [5] закључили да је бајткод неопходан ако желимо брзу и ефикасну ВМ имплементацију. Имплементација оба горе поменута језика користе директно ЈИТ превођење изворног кода у машински код без кориштења бајткода.[6]

Примери

>>> 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

Референце

  1. ^ The Implementation of Lua 5.0 involves a register-based virtual machine.
  2. ^ „Dalvik VM”. Архивирано из оригинала 18. 5. 2013. г. Приступљено 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. 
  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). Архивирано из оригинала (PDF) 5. 3. 2016. г. Приступљено 22. 11. 2015. 
  9. ^ For the details refer to „United States Patent 6,973,644”. 
  10. ^ For the details refer to „R Installation and Administration”.