Байт-код
Байт-код або байтко́д (англ. byte-code), іноді також використовується термін псевдокод (не плутати з неформальним записом алгоритму) — машино-незалежний код низького рівня, що генерується транслятором і виконується інтерпретатором. Більшість інструкцій байт-коду еквівалентні одній або кільком командам Асемблера. Трансляція в байт-код займає проміжне положення між компіляцією в машинний код і інтерпретацією.
Виконання програми |
---|
Загальні поняття |
|
Типи програмного коду |
Стратегії компіляції |
|
Середовища виконання |
|
Важливі компілятори і інструменти |
|
Байт-код називається так тому, що довжина кожного коду операції — один байт, але довжина коду команди різна. Кожна інструкція є однобайтовим кодом операції від 0 до 255, за яким слідують такі параметри, як регістри або адреси пам'яті. Це в типовому випадку, але специфікація байт-коду значно відрізняється в мовах програмування.
Програма на байт-коді зазвичай виконується інтерпретатором байт-коду (його ще називають віртуальною машиною, оскільки він подібний до комп'ютера). Перевага — в портативності, тобто один і той же байт-код може виконуватися на різних платформах і архітектурі — цю перевагу мають всі мови, що інтерпретуються. Проте, оскільки байт-код зазвичай є менш абстрактним, компактним і більш «комп'ютерним» ніж початковий код, ефективність байт-коду зазвичай вища, ніж чиста інтерпретація початкового коду, призначеного для правки людиною. З цієї причини багато сучасних інтерпретованих мов насправді транслюють в байт-код і запускають інтерпретатор байт-коду. До таких мов відносяться Perl, PHP і Python. Програми на Java зазвичай передаються на цільову машину у вигляді байт-коду, який перед виконання транслюється в машинний код «на льоту» — за допомогою JIT-компіляції. У стандарті відкритих завантажувачів Open Firmware фірми Sun Microsystems байт-код представляє оператори мови Forth.
В той же час можливе створення процесорів, для яких даний байт-код є безпосередньо машинним кодом (такі процесори існують, наприклад, для Java і Forth).
Також деякий інтерес представляє p-код (p-code), який схожий на байт-код, але фізично може бути менш лаконічним і сильно варіюватися по довжині інструкції. Він працює на дуже високому рівні, наприклад «надрукувати рядок» або «очистити екран». P-код використовується в деяких реалізаціях BASIC і Паскаля.
Мови і середовища програмування, що використовують байткод
Неповний перелік:
- Байткод Java виконується віртуальною машиною Java (Java Virtual Machine).
- Smalltalk
- Python
- Віртуальна машина Parrot virtual machine
- Платформа Microsoft .NET використовує Intermediate Language (IL), що виконується за допомогою Common Language Runtime (CLR). Дивись Керований код.
- PHP
- Forth
- EiffelStudio для мови програмування Eiffel
- Objective Caml
- Erlang
Приклади
Python
Код:
>>> 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
Java
Код:
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
Посилання
- http://www.osp.ru/cw/2001/06/9339/
- http://easyelectronics.ru/virtualnaya-mashina-i-bajt-kod.html
- http://searchcio-midmarket.techtarget.com/sDefinition/0,,sid183_gci211722,00.html
- https://web.archive.org/web/20110128133755/http://byte-code.com/portal/