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:
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.
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).
‘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
‘Adam’ rewrote part of the decompiler printer buffer in order to simplify one of our memory allocators.