Content deleted Content added
Jerryobject (talk | contribs) →Comparison of application virtual machine implementations: WP:LINKs: update-standardizes, adds, WP:RED delink, fix needless WP:REPEATLINK in same section. WP:BADEMPHASIS MOS:QUOTEMARKS > WP:ITALICs. Small WP:COPYEDITs WP:EoS, WP:TERSE. |
|||
(41 intermediate revisions by 28 users not shown) | |||
Line 1:
{{short description|None}}
{{more citations needed|date=October 2011}}
'''Application virtualization software''' refers to both application [[virtual machine]]s and software responsible for implementing them. Application virtual machines are typically used to allow application [[bytecode]] to run portably on many different computer architectures and operating systems. The application is usually run on the computer using an [[Interpreter (computing)|interpreter]] or [[just-in-time compilation]] (JIT). There are often several implementations of a given virtual machine, each covering a different set of functions.
==Comparison of virtual machines==
{{Hatnote|[[JavaScript]] machines not included. See [[List of ECMAScript engines]] to find them.}}
The table here summarizes elements for which the virtual machine designs are intended to be efficient, not the list of abilities present in any implementation.
{| class="wikitable sortable"
|-
![[Virtual machine]]
![[Model of computation|Machine model]]
![[Memory management]]
![[Secure coding|Code security]]
![[Interpreter (computing)|Interpreter]]
![[Just-in-time compilation|JIT]]
![[Ahead-of-time compilation|AOT]]
![[Shared library|Shared libraries]]
!Common Language [[Object Model]]
![[Dynamic typing]]
|-
! [[Android Runtime]] (ART)
| [[Register machine|register]]
| automatic
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| {{dunno}}
| {{yes}}
| {{yes}}
|-
! [[Common Language Runtime
| [[Stack machine|stack]]
| automatic or manual
| {{yes}}
| {{
| {{yes}}
| {{yes}}
Line 37 ⟶ 52:
| {{yes}}
| {{yes}}
| {{
| {{
|-
! [[DotGNU]] [[Portable.NET]]
| [[Stack machine|stack]]
| automatic or manual
| {{
| {{
| {{yes}}
| {{yes}}
Line 51 ⟶ 66:
| {{no}}
|-
! [[HotSpot (virtual machine)|HotSpot]] [[Java virtual machine|JVM]]
| [[Stack machine|stack]]
| automatic
Line 65 ⟶ 80:
| [[Stack machine|stack]]
| automatic
| {{yes}}
| {{
| {{yes}}
| {{yes}}
| {{dunno}}
| {{
| {{
|-
! [[LLVM]]
Line 112 ⟶ 127:
| {{yes}}
| {{yes}}
| {{
| {{dunno}}
| {{no}}
Line 123 ⟶ 138:
| {{yes}}
| {{yes}}
| {{
| {{yes}}
| {{no}}
| {{yes}}
|-
! [[
| [[Register machine|register]]
| automatic
| {{
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
|-
! [[MoarVM]]
| [[Register machine|register]]
| automatic
| {{dunno}}
| {{yes}}
| {{yes}}
Line 140 ⟶ 166:
|}
Virtual machine instructions process data in local variables using a main
An
''[[Just-in-time compilation]]
''[[Ahead-of-time compilation]]
==
In addition to the portable virtual machines described above, virtual machines are often used as an execution model for individual scripting languages, usually by an interpreter. This table lists specific virtual machine implementations, both of the above portable virtual machines, and of scripting language virtual machines.
Line 160 ⟶ 186:
{| class="wikitable sortable"
|-
! [[Virtual machine]]
! [[Programming language|Languages]] executed
! Comments
! [[Interpreter (computing)|Interpreter]]
! [[Just-in-time compilation|JIT]]
! Implementation
! [[Source lines of code|SLoC]]
|-
![[BEAM (Erlang virtual machine)|BEAM]]
|
|
| {{yes}}<ref>https://www.erlang.org/blog/a-closer-look-at-the-interpreter/</ref>
| {{yes}}<ref>https://www.erlang.org/blog/a-first-look-at-the-jit/</ref>
|Erlang, C, C++
|1561k including [[Open Telecom Platform|OTP]]
|-
! [[Common Language Runtime]] (CLR)
| [[C Sharp (programming language)|C#]], [[C++/CLI]], [[F Sharp (programming language)|F#]], [[Visual Basic (.NET)|VB.NET]]
| bytecode is [[Common Intermediate Language|CIL]]; [[.NET]] Core Runtime on GitHub
| {{no}}
| {{yes}}
| C#, C++
|
|-
! [[Adobe Flash Player]] (aka [[Tamarin (
| [[ActionScript]], [[SWF]] (file format)
| interactive web authoring tool
| {{yes}}
| {{yes}}
Line 186 ⟶ 220:
! [[Dis virtual machine|Dis]] ([[Inferno (operating system)|Inferno]])
| [[Limbo (programming language)|Limbo]]
|
| {{yes}}
| {{yes}}
Line 192 ⟶ 226:
| 15k + 2850 per JIT arch + 500 per host OS
|-
! [[DotGNU]]
| [[List of CLI languages|CLI languages]] including: [[C Sharp (programming language)|C#]]
|
| {{no}}
| {{yes}}
Line 200 ⟶ 234:
|
|-
! [[Forth
| [[Forth (programming language)|Forth]]
| Features are simplified, usually include assembler, compiler, text-level and binary-level interpreters, sometimes editor, debugger and OS
| {{yes}}
| {{no}}
Line 209 ⟶ 243:
|-
! [[Glulx]]
| Inform 6, Inform 7, others
|
|{{yes}}
|{{no}}
| Various implementations exist
|
|-
Line 225 ⟶ 259:
|
|-
! [[
| [[Java (programming language)|Java]], [[Kotlin (programming language)|Kotlin]], [[Jython]], [[Groovy (programming language)|Groovy]], [[JRuby]], [[C (programming language)|C]], [[C++]], [[Clojure]], [[Scala (programming language)|Scala]] and several others
| [[Java virtual machine|JVM]] reference implementation by Sun; [[OpenJDK]]: code under [[GPL]]; [[IcedTea]]: code and tools under [[GPL]]
| {{yes}}
| {{yes}}
| [[JDK]], [[OpenJDK]] & [[IcedTea]] with regular JIT : Java, C, C++, ASM ; [[IcedTea]] with the "Zero" JIT : Java, C, C++
|
|-
! [[Icon (programming language)|Icon]]
| Icon
| Base source code provides both the interpreter as well as an unsupported compile-to-C version. The runtime code, that is shared between the compiler and the interpreter, is written in a variant of C called RTT.
|{{yes}}
|{{no}}
|C, RTT (a custom front-end to C, provided with the base source for Icon).
| ~180k total. (source to bytecode: ~11k, bytecode interpreter: ~46k, iconc: ~23k, common/headers: ~13k, rtt: ~15k)
|-
! [[LLVM]]
| [[C (programming language)|C]], [[C++]], [[Kotlin (programming language)|Kotlin]], [[Objective-C]], [[Swift (programming language)|Swift]], [[Ada (programming language)|Ada]], [[Fortran]], and [[Rust (programming language)|Rust]]
| MSIL, C and C++ output are supported. ActionScript Byte Code output is supported by Adobe Alchemy. bytecode is named "LLVM Bytecode (.bc)". assembly is named "LLVM Assembly Language (*.ll)".
| {{yes}}
| {{yes}}
| C++
| 811k <ref name="ohloh-llvm">[http://www.ohloh.net/p/llvm The LLVM Compiler Infrastructure] {{Webarchive|url=https://web.archive.org/web/20120731043158/http://www.ohloh.net/p/llvm |date=2012-07-31}}, ohloh.net, 2011
|-
! [[Lua (programming language)|Lua]]
| Lua
|
| {{yes}}
|
| C
| 13k + 7k LuaJIT
|-
! [[MMIX]]
| MMIXAL
|
|
Line 266 ⟶ 300:
|-
! [[Mono (software)|Mono]]
| [[List of CLI languages|CLI languages]] including: [[C Sharp (programming language)|C#]], [[Visual Basic (.NET)|VB.NET]], [[IronPython]], [[IronRuby]], and others
|
| {{yes}}
| {{yes}}
| C#, C
| 2332k
|-
! [[NekoVM]]
Line 288 ⟶ 314:
| C
| 46k
|-
! [[Oz (programming language)|Oz]]
| Oz, [[Alice (programming language)|Alice]]
|
|
|
|
|
|-
! [[O-code machine]]
Line 300 ⟶ 334:
| [[Pascal (programming language)|Pascal]]
| UCSD Pascal, widespread in late 70s including Apple II
|{{yes}}
|{{no}}
|assembly, Pascal
|
|-
! [[Parrot virtual machine|Parrot]]
|
|
| {{yes}}
Line 325 ⟶ 359:
|
| {{yes}}
| {{ubl|[[Psyco]]|[[Unladen Swallow]]}}
| C
| 387k C, 368k Python, 10k ASM, 31k Psyco
Line 331 ⟶ 365:
! [[PyPy]]
| [[Python (programming language)|Python]]
| [[Self-hosting (compilers)|Self-hosting]] implementation of Python, next generation of [[Psyco]]
| {{yes}}
| {{yes}}
Line 339 ⟶ 373:
! [[Rubinius]]
| [[Ruby (programming language)|Ruby]]
| Virtual machine for another
| {{yes}}
| {{yes}}
Line 346 ⟶ 380:
|-
! [[Silverlight]]
| [[C Sharp (programming language)|C#]], [[Visual Basic (.NET)|VB.NET]]
|
| {{yes}}
| {{yes}}
| C++
| 7MB (
|-
! [[ScummVM]]
Line 370 ⟶ 404:
|-
! [[Squirrel (programming language)|Squirrel]]
|
|
| {{yes}}
Line 378 ⟶ 412:
|-
! [[Smalltalk]]
|
|
|
Line 394 ⟶ 428:
|-
! [[Squeak]]
|
| [[Self-hosting (compilers)|Self hosting]] implementation of
| {{yes}}
| {{yes|Cog
| Smalltalk/
| 110k Smalltalk, ~300K C
|-
![[SWI-Prolog]]
|Prolog: [[SWI-Prolog]], [[YAP (Prolog)|YAP]]
|
| {{yes}}
| {{no}}
| C, SWI-Prolog
|
|-
! [[TraceMonkey]]
| JavaScript
| Based on [[Tamarin (
| {{no}}
| {{yes}}
Line 433 ⟶ 475:
|
|-
! [[Vx32
| [[x86]] binaries
| Application-level virtualization for native code
Line 449 ⟶ 491:
|
|-
!
| [[Ruby (programming language)|Ruby]]
| Virtual machine of the reference implementation for [[Ruby (programming language)|Ruby]] 1.9 and newer versions
Line 458 ⟶ 500:
|-
! [[Z-machine]]
|
|
|
Line 475 ⟶ 517:
==See also==
{{div col}}
* [[Application virtualization]]
* [[Language binding]]
Line 481 ⟶ 524:
* [[Name mangling]]
* [[Application programming interface]] (API)
* [[Application
* [[Comparison of platform virtualization software]]
* [[Comparison of Java virtual machines]]
* [[List of Java virtual machines]]
* [[List of ECMAScript engines]]
* [[List of application servers]]
* [[WebAssembly]]
{{div col end}}
==References==
{{Reflist}}
[[Category:Software comparisons|application virtualization software]]
|