Main menu:

Site search



Mozilla JS Development Newsletter 12/07-1/24

I was holding off on updates around the holidays, when things were kind of quiet, but lots of stuff is happening again:

ECMAScript 6

Jason landed Simple Maps and Sets per the draft specification. Yay!

Speaking of which, Chris Leary blogged yesterday about how you can increase your badassery, stop him from harassing motorists on 101, and make all sorts of wonderful things happen by adding even more ES6 features to SpiderMonkey.


Incremental GC continues to move forward: Bill put a series of patches up for review last week, and about half of them have r+ now. I’ve been playing a bit with the larch branch (which has IGC), and it’s looking really nice, especially for games.

Generational GC is also powering up: Terrence has been adding write barriers for generational GC.


The IonMonkey infrastructure is complete, barring any needed changes that are discovered later. (Which of course has already happened: Chris came up with a much simpler way of doing on-stack invalidation.) So the team will start to shift focus to optimization, and they’ve already got a good score on 3 SunSpider benchmarks.


Jim (with some help from Jason) continues to firm up the new debugger API. They also created a github project, jorendb, which is a demo command-line debugger for JavaScript.

Stuff that might affect you

Simplifications and cleanups continue:

Jeff changed our integer types to use stdint.h: where we used to say uint32 (or theoretically even JSUint32 (shudder)), we now say uint32_t. The immediate reason was to fix a recurring bug where another header file had fixed-width integer types with the same names but slightly different definitions, causing occasional breakage when the different definitions crossed. But it’s also nice to just use the standard types and not have anything special to fix or learn about, even it if it does cost a _t, which was somewhat controversial.

Luke removed JSThreadData and JSThread. This means that JSRuntimes are now single-threaded, so if you want to use SpiderMonkey with multiple threads, the only supported way to do it is to make multiple non-communicating JSRuntimes. This is a great simplification for the engine and removes a bunch of sources of bugs.

‘Ms2ger’ did various cleanups in the engine, especially around header files and reducing the number of installed header files toward just the actual API headers (i.e., not allowing users to poke around in the guts of the engine through normally included headers).

Other Stuff

‘qjivy’ added a MIPS backend for our JIT compilers.

Tom Schuster fixed a bunch of bugs and added support to make "eval([...])" fast, like our existing optimization for eval({...}).

‘Adam’ rewrote part of the decompiler printer buffer in order to simplify one of our memory allocators.


Comment from John
Time: January 24, 2012, 4:33 pm


Comment from Geoff Lawson
Time: January 25, 2012, 12:25 am

Which release of Firefox is likely to have incremental garbage collection? I couldn’t see it listed as a feature in any upcoming releases (at

Comment from Tom Schuster
Time: January 25, 2012, 1:08 am

>I was holding off on updates around the holidays, when things were kind of quiet, but >lots of stuff is happening again:
I took the liberty to write such an update,

Comment from Nicholas Nethercote
Time: January 25, 2012, 2:48 am

s/Terrance/Terrence/ 🙂

Comment from abral
Time: January 25, 2012, 3:29 pm

I think the MIPS backend was written by a MIPS engineer, Chao-ying Fu.