Mozilla JS Development Newsletter 12/07-1/24

ECMAScript 6

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.

GC

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.

IonMonkey

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.

Debugging

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).