JavaScript:ActionMonkey: Difference between revisions
No edit summary |
(Mark as Outdated) |
||
(62 intermediate revisions by 10 users not shown) | |||
Line 1: | Line 1: | ||
{{OutdatedSpiderMonkey}} | |||
'''ActionMonkey''' was the code-name for a project to integrate [[Tamarin]] and [[JavaScript:SpiderMonkey|SpiderMonkey]] as part of [[Mozilla 2]]. | |||
The goal was to merge SpiderMonkey and Tamarin into a single VM that would implement the ECMAScript Edition 4 standard and could be used by both Adobe and Mozilla. Particulars: | |||
* ActionMonkey would continue to support the [http://developer.mozilla.org/en/docs/JSAPI_Reference JSAPI], SpiderMonkey's existing C API, with necessary additions and as few deletions as possible. People currently using SpiderMonkey as a library would be able to install a new copy of the SpiderMonkey libraries, recompile their code, and run it without major changes. | |||
* ActionMonkey would have threading support. (See [http://developer.mozilla.org/en/docs/JS_THREADSAFE JS_THREADSAFE].) | |||
* ActionMonkey would use the [[Tamarin:Tracing|tamarin-tracing]] interpreter and JIT, to run existing JavaScript code (without AS3-style type annotations) fast. | |||
* SpiderMonkey's [http://lxr.mozilla.org/mozilla/source/js/src/jslock.h thread safety] and [http://lxr.mozilla.org/mozilla/source/js/src/jsscope.h property tree] integrated/reimplemented in Tamarin. | * SpiderMonkey's [http://lxr.mozilla.org/mozilla/source/js/src/jslock.h thread safety] and [http://lxr.mozilla.org/mozilla/source/js/src/jsscope.h property tree] were to be integrated/reimplemented in Tamarin. | ||
* | * ActionMonkey was intended to use SpiderMonkey's existing compiler to generate Tamarin bytecode (ABC) for the Tamarin VM to execute. (SpiderMonkey's compiler is faster and contains some Web compatibility quirks that might be tedious to reimplement in a new compiler.) | ||
* SpiderMonkey's GC was to be replaced by Tamarin's [http://developer.mozilla.org/en/docs/MMgc MMgc], evolved as needed. | |||
* | |||
* [http://www.cs.cornell.edu/Info/People/jgm/lang-based-security/ Information flow] VM support for better security models. | * [http://www.cs.cornell.edu/Info/People/jgm/lang-based-security/ Information flow] VM support for better security models. | ||
The project was canceled mainly because tamarin-tracing never caught up to SpiderMonkey's speed. Tamarin-tracing also would have needed a lot of other features to be useful on the web: | |||
* Support for a dynamic global object. | |||
* Support for generators. | |||
* Support for other arcane JSAPI features (like split objects) and JS language features | |||
* Good support for reentrancy (calling from JS to C++ to JS) | |||
* A way to load and run bytecode from memory without going to disk (to implement eval) |
Latest revision as of 21:22, 27 April 2021
ActionMonkey was the code-name for a project to integrate Tamarin and SpiderMonkey as part of Mozilla 2.
The goal was to merge SpiderMonkey and Tamarin into a single VM that would implement the ECMAScript Edition 4 standard and could be used by both Adobe and Mozilla. Particulars:
- ActionMonkey would continue to support the JSAPI, SpiderMonkey's existing C API, with necessary additions and as few deletions as possible. People currently using SpiderMonkey as a library would be able to install a new copy of the SpiderMonkey libraries, recompile their code, and run it without major changes.
- ActionMonkey would have threading support. (See JS_THREADSAFE.)
- ActionMonkey would use the tamarin-tracing interpreter and JIT, to run existing JavaScript code (without AS3-style type annotations) fast.
- SpiderMonkey's thread safety and property tree were to be integrated/reimplemented in Tamarin.
- ActionMonkey was intended to use SpiderMonkey's existing compiler to generate Tamarin bytecode (ABC) for the Tamarin VM to execute. (SpiderMonkey's compiler is faster and contains some Web compatibility quirks that might be tedious to reimplement in a new compiler.)
- SpiderMonkey's GC was to be replaced by Tamarin's MMgc, evolved as needed.
- Information flow VM support for better security models.
The project was canceled mainly because tamarin-tracing never caught up to SpiderMonkey's speed. Tamarin-tracing also would have needed a lot of other features to be useful on the web:
- Support for a dynamic global object.
- Support for generators.
- Support for other arcane JSAPI features (like split objects) and JS language features
- Good support for reentrancy (calling from JS to C++ to JS)
- A way to load and run bytecode from memory without going to disk (to implement eval)