Байт-код

Байт-код або байтко́д (англ. byte-code), іноді також використовується термін псевдокод (не плутати з неформальним записом алгоритму) — машинонезалежний код низького рівня, що генерується транслятором і виконується інтерпретатором. Більшість інструкцій байт-коду еквівалентні одній або кільком командам Асемблера. Трансляція в байт-код займає проміжне положення між компіляцією в машинний код і інтерпретацією.

Байт-код називається так тому, що довжина кожного коду операції — один байт, але довжина коду команди різна. Кожна інструкція є однобайтовим кодом операції від 0 до 255, за яким розташовані такі параметри, як регістри або адреси пам'яті. Це в типовому випадку, але специфікація байт-коду значно відрізняється в мовах програмування.

Програма на байт-коді зазвичай виконується інтерпретатором байт-коду (його ще називають віртуальною машиною, оскільки він подібний до комп'ютера). Перевага — в портативності, тобто один і той самий байт-код може виконуватися на різних платформах і архітектурі — цю перевагу мають всі мови, що інтерпретуються. Проте, оскільки байт-код зазвичай є менш абстрактним, компактним і більш «комп'ютерним» ніж початковий код, ефективність байт-коду зазвичай вища, ніж чиста інтерпретація початкового коду, призначеного для правки людиною. З цієї причини багато сучасних інтерпретованих мов насправді транслюють в байт-код і запускають інтерпретатор байт-коду. До таких мов відносяться Perl, PHP і Python. Програми на Java зазвичай передаються на цільову машину у вигляді байт-коду, який перед виконання транслюється в машинний код «на льоту» — за допомогою JIT-компіляції. У стандарті відкритих завантажувачів Open Firmware фірми Sun Microsystems байт-код представляє оператори мови Forth.

Водночас можливе створення процесорів, для яких цей байт-код є безпосередньо машинним кодом (такі процесори існують, наприклад, для Java і Forth).

Також деякий інтерес представляє p-код (p-code), який схожий на байт-код, але фізично може бути менш лаконічним і сильно варіюватися по довжині інструкції. Він працює на дуже високому рівні, наприклад «надрукувати рядок» або «очистити екран». P-код використовується в деяких реалізаціях BASIC і Паскаля.

Мови та середовища програмування, що використовують байт-код

[ред. | ред. код]

Неповний перелік:

Приклади

[ред. | ред. код]

Код:

>>> print("Hello, World!") Hello, World! 

Байт-код:

>>> import dis #імпортуємо модуль "dis" - дизасамблер, перетворює байт-код Python на його мнемоніки >>> dis.dis('print("Hello, World!")')   1           0 LOAD_NAME                0 (print)               2 LOAD_CONST               0 ('Hello, World!')               4 CALL_FUNCTION            1               6 RETURN_VALUE 

Код:

outer: for (int i = 2; i < 1000; i++) {     for (int j = 2; j < i; j++) {         if (i % j == 0)             continue outer;     }     System.out.println (i); } 

Байт-код:

 0:   iconst_2  1:   istore_1  2:   iload_1  3:   sipush  1000  6:   if_icmpge       44  9:   iconst_2  10:  istore_2  11:  iload_2  12:  iload_1  13:  if_icmpge       31  16:  iload_1  17:  iload_2  18:  irem  19:  ifne    25  22:  goto    38  25:  iinc    2, 1  28:  goto    11  31:  getstatic       #84; //Field java/lang/System.out:Ljava/io/PrintStream;  34:  iload_1  35:  invokevirtual   #85; //Method java/io/PrintStream.println:(I)V  38:  iinc    1, 1  41:  goto    2  44:  return 

Посилання

[ред. | ред. код]