World Library  
Flag as Inappropriate
Email this Article

SpiderMonkey (Javascript engine)

Article Id: WHEBN0019280645
Reproduction Date:

Title: SpiderMonkey (Javascript engine)  
Author: World Heritage Encyclopedia
Language: English
Subject: Aptana, Tamarin (software)
Collection:
Publisher: World Heritage Encyclopedia
Publication
Date:
 

SpiderMonkey (Javascript engine)

SpiderMonkey
Developer(s) Mozilla Foundation / Mozilla Corporation
Development status Active
Written in C/C++
Operating system Cross-platform
Platform IA-32, x86-64, ARM, MIPS, SPARC [1]
Type JavaScript engine
License MPL[2]
Website

SpiderMonkey is the code name for the first-ever JavaScript engine, written by Brendan Eich at Netscape Communications, later released as open source and now maintained by the Mozilla Foundation. SpiderMonkey currently provides JavaScript support for Mozilla Firefox and various embeddings such as the GNOME 3 desktop.

History

Eich "wrote JavaScript in ten days" in 1995,[3] having been "recruited to Netscape with the promise of 'doing Scheme' in the browser".[4] (The idea of using Scheme was abandoned when "engineering management [decided] that the language must ‘look like Java’".[4]) In the fall of 1996, Eich, needing to "pay off [the] substantial technical debt" left from the first year, "stayed home for two weeks to rewrite Mocha as the codebase that became known as SpiderMonkey".[3] The name SpiderMonkey was chosen as a reference to the movie Beavis and Butt-head Do America, in which the character Tom Anderson mentions that the title characters were "whacking off like a couple of spider monkeys."[5] In 2011, Eich transferred management, termed ownership, of the SpiderMonkey code to Dave Mandelin.[3]

Standards

SpiderMonkey implements ECMA-262 edition 5 (ECMAScript) and several added features. ECMA-357 (ECMAScript for XML (E4X)) was dropped in early 2013 .[6]

Even though SpiderMonkey is used in Firefox, it does not provide host environments such as Document Object Model (DOM).

Internals

SpiderMonkey is written in C/C++ and contains an interpreter, several JIT compilers (formerly TraceMonkey; JägerMonkey, and currently IonMonkey), and a garbage collector.

TraceMonkey

TraceMonkey is the first JIT compiler written for the JavaScript language. The compiler was first released as part of SpiderMonkey in Firefox 3.5, providing "performance improvements ranging between 20 and 40 times faster" than the baseline interpreter in Firefox 3.[7]

Instead of compiling whole functions, TraceMonkey is a tracing JIT that operates by recording native code.

Improvements to JägerMonkey have made TraceMonkey obsolete, especially with the development of the SpiderMonkey type inference engine. TraceMonkey is absent from SpiderMonkey from Firefox 11 onward.[8]

JägerMonkey

JägerMonkey, internally named MethodJIT, is a whole-method JIT compiler designed to improve performance in cases where TraceMonkey cannot generate stable native code.[9][10] It was first released in Firefox 4 and has since entirely supplanted TraceMonkey.

JägerMonkey operates very differently from other compilers in its class: while typical compilers work by constructing and optimizing a control flow graph representing the function, JägerMonkey instead operates by iterating linearly forward through SpiderMonkey bytecode, the internal function representation. Although this prohibits optimizations that require instruction reordering, JägerMonkey compiling has the advantage of being very fast, which is useful for JavaScript since recompiling due to changing variable types is frequent.

Mozilla implemented a number of critical optimizations in JägerMonkey, most importantly polymorphic inline caches and type inference.[11]

The difference between TraceMonkey and JägerMonkey JIT techniques and the need for both was explained in dmandelin.

IonMonkey

IonMonkey is the name of Mozilla’s current JavaScript JIT compiler, which aims to enable many new optimizations that were impossible with the prior JägerMonkey architecture.[12]

IonMonkey is a more traditional compiler: it translates SpiderMonkey bytecode into a control flow graph, using static single assignment form (SSA) for the intermediate representation. This architecture enables well-known optimizations from other programming languages to be used for JavaScript, including type specialization, function inlining, linear-scan register allocation, dead code elimination, and loop-invariant code motion.[13]

The compiler can emit fast native code translations of JavaScript functions on the ARM, x86, and x86-64 platforms. It is the default engine since Firefox 18.[14]

OdinMonkey

OdinMonkey is the name of Mozilla's new optimization module for asm.js, an easily-compilable subset of JavaScript. OdinMonkey itself is not a JIT compiler, it uses the current JIT compiler. It's included with Firefox from release 22.

Use

SpiderMonkey is intended to be embedded in other applications that provide host environments for JavaScript. An incomplete list follows:

  • Mozilla Firefox, Thunderbird, SeaMonkey, and other applications that use the Mozilla application framework
  • Adobe Acrobat and Adobe Reader, Adobe Flash Professional, and Adobe Dreamweaver
  • GNOME desktop environment, version 3 and later
  • Yahoo! Widgets, formerly named Konfabulator
  • UOX3, an Ultima Online server emulator
  • Sphere suite of applications primarily intended to aid in designing role-playing games.
  • The Methabot web crawler uses SpiderMonkey in a multi-threaded environment for running user-provided filetype and URL parsers
  • It is also used in CouchDB database system written in Erlang - JavaScript is used for defining maps, filters, reduce functions and viewing data for example in HTML format
  • FreeSWITCH, open-source telephony engine, uses SpiderMonkey to provide users with ability to write call management scripts in JavaScript
  • SPOT SIP Engine, a standards-based commercial computer telephony product
  • ELinks, a text-based web browser, uses SpiderMonkey to support JavaScript[15]
  • Parts of SpiderMonkey are used in the Wine project's Jscript (re-)implementation[16]
  • SpiderMonkey is also used in many other open-source projects, see https://developer.mozilla.org/en/SpiderMonkey/FOSS
  • Riak uses SpiderMonkey as the runtime for JavaScript MapReduce operations[17]
  • Synchronet, a BBS, e-mail, Web, and application server using the SpiderMonkey engine
  • JavaScript OSA, a SpiderMonkey inter-process communication language for the Macintosh computer
  • 0 A.D., a real-time strategy game
  • SAP HANA Application Services, for creating business logic on the HANA engine/app server

SpiderMonkey includes a JavaScript Shell for interactive JavaScript development and for command-line invocation of JavaScript program files.[18]

Several[quantify] large organizations use SpiderMonkey to manage their JavaScript for front-end applications.

See also

Free software portal

References

External links

  • , SpiderMonkey (JavaScript-C) engine
  • Documentation for SpiderMonkey
  • Spidermonkey's page for Open Source Links
  • Are We Fast Yet? (Official benchmark and comparison)
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and USA.gov, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for USA.gov and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
 
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
 
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.
 


Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.