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

27 бајтова додато ,  пре 1 године
нема резимеа измене
м (.)
{{Извршење програма}}
 
'''БајткодБајт-код''', познат и под именом ''''[[П код|пp-код]] ('''' (преносиви код'''), је врста [[Скуп инструкција|скупа инструкција]] намењених за ефикасније извршење операција софтверског [[Интерпретатор (рачунарство)|интерпретатора]]. За разлику од [[Изворни код|изворних кодова]] које [[Читљива средина|људи могу да читају]], бајткодбајт-код чини скуп нумеричких кодова, константи и референци (углавном су то нумеричке адресе) који шифрирају резултате рашчлањавања и [[Компилатор|семантичких анализа]] ствари попут типа, области дејства, као и потпрограма постојећих програма. Они омогућавају много боље преформансе од директне интерпретације изворног кода.
 
Назив бајткодбајт-код потиче од сета инструкција који садржи [[Опкод|оперативни]] [[бајт]] у којем су постављени разноврсни параметри. БајткодБајт-код се у [[Програмски језик|програмском језику]] може користити да би се упростила [[Интерпретатор (рачунарство)|интерпретација]], или да би се смањила зависност хардвера или [[Оперативни систем|оперативног система]] омогућавајући истом коду да може да се покрене на различитим платформама. БајткодБајт-код често може или да обавља улогу [[Виртуелна машина|виртуалне машине]] (интерпретатора) или да се убаци у [[машински код]] ради бољих перформанси.
 
Пошто се инструкције бајткодабајт-кода технолошки обрађују кроз софтвер, могу бити комплексни, и поред тога свакако захтевају традиционалне инструкције хардвера; виртуалне [[Стек машина|стек машине]] су врло честе, мада су изграђене и виртуалне машине [[Машина регистар|регистрацију података]].<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> Слично као и код [[Објекат (фајл)|објектних датотека]], одређени делови кода се смештају у различите фајлове, али се заједно активирају приликом извршавања операција.
 
== Извршавање ==
БајткодБајт-код програм може да се изврши рашчлањивањем записа и ''директним'' извршење инструкција, једну по једну. Оваква врста ''бајткодбајт-код интерпретатора'' је веома преносива. Неки системи, звани динамички преводиоци, или "[[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]] користе [[апстрактно синтаксно стабло]] како би расчланили изворни код.
 
Недавно су аутори [[V8 (JavaScript машина)|В8]] <ref>{{Cite web|title=Dynamic Machine Code Generation|url = https://developers.google.com/v8/design#mach_code|publisher = Google}}</ref> и [[Дарт (програмски језик)|Дарта]] <ref>{{Cite web|last=Loitsch|first = Florian|title = Why Not a Bytecode VM?|url = http://www.dartlang.org/articles/why-not-bytecode/|publisher = Google}}</ref> закључили да је бајткодбајт-код неопходан ако желимо брзу и ефикасну ВМ имплементацију. Имплементација оба горе поменута језика користе директно ЈИТ превођење изворног кода у машински код без кориштења бајткодабајт-кода.<ref>{{Cite web|title=JavaScript myth: JavaScript needs a standard bytecode|url = http://www.2ality.com/2012/01/bytecode-myth.html}}</ref>
 
== Примери ==
6 RETURN_VALUE
</source>
* [[Actionscript|ActionScript]] се извршава у ActionScript виртуелној машини (АВМ), која је део Flash Playerа и AIR. ActionScript код се типично претвара у бајткодбајт-код формат од стране [[Компилатор|преводиоца]]. Примери преводиоца укључују и онај који је направљен у  Adobe Flash Professional и онај који је направљен у Adobe Flash Builder и доступан у  the Adobe Flex SDK.
* [[Adobe Flash]] објекти
*  [[BANCStar (програмски језик|BANCStar]], првобитно бајткодбајт-код за прављење алата интерфејса али се већ користи као сопствени језик.
* [[Беркли филтер пакет]]
* [[Библиотека инжењеринга бајткодабајт-кода]]
* [[Јава виртуелна машина|Преводиоци од C до Јавине виртуелне машине]] 
* [[CLISP]] имплементација [[Common Lisp]]-а коришћена је само за превођење бајтокда већ много година; међутим, сада такође подржава превођење на матерњи код уз помоћ [[ГНУ муња|ГНУ муње]].
* [[CMUCL]] и [[Scieneer Common Lisp]] имплементације Common Lisp-а могу преводити и на бајткодбајт-код и на матерњи код; бајткодбајт-код је много компактнији
* [[Common средњи Језик|Common средњи језик]] извршен је од стране [[CLR|рантајма Common језика]]. Користе га [[.NET Framework|Microsoft .NET]] језици као што је [[C Sharp|C#]].
* Далвик бајткодбајт-код, дизајниран за [[Андроид (оперативни систем)|Андроид]] платформу, извршава се од стране [[Далвик (софтвер)|Далвик виртуалне машине.]]
* Дис бајткодбајт-код, дизајниран од стране [[Инферно (оперативни систем)|Инферна (оперативног система)]], врши се од стране [[Дис виртуелна машина|Дис виртуелне машине]].
* [[АјфелСтудио]] за [[Ајфел (програмски језик)|Ајфел програмски језик]]
* [[Амстердам комплет преводилаца|ЕМ]] - виртуелна машина Амстердам комплет преводилаца користи се као средњи компиловани језик и као и као модеран бајткодбајт-код језик
* [[Емацс]] је текст едитор који се са већином својих функционалности спроводи у [[Специфичан дијалект|специфичном дијалекту]] [[Lisp]]а. Ове карактеристике су преведене у бајткодубајт-коду. Ова архитектура омогућава корисницима да прилагоде едитор са високим нивоом језика, који је након превођења у бајткодбајт-код омогућава интер- вал разумну перформансу.
* [[Embeddable Common Lisp]] имплементација Common Lisp-а може се превести у бајткодбајт-код или у С код.
* 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> програмски језици
* [[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]]
** [[BCEL]]
** [[Javassist]]
** [[JMangler]]
* [[ВМНР]], модуларни бајткодбајт-код преводилац и виртуелна машина
* [[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>
* [[OCaml]] програмски језик опционо преводи на компактну бајткодбајт-код форму.
* [[П-код машина|П-код]] [[УЦСД Паскала]] је имплементација програмског језика [[Паскал (програмски језик)|Паскал]]
* [[Папагај виртуелна машина]]
* [[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>
* [[Шема 48]] имплементација Шеме користи бајткодбајт-код интерпретатор
* БајткодовиБајт-кодови многих имплементација [[Smalltalk]]а програмског језика
* [[Спин (програмски језик)|Спин]] преводилац уграђен у [[микроконтролер]] [[Паралакс пропелер|пропелера]] [[Паралакс]]
* [[SWEET16]]
* [[Tcl]]
* [[Visual FoxPro]] преводи на бајткодбајт-код
* [[YARV]] и [[Rubinius]] за [[Руби (програмски језик)|Руби]].