JavaScript:ActionMonkey

From MozillaWiki
Revision as of 15:47, 21 August 2007 by Jorend (talk | contribs) (→‎Stage 1)
Jump to navigation Jump to search

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.

Building ActionMonkey

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

You should be able to build a working JS shell or Firefox using these steps. If it doesn't work for you, please file a bug using this link (you might need to log into Bugzilla first).

  • Install Python 2.4 or later.
  • Install Mercurial.
  • Install GNU make 3.81 or later.
  • hg clone http://hg.mozilla.org/actionmonkey
  • cd actionmonkey
  • python client.py checkout (The actionmonkey repository doesn't contain all the source files you need. This Python script grabs all the other source files (from other repositories, both CVS and hg) and puts them into your tree in the right places.)
  • Then build as you normally would. (Hint: For a quick debug build of js, try cd js/src; make -f Makefile.ref.)

Note: If you plan on using Mercurial for active development, you should consider installing a 3-way merge program, as described here.

Common errors

  • Users/kaitlin/dev/actionmonkey/js/tamarin/manifest.mk:48: *** missing `endif'. Stop. - You're using an older version of GNU make. Install GNU make 3.81 or later, and make sure you don't still have an old version in your PATH.
  • no module named subprocess - You're using an older version of Python to run client.py.

Stage 0

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


Stage 1

Integrate SpiderMonkey and Mozilla DOM more closely with MMgc. See the ActionMonkey Stage 1 tracking bug, bug 393023. (Under "Depends on", you can see a list of bugs slated for stage 1.)

Stage 1 work includes:

  • bug 392883 - Get rid of js_GetGCThingFlags.
    • The type bits: use the C++ vtable, maybe. (Note: The cycle collector sneakily uses these, in nsXPConnect.cpp; it will be changed.)
    • The GCF_LOCK bit: already gone in actionmonkey branch, mainly replaced by allowing MMgc to scan rt->gcLocksHash.
    • The GCF_MUTABLE bit: move into JSString. Already done in CVS trunk.
    • The GCF_SYSTEM bit: To be determined.
  • bug 388622 and bug 391676 - 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.
  • bug 393034 - Start allocating Mozilla DOM objects using MMgc.