asm.js is a subset of
JavaScript
JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of Website, websites use JavaScript on the Client (computing), client side ...
designed to allow
computer software
Software is a set of computer programs and associated documentation and data. This is in contrast to hardware, from which the system is built and which actually performs the work.
At the lowest programming level, executable code consists ...
written in languages such as
C to be run as
web application
A web application (or web app) is application software that is accessed using a web browser. Web applications are delivered on the World Wide Web to users with an active network connection.
History
In earlier computing models like client-serve ...
s while maintaining performance characteristics considerably better than standard
JavaScript
JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of Website, websites use JavaScript on the Client (computing), client side ...
, which is the typical language used for such applications.
asm.js consists of a
strict subset
In mathematics, set ''A'' is a subset of a set ''B'' if all elements of ''A'' are also elements of ''B''; ''B'' is then a superset of ''A''. It is possible for ''A'' and ''B'' to be equal; if they are unequal, then ''A'' is a proper subset o ...
of JavaScript, to which code written in
statically-typed
In computer programming, a type system is a logical system comprising a set of rules that assigns a property called a type to every "term" (a word, phrase, or other set of symbols). Usually the terms are various constructs of a computer program ...
languages with manual memory management (such as C) is translated by a
source-to-source compiler
A source-to-source translator, source-to-source compiler (S2S compiler), transcompiler, or transpiler is a type of translator that takes the source code of a program written in a programming language as its input and produces an equivalent sou ...
such as
Emscripten
Emscripten is an LLVM/Clang-based compiler that compiles C and C++ source code to WebAssembly (or to a subset of JavaScript known as asm.js, its original compilation target before the advent of WebAssembly in 2017), primarily for execution in ...
(based on
LLVM
LLVM is a set of compiler and toolchain technologies that can be used to develop a front end for any programming language and a back end for any instruction set architecture. LLVM is designed around a language-independent intermediate repre ...
).
Performance is improved by limiting language features to those amenable to
ahead-of-time optimization and other performance improvements.
Mozilla Firefox
Mozilla Firefox, or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. It uses the Gecko rendering engine to display web pages, which implements current a ...
was the first web browser to implement asm.js-specific optimizations, starting with version 22.
asm.js is superseded by
WebAssembly
WebAssembly (sometimes abbreviated Wasm) defines a portable binary-code format and a corresponding text format for executable programs as well as software interfaces for facilitating interactions between such programs and their host environmen ...
. See below.
Design
asm.js enables significant performance improvements for
web application
A web application (or web app) is application software that is accessed using a web browser. Web applications are delivered on the World Wide Web to users with an active network connection.
History
In earlier computing models like client-serve ...
s, but does not aim to improve the performance of hand-written JavaScript code, nor does it enable anything other than enhanced performance.
It is intended to have performance characteristics closer to that of native code than standard JavaScript by limiting language features to those amenable to
ahead-of-time optimization and other performance improvements. By using a subset of JavaScript, asm.js is largely supported by all major
web browser
A web browser is application software for accessing websites. When a user requests a web page from a particular website, the browser retrieves its files from a web server and then displays the page on the user's screen. Browsers are used on ...
s, unlike alternative approaches such as
Google Native Client
Google Native Client (NaCl) is a discontinued sandboxing technology for running either a subset of Intel x86, ARM, or MIPS native code, or a portable executable, in a sandbox. It allows safely running native code from a web browser, independ ...
.
Code generation
asm.js is not typically written directly: instead, as an intermediate language, it is generated through the use of a
compiler
In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs that ...
that takes source code in a language such as
C++ and outputs asm.js.
For example, given the following C code:
int f(int i)
Emscripten would output the following JS code:
function f(i)
Note the addition of
, 0
and the lack of type specifiers. In JavaScript, bitwise operators convert their operands to 32-bit signed integers and give integer results. This means that a
bitwise OR
In computer programming, a bitwise operation operates on a bit string, a bit array or a binary numeral (considered as a bit string) at the level of its individual bits. It is a fast and simple action, basic to the higher-level arithmetic ope ...
with zero converts a value to an integer (a very simple "conceptual" presentation of bitwise operators may not deal with type conversion at all, but every programming language defines operators for its own convenience, as Javascript does here). By doing this for each parameter, this ensures that if the function is called from outside code, the value will be converted to the correct type. This is also used on the return value, in this case to ensure that the result of adding 1 to i will be an integer (as otherwise it could become too large), and to mark the return type of the function. These conversions are required by asm.js, so that an optimising compiler can produce highly efficient native code ahead-of-time. In such an optimising compiler, no conversions are performed when asm.js code calls other asm.js code, as the required type specifiers mean it is guaranteed that values will already have the correct type. Furthermore, rather than performing a floating-point addition and converting to an integer, it can simply do a native integer operation. Together, this leads to significant performance benefits.
Here is another example to calculate the length of a string:
size_t strlen(char *ptr)
This would result in the following asm.js code:
function strlen(ptr)
In the generated code, the variable MEM8 is actually a byte-by-byte "view" of a typed buffer, which serves as the "heap" of the asm.js code.
Performance
Since asm.js runs in a browser, the performance heavily depends on both the browser and hardware. Preliminary benchmarks of C programs compiled to asm.js are usually within a factor of 2 slower than native compilation with
Clang
Clang is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages, as well as the OpenMP, OpenCL, RenderScript, CUDA, and HIP frameworks. It acts as a drop-in replacement for the GNU Compiler Collection ...
.
Much of this performance gain over normal JavaScript is due to 100%
type
Type may refer to:
Science and technology Computing
* Typing, producing text via a keyboard, typewriter, etc.
* Data type, collection of values used for computations.
* File type
* TYPE (DOS command), a command to display contents of a file.
* Ty ...
consistency and virtually no
garbage collection
Waste collection is a part of the process of waste management. It is the transfer of solid waste from the point of use and disposal to the point of treatment or landfill. Waste collection also includes the curbside collection of recyclable ...
(memory is manually managed in a large typed array). This simpler model with no dynamic behavior, no memory allocation or deallocation, just a narrow set of well-defined integer and floating point operations enables much greater performance and potential for
optimization
Mathematical optimization (alternatively spelled ''optimisation'') or mathematical programming is the selection of a best element, with regard to some criterion, from some set of available alternatives. It is generally divided into two subfi ...
.
Mozilla's benchmark from December 2013 showed significant improvements: "Firefox with
float32
Single-precision floating-point format (sometimes called FP32 or float32) is a computer number format, usually occupying 32 bits in computer memory; it represents a wide dynamic range of numeric values by using a floating radix point.
A floating ...
optimizations can run all those benchmarks at around 1.5× slower than native, or better."
Mozilla points out that the performance of natively compiled code is not a single measure but rather a range, with different native compilers (in this case
Clang
Clang is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages, as well as the OpenMP, OpenCL, RenderScript, CUDA, and HIP frameworks. It acts as a drop-in replacement for the GNU Compiler Collection ...
and
GCC) delivering code of differing performance. "In fact, on some benchmarks, like
Box2D
Box2D is a free open source 2-dimensional physics simulator engine written in C++ by Erin Catto and published under the MIT license. It has been used in '' Crayon Physics Deluxe'', ''Limbo'', ''Rolando'', '' Incredibots'', ''Angry Birds'', '' ...
,
FASTA
FASTA is a DNA and protein sequence alignment software package first described by David J. Lipman and William R. Pearson in 1985. Its legacy is the FASTA format which is now ubiquitous in bioinformatics.
History
The original FASTA program ...
and copy, asm.js is as close or closer to Clang than Clang is to GCC. In one case, asm.js even beats Clang by a slight amount on Box2D."
Implementations
The
Emscripten
Emscripten is an LLVM/Clang-based compiler that compiles C and C++ source code to WebAssembly (or to a subset of JavaScript known as asm.js, its original compilation target before the advent of WebAssembly in 2017), primarily for execution in ...
project provides tools that can be used to compile C and C++ codebases (or any other languages that can be converted to
LLVM
LLVM is a set of compiler and toolchain technologies that can be used to develop a front end for any programming language and a back end for any instruction set architecture. LLVM is designed around a language-independent intermediate repre ...
IR) into asm.js.
All browsers with support for
ECMAScript 6
ECMAScript (; ES) is a JavaScript standard intended to ensure the interoperability of web pages across different browsers. It is standardized by Ecma International in the documenECMA-262
ECMAScript is commonly used for client-side scripti ...
should be able to run asm.js code, as it is a subset of that specification. However, since features were added in that edition to enable full asm.js support (), older browsers lacking those features may encounter problems.
Some browser implementations are especially optimised for asm.js:
*
Mozilla Firefox
Mozilla Firefox, or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. It uses the Gecko rendering engine to display web pages, which implements current a ...
was the first web browser to implement asm.js-specific optimizations, starting with Firefox 22.
OdinMonkey
SpiderMonkey is the first JavaScript engine, written by Brendan Eich at Netscape Communications, later released as open source and currently maintained by the Mozilla Foundation. It is used in the Firefox web browser.
History
Eich "wrote Jav ...
, Mozilla's asm.js ahead-of-time compiler used in Firefox, is a component of
IonMonkey
SpiderMonkey is the first JavaScript engine, written by Brendan Eich at Netscape Communications, later released as open-source software, open source and currently maintained by the Mozilla Foundation. It is used in the Firefox web browser.
Hi ...
, the JIT compiler of
SpiderMonkey
SpiderMonkey is the first JavaScript engine, written by Brendan Eich at Netscape Communications, later released as open source and currently maintained by the Mozilla Foundation. It is used in the Firefox web browser.
History
Eich "wrote Ja ...
.
* Microsoft was implementing support for asm.js in
Chakra
Chakras (, ; sa , text=चक्र , translit=cakra , translit-std=IAST , lit=wheel, circle; pi, cakka) are various focal points used in a variety of ancient meditation practices, collectively denominated as Tantra, or the esoteric or ...
, the JavaScript engine used by
Microsoft Edge Legacy
Microsoft Edge is a proprietary, cross-platform web browser created by Microsoft. It was first released in 2015 as part of Windows 10 and Xbox One and later ported to other platforms as a fork of Google's Chromium open-source project: An ...
, performing validation to produce highly optimised JIT code.
* The optimizations of
Google Chrome
Google Chrome is a cross-platform web browser developed by Google. It was first released in 2008 for Microsoft Windows, built with free software components from Apple WebKit and Mozilla Firefox. Versions were later released for Linux, macO ...
's
V8 JavaScript engine in Chrome 28 made asm.js benchmarks more than twice as fast as prior versions of Chrome,
although Chrome's V8 does not use ahead-of-time compilation.
Adoption
Almost all of the current applications based on asm.js are C/C++ applications compiled to asm.js using
Emscripten
Emscripten is an LLVM/Clang-based compiler that compiles C and C++ source code to WebAssembly (or to a subset of JavaScript known as asm.js, its original compilation target before the advent of WebAssembly in 2017), primarily for execution in ...
or Mandreel. With that in mind, the kind of applications that are going to target asm.js in the near future are those that will benefit from the portability of running in a browser but which have a level of complexity for which a direct port to JavaScript would be infeasible.
So far, a number of
programming language
A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language.
The description of a programming l ...
s,
application framework
In computer programming, an application framework consists of a software framework used by software developers to implement the standard structure of application software.
Application frameworks became popular with the rise of graphical user inter ...
s,
programs
Program, programme, programmer, or programming may refer to:
Business and management
* Program management, the process of managing several related projects
* Time management
* Program, a part of planning
Arts and entertainment Audio
* Programm ...
,
libraries
A library is a collection of materials, books or media that are accessible for use and not just for display purposes. A library provides physical (hard copies) or digital access (soft copies) materials, and may be a physical location or a vir ...
,
games
A game is a structured form of play, usually undertaken for entertainment or fun, and sometimes used as an educational tool. Many games are also considered to be work (such as professional players of spectator sports or games) or art (su ...
,
game engine
A game engine is a software framework primarily designed for the development of video games and generally includes relevant libraries and support programs. The "engine" terminology is similar to the term " software engine" used in the softwar ...
s and other software have already been
ported
In software engineering, porting is the process of adapting software for the purpose of achieving some form of execution in a Computing platform, computing environment that is different from the one that a given program (meant for such execution) ...
. Some of them are given below.
Programming languages
*
C/C++
The C and C++ programming languages are closely related but have many significant differences. C++ began as a fork of an early, pre- standardized C, and was designed to be mostly source-and-link compatible with C compilers of the time. Due to t ...
:
Clang
Clang is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages, as well as the OpenMP, OpenCL, RenderScript, CUDA, and HIP frameworks. It acts as a drop-in replacement for the GNU Compiler Collection ...
and
LLVM
LLVM is a set of compiler and toolchain technologies that can be used to develop a front end for any programming language and a back end for any instruction set architecture. LLVM is designed around a language-independent intermediate repre ...
*
Rust
Rust is an iron oxide, a usually reddish-brown oxide formed by the reaction of iron and oxygen in the catalytic presence of water or air moisture. Rust consists of hydrous iron(III) oxides (Fe2O3·nH2O) and iron(III) oxide-hydroxide (FeO(OH), ...
: targets
Emscripten
Emscripten is an LLVM/Clang-based compiler that compiles C and C++ source code to WebAssembly (or to a subset of JavaScript known as asm.js, its original compilation target before the advent of WebAssembly in 2017), primarily for execution in ...
*
Lua
Lua or LUA may refer to:
Science and technology
* Lua (programming language)
* Latvia University of Agriculture
* Last universal ancestor, in evolution
Ethnicity and language
* Lua people, of Laos
* Lawa people, of Thailand sometimes referred t ...
VM: Lua
virtual machine
In computing, a virtual machine (VM) is the virtualization/ emulation of a computer system. Virtual machines are based on computer architectures and provide functionality of a physical computer. Their implementations may involve specialized har ...
*
Perl
Perl is a family of two High-level programming language, high-level, General-purpose programming language, general-purpose, Interpreter (computing), interpreted, dynamic programming languages. "Perl" refers to Perl 5, but from 2000 to 2019 it ...
: port of (micro)perl-5.16.3
*
Python – port of
CPython
CPython is the reference implementation of the Python programming language. Written in C and Python, CPython is the default and most widely used implementation of the Python language.
CPython can be defined as both an interpreter and a compi ...
*
Ruby
A ruby is a pinkish red to blood-red colored gemstone, a variety of the mineral corundum (aluminium oxide). Ruby is one of the most popular traditional jewelry gems and is very durable. Other varieties of gem-quality corundum are called sapp ...
– port of Ruby
Application frameworks
* pepper.js: Ports of miscellaneous
PNaCl
Google Native Client (NaCl) is a discontinued sandboxing technology for running either a subset of Intel x86, ARM, or MIPS native code, or a portable executable, in a sandbox. It allows safely running native code from a web browser, independe ...
apps (earth, voronoi, bullet, etc.)
*
Qt: ports of various Qt demos, plus KDE apps, such as
Kate Kate name may refer to:
People and fictional characters
* Kate (given name), a list of people and fictional characters with the given name or nickname
* Gyula Káté (born 1982), Hungarian amateur boxer
* Lauren Kate (born 1981), American aut ...
Programs and libraries
*
OpenGL
OpenGL (Open Graphics Library) is a cross-language, cross-platform application programming interface (API) for rendering 2D and 3D vector graphics. The API is typically used to interact with a graphics processing unit (GPU), to achieve ha ...
,
SDL, and
SDL2
*
Vim
Vim means enthusiasm and vigor. It may also refer to:
* Vim (cleaning product)
* Vim Comedy Company, a movie studio
* Vim Records
* Vimentin, a protein
* "Vim", a song by Machine Head on the album ''Through the Ashes of Empires''
* Vim (text ed ...
(Vi IMproved)
*
FreeType:
TrueType
TrueType is an outline font standard developed by Apple in the late 1980s as a competitor to Adobe's Type 1 fonts used in PostScript. It has become the most common format for fonts on the classic Mac OS, macOS, and Microsoft Windows operating ...
font rendering
Font rasterization is the process of converting text from a vector description (as found in scalable fonts such as TrueType fonts) to a raster or bitmap description. This often involves some anti-aliasing on screen text to make it smoother a ...
in JavaScript, using FreeType
*
SQLite
SQLite (, ) is a database engine written in the C programming language. It is not a standalone app; rather, it is a library that software developers embed in their apps. As such, it belongs to the family of embedded databases. It is the mo ...
*
GNU Privacy Guard
GNU Privacy Guard (GnuPG or GPG) is a free-software replacement for Symantec's PGP cryptographic software suite. The software is compliant with RFC 4880, the IETF standards-track specification of OpenPGP. Modern versions of PGP are interoper ...
*
ctags
Ctags is a programming tool that generates an index (or tag) file of names found in source and header files of various programming languages to aid code comprehension. Depending on the language, functions, variables, class members, macros and ...
*
gnuplot
gnuplot is a command-line and GUI program that can generate two- and three-dimensional plots of functions, data, and data fits. The program runs on all major computers and operating systems (Linux, Unix, Microsoft Windows, macOS, FreeDOS ...
*
Graphviz
Graphviz (short for ''Graph Visualization Software'') is a package of open-source tools initiated by AT&T Labs Research for drawing graphs specified in DOT language scripts having the file name extension "gv". It also provides libraries for s ...
*
zlib
zlib ( or "zeta-lib", ) is a software library used for data compression. zlib was written by Jean-loup Gailly and Mark Adler and is an abstraction of the DEFLATE compression algorithm used in their gzip file compression program. zlib is also a ...
Game engines
*
Unreal Engine 3
Unreal Engine (UE) is a 3D computer graphics game engine developed by Epic Games, first showcased in the 1998 first-person shooter game ''Unreal''. Initially developed for PC first-person shooters, it has since been used in a variety of genres ...
: was ported in 4 days
*
Unreal Engine 4
Unreal Engine (UE) is a 3D computer graphics game engine developed by Epic Games, first showcased in the 1998 first-person shooter game ''Unreal (1998 video game), Unreal''. Initially developed for Personal computer, PC first-person shooters, i ...
*
Unity
Unity may refer to:
Buildings
* Unity Building, Oregon, Illinois, US; a historic building
* Unity Building (Chicago), Illinois, US; a skyscraper
* Unity Buildings, Liverpool, UK; two buildings in England
* Unity Chapel, Wyoming, Wisconsin, US; a ...
*
ScummVM
Script Creation Utility for Maniac Mansion Virtual Machine (ScummVM) is a set of game engine recreations. Originally designed to play LucasArts adventure games that use the SCUMM system, it also supports a variety of non-SCUMM games by companie ...
, which supports numerous classic adventure games
*
Godot
Games
* ''
Doom
Doom is another name for damnation.
Doom may also refer to:
People
* Doom (professional wrestling), the tag team of Ron Simmons and Butch Reed
* Daniel Doom (born 1934), Belgian cyclist
* Debbie Doom (born 1963), American softball pitcher
* ...
'': the open source
Freedoom
''Doom'' WAD is the default format of package files for the video game '' Doom'' and its sequel '' Doom II: Hell on Earth'', that contain sprites, levels, and game data. WAD stands for ''Where's All the Data?'' Immediately after its release in 199 ...
game assets running on
PrBoom
The present article is a list of known platforms to which ''Doom'' has been confirmed to be ported.
''Doom'' is one of the most widely ported video games. Since the original MS-DOS version, it has been released officially for a number of operatin ...
, which is based on the open source Doom code
* ''
SuperTux
''SuperTux'' is a free and open-source two-dimensional platform video game published under the GNU General Public License (GPL). The game was inspired by Nintendo's '' Super Mario Bros.'' series; instead of Mario, the hero in the game is Tux ...
''
* ''
Dune II
A dune is a landform composed of wind- or water-driven sand. It typically takes the form of a mound, ridge, or hill. An area with dunes is called a dune system or a dune complex. A large dune complex is called a dune field, while broad, f ...
'' via OpenDune
* ''
BananaBread'' based on
Cube 2
* Every game in the
Humble Mozilla Bundle (''
Super Hexagon
''Super Hexagon'' is an indie rhythm video game developed by Terry Cavanagh, with music composed by Chipzel. Originally released for iOS in September 2012, versions for Windows and macOS were released 3 months later, and Android, BlackBerry an ...
'', ''
AaAaAA! for the Awesome'', ''
Osmos
''Osmos'' is a 2009 puzzle video game developed by Canadian developer Hemisphere Games for various systems such as Microsoft Windows, Mac OS X, Linux, OnLive, iPad, iPhone, iPod Touch and Android.
Gameplay
The aim of the game is to propel one ...
'', ''
Zen Bound 2'', ''
Dustforce DX'', ''
Voxatron
The following page is an alphabetical section from the list of PC games
The following list of PC games contains an alphabetized and segmented table of video games that are playable on the PC, but not necessarily exclusively on the PC. It includes ...
'', ''
FTL: Advanced Edition'' and ''
Democracy 3
''Democracy'' is a government simulation game that was first developed by Positech Games in 2005, with a sequel released in December 2007, a third game in 2013 and a fourth in 2022. The player plays as if they are the president or prime minister ...
'')
Emulators
* EM-DOSBox: an Emscripten port of
DOSBox
DOSBox is a free and open-source emulator which runs software for MS-DOS compatible disk operating systems—primarily video games. It was first released in 2002, when DOS technology was becoming obsolete. Its adoption for running DOS games i ...
*
Start9.io: a web emulation platform targeting multiple gaming architectures
* JSMESS: a port of the
MESS
The mess (also called a mess deck aboard ships) is a designated area where military personnel socialize, eat and (in some cases) live. The term is also used to indicate the groups of military personnel who belong to separate messes, such as the o ...
emulator for many game consoles and computer systems
Mathematics
* HTML5 Fractal Playground – draws iterating-function generated
fractals
In mathematics, a fractal is a geometric shape containing detailed structure at arbitrarily small scales, usually having a fractal dimension strictly exceeding the topological dimension. Many fractals appear similar at various scales, as ill ...
, such as the
Mandelbrot set
The Mandelbrot set () is the set of complex numbers c for which the function f_c(z)=z^2+c does not diverge to infinity when iterated from z=0, i.e., for which the sequence f_c(0), f_c(f_c(0)), etc., remains bounded in absolute value.
This ...
.
Deprecation
asm.js is mostly rendered obsolete with the introduction of WebAssembly (wasm), which has a bytecode format that is faster to parse. Efforts to extend JavaScript with more low-level features like SIMD.js has also been suspended since 2017.
asm.js remains useful primarily as a "fallback" for wasm, through a program written by the WebAssembly organization that converts wasm to asm.js. There is no dedicated converter from asm.js to wasm, but
TypeScript
TypeScript is a free and open source programming language developed and maintained by Microsoft. It is a strict syntactical superset of JavaScript and adds optional static typing to the language. It is designed for the development of large appl ...
-to-wasm compilers can be partially used. The reference WebAssembly emitter binaryen used to contain an module, but it was removed after Emscripten stopped using it.
[ (See also th]
PR#3042
)
See also
*
CrossBridge
The sliding filament theory explains the mechanism of muscle contraction based on muscle proteins that slide past each other to generate movement. According to the sliding filament theory, the myosin (thick filaments) of muscle fibers slide past ...
*
Emscripten
Emscripten is an LLVM/Clang-based compiler that compiles C and C++ source code to WebAssembly (or to a subset of JavaScript known as asm.js, its original compilation target before the advent of WebAssembly in 2017), primarily for execution in ...
*
Google Native Client
Google Native Client (NaCl) is a discontinued sandboxing technology for running either a subset of Intel x86, ARM, or MIPS native code, or a portable executable, in a sandbox. It allows safely running native code from a web browser, independ ...
(NaCl)
*
RPython
PyPy () is an implementation of the Python programming language. PyPy often runs faster than the standard implementation CPython because PyPy uses a just-in-time compiler. Most Python code runs well on PyPy except for code that depends on CPyth ...
*
WebAssembly
WebAssembly (sometimes abbreviated Wasm) defines a portable binary-code format and a corresponding text format for executable programs as well as software interfaces for facilitating interactions between such programs and their host environmen ...
– a bytecode for browsers, intended to be faster to parse than asm.js
References
External links
*
{{Mozilla
JavaScript
Mozilla
Web programming
Articles with example C code