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

С Википедије, слободне енциклопедије
Садржај обрисан Садржај додат
Autobot (разговор | доприноси)
м Уклањање сувишних унутрашњих веза
Autobot (разговор | доприноси)
м Разне исправке
Ред 9: Ред 9:


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


Због овог побољшања перформанси, данас многи програмски језици покрећу своје програме у две етапе, прво преводе изворни код у бајткод и после убацују бајткод у виртуалну машину. Овде су виртуелне машине базиране на бајткоду, то су Јава, [[Пајтон (програмски језик)|Пајтон]], [[PHP]],<ref>Although PHP opcodes are generated each time the program is launched, and are always interpreted and not Just-In-Time compiled</ref> [[Tcl|Тцл]] и [[Форт (програмски језик)|Форт]] (мада је [[Форт (програмски језик)|Фортова]] виртуелна машина мало другачија, па се и бајткодови преводе на својствен начин). Програмски језици као што су [[Перл (програмски језик)|Перл]] и [[Руби (програмски језик)|Рубy 1.8]] користе [[апстрактно синтаксно стабло]] како би расчланили изворни код.
Због овог побољшања перформанси, данас многи програмски језици покрећу своје програме у две етапе, прво преводе изворни код у бајткод и после убацују бајткод у виртуалну машину. Овде су виртуелне машине базиране на бајткоду, то су Јава, [[Пајтон (програмски језик)|Пајтон]], [[PHP]],<ref>Although PHP opcodes are generated each time the program is launched, and are always interpreted and not Just-In-Time compiled</ref> [[Tcl|Тцл]] и [[Форт (програмски језик)|Форт]] (мада је [[Форт (програмски језик)|Фортова]] виртуелна машина мало другачија, па се и бајткодови преводе на својствен начин). Програмски језици као што су [[Перл (програмски језик)|Перл]] и [[Руби (програмски језик)|Рубy 1.8]] користе [[апстрактно синтаксно стабло]] како би расчланили изворни код.
Ред 20: Ред 20:
*  [[BANCStar (програмски језик|BANCStar]], првобитно бајткод за прављење алата интерфејса али се већ користи као сопствени језик.
*  [[BANCStar (програмски језик|BANCStar]], првобитно бајткод за прављење алата интерфејса али се већ користи као сопствени језик.
* [[Беркли филтер пакет]]
* [[Беркли филтер пакет]]

* [[Библиотека инжењеринга бајткода]]
* [[Библиотека инжењеринга бајткода]]
* [[Јава виртуелна машина|Преводиоци од C до Јавине виртуелне машине]] 
* [[Јава виртуелна машина|Преводиоци од C до Јавине виртуелне машине]] 
* [[CLISP]] имплементација [[Common Lisp]]-а коришћена је само за превођење бајтокда већ много година; међутим, сада такође подржава превођење на матерњи код уз помоћ [[ГНУ муња|ГНУ муње]].
* [[CLISP]] имплементација [[Common Lisp]]-а коришћена је само за превођење бајтокда већ много година; међутим, сада такође подржава превођење на матерњи код уз помоћ [[ГНУ муња|ГНУ муње]].

* [[CMUCL]] и [[Scieneer Common Lisp]] имплементације Common Lisp-а могу преводити и на бајткод и на матерњи код; бајткод је много компактнији
* [[CMUCL]] и [[Scieneer Common Lisp]] имплементације Common Lisp-а могу преводити и на бајткод и на матерњи код; бајткод је много компактнији
* [[Common средњи Језик|Common средњи језик]] извршен је од стране [[CLR|рантајма Common језика]]. Користе га [[.NET Framework|Microsoft .NET]] језици као што је [[C Sharp|C#]].
* [[Common средњи Језик|Common средњи језик]] извршен је од стране [[CLR|рантајма Common језика]]. Користе га [[.NET Framework|Microsoft .NET]] језици као што је [[C Sharp|C#]].

* Далвик бајткод, дизајниран за [[Андроид (оперативни систем)|Андроид]] платформу, извршава се од стране [[Далвик (софтвер)|Далвик виртуалне машине.]]
* Далвик бајткод, дизајниран за [[Андроид (оперативни систем)|Андроид]] платформу, извршава се од стране [[Далвик (софтвер)|Далвик виртуалне машине.]]
* Дис бајткод, дизајниран од стране [[Инферно (оперативни систем)|Инферна (оперативног система)]], врши се од стране [[Дис виртуелна машина|Дис виртуелне машине]].
* Дис бајткод, дизајниран од стране [[Инферно (оперативни систем)|Инферна (оперативног система)]], врши се од стране [[Дис виртуелна машина|Дис виртуелне машине]].

* [[АјфелСтудио]] за [[Ајфел (програмски језик)|Ајфел програмски језик]]
* [[АјфелСтудио]] за [[Ајфел (програмски језик)|Ајфел програмски језик]]
* [[Амстердам комплет преводилаца|ЕМ]] - виртуелна машина Амстердам комплет преводилаца користи се као средњи компиловани језик и као и као модеран бајткод језик
* [[Амстердам комплет преводилаца|ЕМ]] - виртуелна машина Амстердам комплет преводилаца користи се као средњи компиловани језик и као и као модеран бајткод језик

* [[Емацс]] је текст едитор који се са већином својих функционалности спроводи у [[Специфичан дијалект|специфичном дијалекту]] [[Lisp|Лиспа]]. Ове карактеристике су преведене у бајткоду. Ова архитектура омогућава корисницима да прилагоде едитор са високим нивоом језика, који је након превођења у бајткод омогућава интер- вал разумну перформансу.
* [[Емацс]] је текст едитор који се са већином својих функционалности спроводи у [[Специфичан дијалект|специфичном дијалекту]] [[Lisp|Лиспа]]. Ове карактеристике су преведене у бајткоду. Ова архитектура омогућава корисницима да прилагоде едитор са високим нивоом језика, који је након превођења у бајткод омогућава интер- вал разумну перформансу.
* [[Embeddable Common Lisp]] имплементација Common Lisp-а може се превести у бајткод или у С код.
* [[Embeddable Common Lisp]] имплементација Common Lisp-а може се превести у бајткод или у С код.

* 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>[http://www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf The Implementation of the Icon Programming Language]</ref> користи [[З-Машина|З-Машину]] да своје софтверске апликације учини преношљивијим.
* [[Infocom]]<ref>[http://www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf The Implementation of the Icon Programming Language]</ref> користи [[З-Машина|З-Машину]] да своје софтверске апликације учини преношљивијим.
* [[Јава бајткод]], који се извршава од стране [[Јава виртуелна машина|Јава виртуелне машине]] 
* [[Јава бајткод]], који се извршава од стране [[Јава виртуелна машина|Јава виртуелне машине]] 
Ред 47: Ред 40:
** [[JMangler]]
** [[JMangler]]
* [[ВМНР]], модуларни бајткод преводилац и виртуелна машина
* [[ВМНР]], модуларни бајткод преводилац и виртуелна машина

* [[Lua|Луа]] користи бајткод виртуелну машину засновану на регистру.
* [[Lua|Луа]] користи бајткод виртуелну машину засновану на регистру.
* м код [[MATLAB]] програмског језика<ref>For the details refer to {{cite web | url = http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=6973644.PN.&OS=PN/6973644&RS=PN/6973644 | title=United States Patent 6,973,644}}</ref>
* м код [[MATLAB]] програмског језика<ref>For the details refer to {{cite web | url = http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=6973644.PN.&OS=PN/6973644&RS=PN/6973644 | title=United States Patent 6,973,644}}</ref>

* [[OCaml]] програмски језик опционо преводи на компактну бајткод форму.
* [[OCaml]] програмски језик опционо преводи на компактну бајткод форму.
* [[П-код машина|П-код]] [[УЦСД Паскала]] је имплементација програмског језика [[Паскал (програмски језик)|Паскал]]
* [[П-код машина|П-код]] [[УЦСД Паскала]] је имплементација програмског језика [[Паскал (програмски језик)|Паскал]]

* [[Папагај виртуелна машина]]
* [[Папагај виртуелна машина]]
* [[Pick BASIC]] такође се односи на Data BASIC или [[MultiValue BASIC]]
* [[Pick BASIC]] такође се односи на Data BASIC или [[MultiValue BASIC]]
* [[R (програмски језик)|Р окружење за статистичко рачунарство]] нуди бајткод преводиоца преко пакета преводиоца, сада стандардно са Р верзијом 2.13.0. Могуће је превести ову верзију Р тако да је базни и препоручени пакети имају предност од овога.<ref>For the details refer to {{cite web | url =http://cran.r-project.org/doc/manuals/R-admin.html#Byte_002dcompiler | title=R Installation and Administration}}</ref>
* [[R (програмски језик)|Р окружење за статистичко рачунарство]] нуди бајткод преводиоца преко пакета преводиоца, сада стандардно са Р верзијом 2.13.0. Могуће је превести ову верзију Р тако да је базни и препоручени пакети имају предност од овога.<ref>For the details refer to {{cite web | url =http://cran.r-project.org/doc/manuals/R-admin.html#Byte_002dcompiler | title=R Installation and Administration}}</ref>

* [[Шема 48]] имплементација Шеме користи бајткод интерпретатор
* [[Шема 48]] имплементација Шеме користи бајткод интерпретатор
* Бајткодови многих имплементација [[Smalltalk|Смалталка]] програмског језика
* Бајткодови многих имплементација [[Smalltalk|Смалталка]] програмског језика

* [[Спин (програмски језик)|Спин]] преводилац уграђен у [[микроконтролер]] [[Паралакс пропелер|пропелера]] [[Паралакс]]
* [[Спин (програмски језик)|Спин]] преводилац уграђен у [[микроконтролер]] [[Паралакс пропелер|пропелера]] [[Паралакс]]
* [[SWEET16]]
* [[SWEET16]]

* [[Tcl]]
* [[Tcl]]
* [[Visual FoxPro]] преводи на бајткод
* [[Visual FoxPro]] преводи на бајткод

* [[YARV]] и [[Rubinius]] за [[Руби (програмски језик)|Руби]].
* [[YARV]] и [[Rubinius]] за [[Руби (програмски језик)|Руби]].



Верзија на датум 1. фебруар 2016. у 06:03

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

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

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

Извршавање

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

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

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

Примери


Референце

  1. ^ The Implementation of Lua 5.0 involves a register-based virtual machine.
  2. ^ „Dalvik VM”.  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
  9. ^ For the details refer to „United States Patent 6,973,644”. 
  10. ^ For the details refer to „R Installation and Administration”.