Байт-код
Виконання програми |
---|
Загальні поняття |
Типи програмного коду |
Стратегії компіляції |
Середовища виконання |
|
Важливі компілятори і інструменти |
|
Байт-код або байтко́д (англ. 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
Код:
>>> 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
- http://www.osp.ru/cw/2001/06/9339/ [Архівовано 28 жовтня 2010 у Wayback Machine.]
- http://easyelectronics.ru/virtualnaya-mashina-i-bajt-kod.html [Архівовано 1 січня 2011 у Wayback Machine.]
- http://searchcio-midmarket.techtarget.com/sDefinition/0,,sid183_gci211722,00.html [Архівовано 8 грудня 2010 у Wayback Machine.]
- https://web.archive.org/web/20110128133755/http://byte-code.com/portal/
Це незавершена стаття про інформаційні технології. Ви можете допомогти проєкту, виправивши або дописавши її. |