JavaScript:ActionMonkey: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(build info)
Line 14: Line 14:
* 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].
* 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.
* [http://www.cs.cornell.edu/Info/People/jgm/lang-based-security/ Information flow] VM support for better security models.
== The ActionMonkey development environment ==
All ActionMonkey work is happening in the http://hg.mozilla.org/actionmonkey and http://hg.mozilla.org/actionmonkey-tamarin [[Mercurial]] repositories.
(These repositories are 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)
'''How to build:''' Things work slightly differently in Mercurial land.  You'll want to be familiar with building in CVS first.  After you're comfortable with that, try this:
* Install Mercurial.  (On Mac with MacPorts, <tt>sudo port install mercurial</tt>)
* Install Python 2.4 or later.  (<tt>sudo port install python24</tt>)
* <tt>hg clone http://hg.mozilla.org/actionmonkey</tt>
* <tt>cd actionmonkey</tt>
* <tt>python client.py</tt>
* Then build as you normally would.
You should be able to build a working JS shell, Firefox, or other app this way.  If it doesn't work for you, please file a bug with "ActionMonkey" in the summary and assign it to <tt>jorendorff</tt>.


== Stage 0 ==
== Stage 0 ==
Line 19: Line 37:
Replace SpiderMonkey's GC with Tamarin's GC (MMgc).  See [[JavaScript:ActionMonkey:Stage 0 Whiteboard]].
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 ==
== Stage 1 ==

Revision as of 15:56, 24 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.

The ActionMonkey development environment

All ActionMonkey work is happening in the http://hg.mozilla.org/actionmonkey and http://hg.mozilla.org/actionmonkey-tamarin Mercurial repositories.

(These repositories are 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)

How to build: Things work slightly differently in Mercurial land. You'll want to be familiar with building in CVS first. After you're comfortable with that, try this:

  • Install Mercurial. (On Mac with MacPorts, sudo port install mercurial)
  • Install Python 2.4 or later. (sudo port install python24)
  • hg clone http://hg.mozilla.org/actionmonkey
  • cd actionmonkey
  • python client.py
  • Then build as you normally would.

You should be able to build a working JS shell, Firefox, or other app this way. If it doesn't work for you, please file a bug with "ActionMonkey" in the summary and assign it to jorendorff.


Stage 0

Replace SpiderMonkey's GC with Tamarin's GC (MMgc). See JavaScript:ActionMonkey:Stage 0 Whiteboard.


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.