From Wikipedia, the free encyclopedia
Бајт-код, познат и под именом p-код (преносиви код) је врста скупа инструкција намењених за ефикасније извршење операција софтверског интерпретатора. За разлику од изворних кодова које људи могу да читају, бајт-код чини скуп нумеричких кодова, константи и референци (углавном су то нумеричке адресе) који шифрирају резултате рашчлањавања и семантичких анализа ствари попут типа, области дејства, као и потпрограма постојећих програма. Они омогућавају много боље преформансе од директне интерпретације изворног кода.
Назив бајт-код потиче од сета инструкција који садржи оперативни бајт у којем су постављени разноврсни параметри. Бајт-код се у програмском језику може користити да би се упростила интерпретација, или да би се смањила зависност хардвера или оперативног система омогућавајући истом коду да може да се покрене на различитим платформама. Бајт-код често може или да обавља улогу виртуалне машине (интерпретатора) или да се убаци у машински код ради бољих перформанси.
Пошто се инструкције бајт-кода технолошки обрађују кроз софтвер, могу бити комплексни, и поред тога свакако захтевају традиционалне инструкције хардвера; виртуалне стек машине су врло честе, мада су изграђене и виртуалне машине регистрацију података.[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
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.