Porovnání softwaru pro virtualizaci aplikací - Comparison of application virtualization software
![]() | tento článek potřebuje další citace pro ověření.Říjen 2011) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Software pro virtualizaci aplikací odkazuje na obě aplikace virtuální stroje a software odpovědný za jejich implementaci. K povolení aplikace se obvykle používají aplikační virtuální stroje bytecode provozovat přenosně na mnoha různých počítačových architekturách a operačních systémech. Aplikace se obvykle spouští na počítači pomocí tlumočník nebo just-in-time kompilace (JIT). Často existuje několik implementací daného virtuálního stroje, každá pokrývá jinou sadu funkcí.
Porovnání virtuálních strojů
- JavaScript stroje nejsou součástí dodávky. Vidět Seznam motorů ECMAScript najít je.
Tabulka zde shrnuje prvky, pro které mají být návrhy virtuálních strojů účinné, nikoli seznam schopností přítomných v jakékoli implementaci.
Virtuální stroj | Model stroje | Správa paměti | Zabezpečení kódu | Tlumočník | JIT | AOT | Sdílené knihovny | Společný jazyk Objektový model | Dynamické psaní |
---|---|---|---|---|---|---|---|---|---|
Android Runtime (UMĚNÍ) | Registrovat | automatický | Ano | Ano | Ano | Ano | ? | Ano | Ano |
Common Language Runtime (CLR) | zásobník | automatické nebo manuální | Ano | Ano | Ano | Ano | Ano | Ano | Ano |
Dis (Peklo ) | Registrovat | automatický | Ano | Ano | Ano | Ano | Ano | Ano | Ano |
DotGNU Portable.NET | zásobník | automatické nebo manuální | Ano | Ano | Ano | Ano | Ano | Ano | Ne |
Virtuální stroj Java (JVM) | zásobník | automatický | Ano | Ano | Ano | Ano | Ano | Ano | Ano[1] |
JikesRVM | zásobník | automatický | Ano | Ano | Ano | Ano | ? | Ano | Ano |
LLVM | Registrovat | manuál | Ne | Ano | Ano | Ano | Ano | Ano | Ne |
Mono | zásobník | automatické nebo manuální | Ano | Ano | Ano | Ano | Ano | Ano | Ano |
Papoušek | Registrovat | automatický | Ne | Ano | Ne[2] | Ano | Ano | Ano | Ano |
Dalvik | Registrovat | automatický | Ano | Ano | Ano | Ne | ? | Ne | Ne |
Kvičet | zásobník | automatický | Ne | Ano | Ano | Ne | Ano | Ne | Ano |
PAPRSEK (Erlang ) | Registrovat | automatický | ? | Ano | Ano | Ano | Ano | Ano | Ano |
MoarVM | Registrovat | automatický | ? | Ano | Ano | Ano | Ano | Ano | Ano |
Pokyny virtuálního stroje zpracovávají data v lokálních proměnných pomocí hlavní model výpočtu, typicky to a stohovací stroj, zaregistrovat stroj nebo stroj s náhodným přístupem často nazýván paměťový stroj. Použití těchto tří metod je motivováno různými kompromisy ve virtuálních strojích a fyzických strojích, jako je snadná interpretace, kompilace a ověření zabezpečení.
Správa paměti v těchto přenosných virtuálních strojích se řeší na vyšší úrovni abstrakce než ve fyzických strojích. Některé virtuální stroje, například populární Virtuální stroje Java (JVM), jsou zapojeny do adres takovým způsobem, že vyžadují bezpečnou automatickou správu paměti tím, že virtuálnímu stroji umožní sledovat odkazy na ukazatele a nedovolí strojovým instrukcím ručně vytvářet ukazatele do paměti. Jiné virtuální stroje, jako je LLVM, jsou spíše jako tradiční fyzické stroje, což umožňuje přímé použití a manipulaci s ukazateli. Společný střední jazyk (CIL) nabízí hybrid mezi nimi, který umožňuje jak řízené využívání paměti (jako je JVM, který umožňuje bezpečnou automatickou správu paměti), ale také umožňuje „nebezpečný“ režim, který umožňuje přímou manipulaci s ukazatelem způsoby, které mohou porušovat hranice typu a oprávnění .
Zabezpečení kódu obecně odkazuje na schopnost přenosného virtuálního stroje spouštět kód a zároveň mu nabízí pouze předepsanou sadu schopností. Například virtuální stroj může povolit přístup kódu pouze k určité sadě funkcí nebo dat. Stejné ovládací prvky nad ukazateli, které umožňují automatickou správu paměti a umožňují virtuálnímu počítači zajistit typicky bezpečný přístup k datům, se používají k zajištění toho, že fragment kódu je povolen pouze určitým prvkům paměti a nemůže obejít samotný virtuální stroj. Ostatní bezpečnostní mechanismy jsou poté navrstveny na vrchol jako ověřovatelé kódu, ověřovatelé zásobníku a další metody.
An tlumočník umožňuje načíst a spustit programy vytvořené z virtuálních instrukcí bez potenciálně nákladného kompilace do instrukcí nativního stroje. Lze interpretovat jakýkoli virtuální stroj, který lze spustit, takže označení sloupce zde odkazuje na to, zda návrh obsahuje ustanovení pro efektivní tlumočení (pro běžné použití).
Just-in-time kompilace (JIT), odkazuje na metodu kompilace nativních instrukcí v nejkratším možném čase, obvykle bezprostředně před nebo během běhu programu. Výzvou JIT je spíše implementace než návrh virtuálních strojů, avšak moderní designy začaly uvažovat o pomoci efektivitě. Nejjednodušší metody JIT jednoduše kompilují do fragmentu kódu podobného offline kompilátoru. Často se však používají složitější metody, které se specializují na kompilované fragmenty kódu na parametry známé pouze za běhu (viz Adaptivní optimalizace ).
Předběžná kompilace (AOT) odkazuje na klasičtější metodu použití předkompilátoru ke generování sady nativních instrukcí, které se během běhu programu nemění. Protože agresivní kompilace a optimalizace mohou nějakou dobu trvat, může se předkompilovaný program spustit rychleji než ten, který se při provádění spoléhá pouze na JIT. Implementace JVM zmírnily tyto náklady na spuštění počátečním tlumočením, aby se urychlily časy spuštění, dokud JIT nebude moci generovat fragmenty nativního kódu.
Sdílené knihovny jsou zařízení k opakovanému použití segmentů nativního kódu napříč několika spuštěnými programy. V moderních operačních systémech to obecně znamená použití virtuální paměť sdílet stránky paměti obsahující sdílenou knihovnu napříč různými procesy, které jsou navzájem chráněny pomocí ochrana paměti. Je zajímavé, že agresivní metody JIT, jako je adaptivní optimalizace, často vytvářejí fragmenty kódu nevhodné pro sdílení napříč procesy nebo po sobě jdoucí běhy programu, což vyžaduje kompromis mezi účinností předkompilovaného a sdíleného kódu a výhodami adaptivně specializovaného kódu. Například existuje několik návrhových ustanovení CIL, které umožňují efektivní sdílené knihovny, možná za cenu specializovanějšího kódu JIT. Implementace JVM dne OS X používá sdílený archiv Java[3] poskytnout některé z výhod sdílených knihoven.
Porovnání implementace aplikačního virtuálního stroje
Kromě výše popsaných přenosných virtuálních strojů se virtuální stroje často používají jako model provádění pro jednotlivé skriptovací jazyky, obvykle tlumočníkem. Tato tabulka uvádí konkrétní implementace virtuálních strojů, a to jak u výše uvedených přenosných virtuálních strojů, tak u virtuálních strojů skriptovacího jazyka.
Virtuální stroj | Jazyky | Komentáře | Tlumočník | JIT | Jazyk implementace | SLoC |
---|---|---|---|---|---|---|
Common Language Runtime (CLR) | C#, C ++ / CLI, F#, VB.NET | bytecode je CIL; .NET Core Runtime na GitHubu | Ne | Ano | C #, C ++ | |
Adobe Flash Player (aka Tamarin ) | ActionScript, SWF (formát souboru) | interaktivní nástroj pro tvorbu webu. bytecode je pojmenován „Byte Code ActionScript (.abc)“ | Ano | Ano | C ++ | 135 kB (původně vydáno) |
Dis (Peklo ) | Předpeklí | Dis Specifikace virtuálního stroje | Ano | Ano | C | 15k + 2850 za arch JIT + 500 za hostitelský OS |
DotGNU -Portable.NET | Jazyky CLI počítaje v to: C# | Common Language Runtime klon | Ne | Ano | C, C # | |
Forth | Forth | Funkce jsou zjednodušené, obvykle zahrnují assembler, kompilátor, tlumočníky na textové a binární úrovni, někdy editor, debugger a OS. Rychlosti kompilace jsou> 20 SKLOC / S a chovají se podobně jako JIT. | Ano | Ne | Forth, Forth Assembler | 2,8 K až 5,6 K; pokročilé, profesionální implementace jsou menší. |
Glulx | Informovat 6, Informovat 7, ostatní | Ano | Ne | Existují různé implementace | ||
HHVM | PHP, Zaseknout | Je virtuální počítač s otevřeným zdrojovým kódem určený k provádění programů napsaných v programech Hack a PHP. | Ano | Ano | C ++, OCaml | |
Ikona | Ikona | Základní zdrojový kód poskytuje jak tlumočníka, tak nepodporovanou verzi kompilace do jazyka C. Runtime kód, který je sdílen mezi kompilátorem a tlumočníkem, je napsán ve variantě C zvané RTT. | Ano | Ne | C, RTT (vlastní front-end pro C, dodávaný se základním zdrojem pro Icon). | ~ Celkem 180 tis. (zdroj pro bytecode: ~ 11k, interpret kódů bytecode: ~ 46k, ikonac: ~ 23k, společné / záhlaví: ~ 13k, rtt: ~ 15k) |
JVM | Jáva, Kotlin, Jython, Báječný, JRuby, C, C ++, Clojure, Scala a několik dalších | Referenční implementace společností Sun; OpenJDK: kód pod GPL ; Ledový čaj: kód a nástroje pod GPL | Ano | Ano | JDK, OpenJDK & Ledový čaj s běžným JIT: Java, C, ASM; Ledový čaj s „Zero“ JIT: Java, C | JVM je kolem 6500 tis. Řádků; TCK je 80k testů a kolem 1000k linek |
LLVM | C, C ++, Kotlin, Cíl-C, Rychlý, Ada, Fortran, a Rez | Jsou podporovány výstupy MSIL, C a C ++. Výstup kódu bajtu jazyka ActionScript podporuje aplikace Adobe Alchemy. bytecode se jmenuje "LLVM Bytecode (.bc)". sestava má název „LLVM Assembly Language (* .ll)“. | Ano | Ano | C ++ | 811 tis [4] |
Lua | Lua | Ano | LuaJIT | C | 13k + 7k LuaJIT | |
MMIX | MMIXÁLNÍ | |||||
Mono | Jazyky CLI počítaje v to: C#, VB.NET, IronPython, IronRuby, a další | Common Language Runtime klon | Ano | Ano | C #, C | 2332 tis |
Oz | Oz, Alice | |||||
NekoVM | v současné době Neko a Haxe | Ano | pouze x86 | C | 46 tis | |
Stroj na O-kód | BCPL | |||||
stroj s p-kódem | Pascal | UCSD Pascal, rozšířený na konci 70. let včetně Apple II | ||||
Papoušek | Perl 5, Raku, NQP-rx, PIR, PASM, PBC, ZÁKLADNÍ, před naším letopočtem, C99, ECMAScript, Lisp, Lua, m4, Tcl, WMLScript, XML, a další | Ano | Ano | C, Perl | 111k C, 240k Perl | |
Virtuální stroj Perl | Perl | operační kód chodítko po stromech | Ano | Ne | C, Perl | 175k C, 9k Perl |
CPython | Krajta | Ano | Psyco | C | 387k C, 368k Python, 10k ASM, 31k Psyco | |
PyPy | Krajta | Vlastní hostování implementace Pythonu, příští generace Psyco | Ano | Ano | Krajta | |
Rubinius | Rubín | Virtuální stroj pro další implementaci Ruby | Ano | Ano | C ++, Ruby | |
Silverlight | C#, VB.NET | Mikro-verze Microsoft .NET Framework, která umožňuje aplikacím spouštět karanténu uvnitř prohlížeče | Ano | Ano | C ++ | 7 MB (původně vydáno) |
ScummVM | Scumm | Počítačový herní engine | ||||
SECD | JÁ PLAVU, Lispkit Lisp | |||||
Veverka | Veverka | Ano | Squirrel_JIT | C ++ | 12 tis | |
Pokec | Pokec | |||||
SQLite | Operační kódy SQLite | Virtuální databázový stroj | ||||
Kvičet | Kvičet Pokec | Vlastní hostování implementace virtuálního stroje Squeak. Bohatá multimediální podpora. | Ano | Ozubené kolo a výbuch | Smalltalk / slang | 110k Smalltalk, ~ 300K C. |
TraceMonkey | JavaScript | Na základě Tamarin | Ne | Ano | C ++ | 173 tis |
TrueType | TrueType | Engine pro vykreslování písem | Ano | Ne | C (obvykle) | |
Valgrind | x86 /x86-64 binární soubory | Kontrola přístupu a úniků paměti pod Linux | C | 467 tis [5] | ||
VisualWorks | Pokec | Ne | Ano | C | ||
Vx32 virtuální stroj | x86 binární soubory | Virtualizace na úrovni aplikace pro nativní kód | Ne | Ano | ||
Waba | Virtuální stroj pro malá zařízení, podobný Jáva | |||||
Ještě další Ruby VM (YARV ) | Rubín | Virtuální stroj referenční implementace pro Rubín 1.9 a novější verze | Ano | Ano | C | |
Z-stroj | Z-kód | |||||
Zend Engine | PHP | Ano | Ne | C | 75 tis |
Viz také
- Virtualizace aplikací
- Jazyková vazba
- Rozhraní cizí funkce
- Konvence volání
- Mangling jména
- Aplikační programovací rozhraní (API)
- Binární rozhraní aplikace (ABI)
- Porovnání virtualizačního softwaru platformy
- Seznam motorů ECMAScript
- WebAssembly
Reference
- ^ „Program Java Community Process (SM) - JSRs: Java Specification Requests - detail JSR # 292“. Jcp.org. Citováno 2013-07-04.
- ^ „JITRewrite - Papoušek“. Trac.parrot.org. Citováno 2013-07-04.
- ^ Apple dokumentuje v OS X použití Java Shared Archive
- ^ Infrastruktura kompilátoru LLVM, ohloh.net, 2011 30. listopadu
- ^ Valgrind, ohloh.net, 2011 30. listopadu.