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. |
|||
(39 intermediate revisions by 27 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)
Line 22 ⟶ 26:
| automatic
| {{yes}}
| {{
| {{
| {{yes}}
| {{dunno}}
| {{
| {{
|-
! [[Common Language Runtime
| [[Stack machine|stack]]
| automatic or manual
| {{yes}}
| {{
| {{yes}}
| {{yes}}
Line 48 ⟶ 52:
| {{yes}}
| {{yes}}
| {{
| {{
|-
! [[DotGNU]] [[Portable.NET]]
| [[Stack machine|stack]]
| automatic or manual
| {{
| {{
| {{yes}}
| {{yes}}
Line 62 ⟶ 66:
| {{no}}
|-
! [[HotSpot (virtual machine)|HotSpot]] [[Java virtual machine|JVM]]
| [[Stack machine|stack]]
| automatic
Line 76 ⟶ 80:
| [[Stack machine|stack]]
| automatic
| {{yes}}
| {{
| {{yes}}
| {{yes}}
| {{dunno}}
| {{
| {{
|-
! [[LLVM]]
Line 139 ⟶ 143:
| {{yes}}
|-
! [[
| [[Register machine|register]]
| automatic
| {{
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
|-
! [[MoarVM]]
| [[Register machine|register]]
| automatic
| {{dunno}}
| {{yes}}
| {{yes}}
Line 151 ⟶ 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 171 ⟶ 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 197 ⟶ 220:
! [[Dis virtual machine|Dis]] ([[Inferno (operating system)|Inferno]])
| [[Limbo (programming language)|Limbo]]
|
| {{yes}}
| {{yes}}
Line 203 ⟶ 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 211 ⟶ 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 220 ⟶ 243:
|-
! [[Glulx]]
| Inform 6, Inform 7, others
|
|{{yes}}
|{{no}}
| Various implementations exist
|
|-
Line 236 ⟶ 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 277 ⟶ 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 299 ⟶ 314:
| C
| 46k
|-
! [[Oz (programming language)|Oz]]
| Oz, [[Alice (programming language)|Alice]]
|
|
|
|
|
|-
! [[O-code machine]]
Line 311 ⟶ 334:
| [[Pascal (programming language)|Pascal]]
| UCSD Pascal, widespread in late 70s including Apple II
|{{yes}}
|{{no}}
|assembly, Pascal
|
|-
! [[Parrot virtual machine|Parrot]]
|
|
| {{yes}}
Line 336 ⟶ 359:
|
| {{yes}}
| {{ubl|[[Psyco]]|[[Unladen Swallow]]}}
| C
| 387k C, 368k Python, 10k ASM, 31k Psyco
Line 342 ⟶ 365:
! [[PyPy]]
| [[Python (programming language)|Python]]
| [[Self-hosting (compilers)|Self-hosting]] implementation of Python, next generation of [[Psyco]]
| {{yes}}
| {{yes}}
Line 350 ⟶ 373:
! [[Rubinius]]
| [[Ruby (programming language)|Ruby]]
| Virtual machine for another
| {{yes}}
| {{yes}}
Line 357 ⟶ 380:
|-
! [[Silverlight]]
| [[C Sharp (programming language)|C#]], [[Visual Basic (.NET)|VB.NET]]
|
| {{yes}}
| {{yes}}
| C++
| 7MB (
|-
! [[ScummVM]]
Line 381 ⟶ 404:
|-
! [[Squirrel (programming language)|Squirrel]]
|
|
| {{yes}}
Line 389 ⟶ 412:
|-
! [[Smalltalk]]
|
|
|
Line 405 ⟶ 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 444 ⟶ 475:
|
|-
! [[Vx32
| [[x86]] binaries
| Application-level virtualization for native code
Line 460 ⟶ 491:
|
|-
!
| [[Ruby (programming language)|Ruby]]
| Virtual machine of the reference implementation for [[Ruby (programming language)|Ruby]] 1.9 and newer versions
Line 469 ⟶ 500:
|-
! [[Z-machine]]
|
|
|
Line 486 ⟶ 517:
==See also==
{{div col}}
* [[Application virtualization]]
* [[Language binding]]
Line 492 ⟶ 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]]
|