JavaScript:ActionMonkey: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
Line 25: Line 25:
Integrate SpiderMonkey more closely with MMgc.
Integrate SpiderMonkey more closely with MMgc.


* Make <code>MMgc::Mark()</code> call SpiderMonkey <code>trace()</code> 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 <code>GCThingFlags</code>.  The type tag doubles as a hook for marking.
* Make <code>MMgc::Mark()</code> call SpiderMonkey <code>trace()</code> 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 <code>GCThingFlags</code>.


* Get rid of js_GetGCThingFlags.   
* Get rid of js_GetGCThingFlags.   
** The type bits: move to an MMgc page-level type tag.  (Note:  The cycle collector sneakily uses these, in <tt>nsXPConnect.cpp</tt>; it will be changed.)
** The type bits: move to an MMgc page-level type tag.  (Note:  The cycle collector sneakily uses these, in <tt>nsXPConnect.cpp</tt>; it will be changed.)
** The <code>GCF_LOCK</code> bit: mainly replaced by allowing MMgc to scan <code>rt-&gt;gcLocksHash</code>.  There is also a string optimization that uses this bit.  It's yet to be determined what to do about that.
** The <code>GCF_LOCK</code> bit: mainly replaced by allowing MMgc to scan <code>rt-&gt;gcLocksHash</code>.  There is also a string optimization that uses this bit.  It's yet to be determined what to do about that.
** The <code>GCF_MUTABLE</code> bit:  move into <code>JSString</code>.
** The <code>GCF_MUTABLE</code> bit:  move into <code>JSString</code>.
** The <code>GCF_SYSTEM</code> bit:  To be determined.
** The <code>GCF_SYSTEM</code> bit:  To be determined.


More to come.
* 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.

Revision as of 19:27, 19 July 2007

ActionMonkey is the code-name for the project to integrate Tamarin and SpiderMonkey as part of Mozilla 2.

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 jsapi.h.
  • SpiderMonkey's thread safety and property tree integrated/reimplemented in Tamarin.
  • Replacement of SpiderMonkey's decompiler with a better decompiler that can work with ABC.
  • Replacement of SpiderMonkey's GC with 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 Trace Trees.
  • 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.