JavaScript ActionMonkey: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(Ok restoring page from Google Cache, Several pages link to this outside of the wiki. Why was it removed?)
 
(Ah, never mind, incorrect links (on Mozilla.com) link to this, so creating redirect.)
 
Line 1: Line 1:
ActionMonkey is the code-name for the project to integrate [[Tamarin]] and [[SpiderMonkey]] as part of Mozilla 2.
#REDIRECT [[JavaScript:ActionMonkey]]
 
Want to help? Write to jason dot orendorff at gmail dot com. Or visit [irc://irc.mozilla.org/jslang] and say hi.
 
==Goals==
 
The goals are:
 
*Preservation (with necessary additions and as few deletions as possible) of [http://lxr.mozilla.org/mozilla/source/js/src/jsapi.h jsapi.h].
*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.
*Replacement of SpiderMonkey's decompiler with a better decompiler that can work with [http://hg.mozilla.org/tamarin-central/?file/ef6478309778/core/opcodes.tbl ABC].
*Replacement of SpiderMonkey's GC with [http://wiki.mozilla.org/Tamarin:MMgc Tamarin:MMgc], evolved as needed.
*Replacement of SpiderMonkey's interpreter by an evolved version of Tamarin's.
*Advanced JIT optimization for hot paths and untyped code, inspired by [http://www.ics.uci.edu/~franz/Site/pubs-pdf/ICS-TR-06-16.pdf Trace Trees].
*[http://www.cs.cornell.edu/Info/People/jgm/lang-based-security/ Information flow] VM support for better security models.
 
 
==Stage 0==
 
Replace SpiderMonkey's GC with Tamarin's GC (MMgc). See [[JavaScript:ActionMonkey:Stage 0 Whiteboard]].
 
Work is underway in the http://hg.mozilla.org/actionmonkey and http://hg.mozilla.org/actionmonkey-tamarin [[Mercurial]] repositories. (The actionmonkey repo is a hard hat area, one step removed from the primary mozilla-central repository. This is because we expect things will break intermittently. Also because some of the people working on this aren't CVS committers yet, myself included. -jorendorff)
 
==Stage 1==
 
Integrate SpiderMonkey more closely with MMgc.
 
#Make MMgc::Mark() call SpiderMonkey trace() methods. The plan is to add a per-page type tag to MMgc; this takes over the job of the type bits in SpiderMonkey's GCThingFlags.
 
*Get rid of js_GetGCThingFlags.
*The type bits: move to an MMgc page-level type tag. (Note: The cycle collector sneakily uses these, in nsXPConnect.cpp; it will be changed.)
*The GCF_LOCK bit: mainly replaced by allowing MMgc to scan rt->gcLocksHash. There is also a string optimization that uses this bit. It's yet to be determined what to do about that.
**The GCF_MUTABLE bit: move into JSString.
**The GCF_SYSTEM bit: To be determined.
 
*Drop weak roots, newborns, and local root scopes (if they're not already gone in stage 0). These will be replaced by MMgc's conservative stack scanning.

Latest revision as of 16:03, 26 July 2007