Bytecode - Bytecode
![]() | tento článek potřebuje další citace pro ověření.Leden 2009) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Bytecode, také nazývané přenosný kód nebo p-kód, je forma instrukční sada navrženo pro efektivní provedení pomocí softwaru tlumočník. Na rozdíl od čitelné člověkem[1] zdrojový kód, bytecodes jsou kompaktní číselné kódy, konstanty a reference (obvykle číselné adresy), které kódují výsledek překladač analýza a provedení sémantická analýza věcí, jako je typ, rozsah a hloubky vnoření programových objektů.
Provádění programu |
---|
Obecné pojmy |
Druhy kódu |
Strategie kompilace |
Pozoruhodné doby běhu |
Pozoruhodné překladače a řetězce nástrojů |
Název bytecode pochází z instrukčních sad, které majíbyte opcodes následované volitelnými parametry. Zprostředkující reprezentace takový jako bytecode může být výstupem programovací jazyk ulehčení implementací výklad, nebo jej lze použít ke snížení hardwaru a operační systém závislost povolením spuštění stejného kódu napříč platformami na různých zařízeních. Bytecode může být často buď přímo spuštěn na virtuální stroj (A stroj s p-kódem tj. tlumočník), nebo jej lze dále sestavit strojový kód pro lepší výkon.
Vzhledem k tomu, že instrukce bytecode jsou zpracovávány softwarem, mohou být libovolně složité, ale přesto se často podobají tradičním hardwarovým instrukcím: virtuální stohovací stroje jsou nejběžnější, ale virtuální registrovat stroje byly také postaveny.[2][3] Různé části mohou být často uloženy v samostatných souborech, podobně jako objektové moduly, ale dynamicky načítán během provádění.
Provedení
Program bytového kódu může být proveden analýzou a přímo provádění pokynů, jeden po druhém. Tento druh překladač bytecode je velmi přenosný. Některé systémy, nazývané dynamické překladače, nebo právě včas (JIT) překladače, přeložit bytecode do strojový kód podle potřeby na runtime. Díky tomu je virtuální stroj specifický pro hardware, ale neztrácí přenositelnost bytového kódu. Například, Jáva a Pokec kód se obvykle ukládá ve formátu bytecode, který se obvykle před kompilací JIT kompiluje k překladu bytecode do strojového kódu. To zavádí zpoždění před spuštěním programu, když je bytecode zkompilován do nativního strojového kódu, ale výrazně zvyšuje rychlost provádění ve srovnání s přímým výkladem zdrojového kódu, obvykle zhruba o řád (10x).[4]
Kvůli své výkonnostní výhodě dnes mnoho jazykových implementací spouští program ve dvou fázích, nejprve kompiluje zdrojový kód do bytecode a poté předává bytecode virtuálnímu stroji. Existují virtuální stroje založené na bytecode tohoto druhu Jáva, Raku, Krajta, PHP,[pozn. 1] Tcl, mawk a Forth (Forth je však zřídkakdy kompilován pomocí bajtových kódů a jeho virtuální stroj je místo toho obecnější). Implementace Perl a Rubín 1.8 místo toho pracujte chůzí abstraktní syntaxový strom reprezentace odvozená ze zdrojového kódu.
Více nedávno, autoři V8[1] a Šipka[5] zpochybnili představu, že pro rychlou a efektivní implementaci virtuálních počítačů je nutný přechodný bytecode. Obě tyto jazykové implementace v současné době provádějí přímou kompilaci JIT ze zdrojového kódu do strojového kódu bez prostředníka bytecode.[6]
Příklady
>>> import dis # "dis" - Demontážní program bajtového kódu Pythonu do mnemotechniky.>>> dis.dis('print ("Hello, World!")') 1 0 LOAD_NAME 0 (tisk) 2 LOAD_CONST 0 ('Hello, World!') 4 CALL_FUNCTION 1 6 RETURN_VALUE
- ActionScript se spouští ve virtuálním stroji ActionScript (AVM), který je součástí Flash Player a AIR. Kód ActionScript je obvykle transformován do formátu bytecode pomocí překladač. Mezi příklady překladačů patří jeden zabudovaný do aplikace Adobe Flash Professional a druhý zabudovaný do aplikace Adobe Flash Builder, který je k dispozici v sadě Adobe Flex SDK.
- Adobe Flash předměty
- BANCStar, původně bytecode pro nástroj pro vytváření rozhraní, ale používá se také jako jazyk
- Filtr paketů Berkeley
- Byte Code Engineering Library
- C až Virtuální stroj Java překladače
- CLISP implementace Společný Lisp používá se ke kompilaci pouze na bytecode po mnoho let; nyní však také podporuje kompilaci do nativního kódu pomocí GNU blesk
- CMUCL a Scieneer Common Lisp implementace Společný Lisp lze kompilovat buď do nativního kódu, nebo do bytecode, což je mnohem kompaktnější
- Společný střední jazyk provedl Common Language Runtime, který používá .NET Framework jazyky jako C#
- Dalvik bytecode, určený pro Android platforma, je prováděna Virtuální stroj Dalvik
- Dis bytecode, určený pro Inferno (operační systém), je prováděn Dis virtuální stroj
- EiffelStudio pro Eiffelova programovací jazyk
- EM Amsterdamská kompilátorová sada virtuální stroj používaný jako mezilehlý kompilační jazyk a jako moderní jazyk bytecode
- Emacs je textový editor, jehož většinu funkcí implementuje Emacs Lisp, jeho vestavěný dialekt Lisp. Tyto funkce jsou kompilovány do bytecode. Tato architektura umožňuje uživatelům přizpůsobit editor pomocí jazyka na vysoké úrovni, který po kompilaci do bytecode přináší přiměřený výkon.
- Vložitelný Common Lisp implementace Společný Lisp lze kompilovat do bytecode nebo C kódu
- Ericsson implementace Erlang používá BEAM bytecodes
- Ikona[7] a Unicon[8] programovací jazyky
- Infocom použil Z-stroj aby byly jeho softwarové aplikace přenosnější
- Bajtový kód Java, který provádí Virtuální stroj Java
- KLÍČ, MS-DOS /PC DOS ovladač klávesnice s jeho zdrojovým souborem KEYBOARD.SYS obsahující informace o rozložení a krátké p-kód sekvence prováděné tlumočníkem uvnitř rezidentního ovladače.[9][10]
- LSL, skriptovací jazyk používaný ve virtuálních světech, se kompiluje v bytecode běžícím na virtuálním stroji. Second Life má původní verzi Mono, Inworldz vyvinul verzi Phlox.
- Lua jazyk používá virtuální stroj s bajtovým kódem založený na registrech
- m-kód MATLAB Jazyk[11]
- Multiplan[12]
- O-kód z BCPL programovací jazyk
- OCaml jazyk se volitelně kompiluje do kompaktní formy bytecode
- p-kód z UCSD Pascal provádění Pascal Jazyk
- Virtuální stroj papouška
- Vyberte ZÁKLADNÍ označovaný také jako Data BASIC nebo MultiValue BASIC
- The R prostředí pro statistické výpočty nabízí kompilátor bajtových kódů prostřednictvím balíčku kompilátoru, nyní standardní verze R verze 2.13.0. Je možné kompilovat tuto verzi R tak, aby to zneužily základní a doporučené balíčky.[13]
- Pyramid 2000 adventura
- Schéma 48 implementace schématu pomocí interpretu bytecode
- Bytecodes mnoha implementací Pokec Jazyk
- The Tlumočník točení zabudovaný do Paralaxa Vrtule mikrokontrolér
- The SQLite databázový stroj překládá příkazy SQL do formátu bajtového kódu na míru.[14]
- SLADKÝCH 16
- Tcl
- Malý ZÁKLAD
- Visual FoxPro kompiluje do bytecode
- WebAssembly
- YARV a Rubinius pro Rubín
Viz také
Poznámky
- ^ Ačkoli PHP opcodes jsou generovány při každém spuštění programu a jsou vždy interpretovány a nikoli just-in-time kompilován.
Reference
- ^ A b „Dynamické generování strojového kódu“. Google.
- ^ „Implementace Lua 5.0“. (Pozn. Toto zahrnuje virtuální stroj založený na registrech.)
- ^ "Dalvik VM". Archivovány od originál dne 18. 05. 2013. Citováno 2012-10-29. (Pozn. Tento virtuální počítač je založen na registrech.)
- ^ „Strojový kód Byte Code Vs“. www.allaboutcomputing.net. Citováno 2017-10-23.
- ^ Loitsch, Florian. „Proč ne Bytecode VM?“. Google. Archivovány od originál dne 12. 05. 2013.
- ^ „Mýtus o JavaScriptu: JavaScript vyžaduje standardní bytecode“.
- ^ „Implementace programovacího jazyka Icon“ (PDF). Archivovány od originál (PDF) dne 2016-03-05. Citováno 2011-09-09.
- ^ „Implementace Icon a Unicon a kompendia“ (PDF).
- ^ Paul, Matthias R. (2001-12-30). "Vnitřní struktura KEYBOARD.SYS". Diskusní skupina: comp.os.msdos.programmer. Archivováno z původního dne 2017-09-09. Citováno 2016-09-17.
[…] Ve skutečnosti je formát v podstatě stejný MS-DOS 3.3 - 8.0, PC DOS 3.3 - 2000, včetně ruských, litevských, čínských a japonských čísel, a také ve Windows NT, 2000 a XP […]. Existují drobné rozdíly a nekompatibility, ale obecný formát se v průběhu let nezměnil. […] Některé z datových záznamů obsahují normální tabulky […] Většina záznamů však obsahuje spustitelný kód interpretován nějakým druhem tlumočník p-kódu na *runtime *, včetně podmíněných větví a podobně. To je důvod, proč KLÍČ ovladač má ve srovnání s ovladači klávesnice poháněnými klávesnicí tak velkou paměťovou stopu, kterou lze provést za 3 - 4 kB a získat stejnou úroveň funkce kromě tlumočníka. […]
- ^ Mendelson, Edward (2001-07-20). "Jak zobrazit euro v systému MS-DOS a Windows DOS". Zobrazte symbol eura v systému MS-DOS na celou obrazovku (včetně Windows 95 nebo Windows 98 na celou obrazovku DOS). Archivováno od originálu 2016-09-17. Citováno 2016-09-17.
[…] Matthias [R.] Paul […] varuje, že IBM PC DOS Verze ovladače klávesnice používá některé interní postupy, které nejsou rozpoznány Microsoft ovladač, takže pokud je to možné, měli byste použít IBM verze obou KEYB.COM a KEYBOARD.SYS namísto míchání verzí Microsoft a IBM […]
(Pozn. Co se rozumí pod pojmem „postupy“, zde jsou uvedeny některé další bytové kódy v souboru IBM KEYBOARD.SYS, které verze ovladače KEYB od společnosti Microsoft nepodporuje.) - ^ „Patent USA 6 973 644“.
- ^ Specifikace Microsoft C Pcode. str. 13.
Multiplan nebyl sestaven strojový kód, ale na druh bajtového kódu, který byl spuštěn pomocí tlumočník, aby byl Multiplan přenosný na nejrůznější hardware té doby. Tento bajtový kód rozlišoval mezi strojově specifickými formát s plovoucí desetinnou čárkou pro výpočet a externí (standardní) formát, který byl binárně kódováno desítkově (BCD). Pokyny PACK a UNPACK převedené mezi těmito dvěma.
- ^ "R instalace a správa".
- ^ „Stroj SQLite Bytecode“. Archivovány od originál dne 2017-04-14. Citováno 2016-08-29.