Higgs: Upcoming Talks & New Contributions

Upcoming talks about Higgs

I'll be giving a talk about my research at mloc.js in Budapest on February 13th. This is going to be the first of my conference talks that is entirely focused on Higgs and my current research. The talk will be filmed and should appear online on InfoQ and Ustream. I'll also be putting the slides online after the talk. In other news, I received an invitation from Andrei Alexandrescu to present at DConf  this year again. I'm quite looking forward to this as I had a very positive experience at DConf 2013, where I met many very knowledgeable systems engineers (I may also have a crush on the SF bay area).

For those who would like to see some results of my current research right away, I've made available a paper which was recently submitted to CC 2014, but unfortunately rejected. This paper explains in depth the technique of basic block versioning, and gives results comparing it to a traditional type propagation analysis. The main reason stated for rejection is that we did not provide comparisons in terms of overall running time (due to limitations of Higgs). I still believe the results are quite encouraging and make a convincing case for basic block versioning. My PhD advisor and I will be submitting an improved version of this paper in a few months.

New JIT online

The lazy incremental JIT I've been working on is now in the master branch. It's far from complete, but it's reached the crucial milestone where it passes all of the Higgs tests and runs all of the benchmarks. There is currently no type propagation and no register allocation, but I've already started implementing incremental inlining of primitive calls. The inlining is currently done in a rather unsophisticated manner which doesn't eliminate all call overhead, but this will be fine-tuned.

Performance-wise, the new JIT is comparable to the old one. It's faster on most of the larger benchmarks, probably because there is no more interpreter and the new JIT generates machine code faster. Thus, there is less warmup time required before reaching full speed. I will be working on reintegrating the full power of basic block versioning and improving the performance within the next few months. I expect to exceed the performance of the old JIT on all benchmarks within a few weeks.

New contributions

Following our recent announcement that we were looking for contributors, we've started to build a Higgs wiki and created a #higgsjs channel on freenode IRC. It seems that this work has paid off as we've gotten several pull requests for bug fixes and improvements.

Notably, zimbabao has sent us bug fixes to the runtime library, the regex engine and the standard library. Thanks to him, the SunSpider crypto-aes benchmark finally works properly. He's even fixed bugs I wasn't even aware of! Óscar Toledo has helped us find and track down two parser and two semantic bugs using his nanochess JS1K program. I've also taken the initiative of fixing several minor semantic bugs to make Higgs respect the ES5 specification more closely.

My number one, Molly Everett, has completed a new test framework which will make it easy to add new functionality and regression tests by including a JS file in the source/tests directory and sending us a pull request. She's also set up the travis build test system to notify us if a build fails. Molly is currently working on an improved, more convenient version of our FFI library. We have plans to build bindings to SDL and network APIs, among other things.

Should you wish to help, we're always looking to make Higgs more JS compliant, add new useful features and grow our collection of tests. If you find a bug in Higgs, please open an issue and/or send us a pull request with a failing test. You're also welcome to write useful libraries to be included with Higgs. You can help us make Higgs insanely great.