Higgs JavaScript Virtual Machine
github.com
github.com
If someone discovers a new way of implementing compilers efficiently, then just that has scientific merit. Whether the new technique has different performance characteristics surely is simply ground for further research?
Anyway, awesome that at least the engineering community is very interested in this work of hers.
edit: I noticed the compiler is written in D, awesome choice of tech!
[1] http://pointersgonewild.wordpress.com/2014/11/14/the-fastest...
[2] http://databasearchitects.blogspot.de/2014/09/experiments-hu...
EDIT: Many conferences also allow publishing papers without a deep comparison to exisiting research in the industrial session. This allows demonstrations of interesting implementation variants or system choices
EDIT 2: The review critisim in older blog posts "Conference reviewers criticized us for not discussing compilation times, and raised the issue that perhaps basic block versioning could drastically increase compilation times." is also very valid for a jit compiler. Again discussion does not have to mean that you have to be faster than all existing systems. Paper acceptance is always a little bit a random process, but at least in this case the review comments are valid from my point of view and her phd advisor should probably have detected these problems in proofreading before submitting. I really hope that the paper will finally be accepted!
Rather than inspecting a submission and thinking if there is anything in the paper that might be of interest to the community, could the paper spur real progress, the review process usually boils down to: can I quickly skim to find something / anything with which I can shoot down this paper and get away with it and get done with this review. This of course is a generalization, not implying that this is what happened here. Unfortunately, the prototypical reviewer has become more like a prosecutor. There are various reasons why this has become the norm, people are aware of it, some are even trying hard to figure out ways to make it better, whereas some believe this is exactly how it should be.
If accuracy of prediction was a concern, Copernican model would never have been accepted. It took years of polish to make the then new model attain the accuracy of the then prevalent model. Some would argue that such models (the Copernican for example) should remain unpublished and under covers till they beat state of the art. I personally do not agree with this view. I would rather have a reasonably well baked but not yet perfect model out in the ether soon so that the model can enlist / recruit other people to work on it. It really boils down to where in the spectrum should the community operate: (i) spammed by advances of questionable merit, with the community spending effort to winnow the good from the bad or (ii) making sure that only the rock solid ones get through, at the risk of delaying or extinguishing useful advance and waiting for a rediscovery.
For the same reason, many of the papers accepted seem very incremental and disappointing from a "new idea" perspective; and once you get the paper in, you have to go to the conference (I'm not a PLDI/POPL person)! One can always publish in a "new idea" PL conference (like my personal choice, Onward!, and there is even a new one called SNAPL from the people that brought us PLDI and POPL), but the points you get for publishing at those venues aren't as much as the true technical conferences (I don't care, since I have a job, but for a grad student, its a big deal).
My advice would be to suck it up and write a good PLDI paper. Be very thorough and honest with numbers and comparisons, and try to do it "right" (no pointless numbers that don't contribute to the story even if they might "work"). Then with a little bit of luck in PC reviewer selection (most PLDI reviewers are reasonable, some are not), the paper would probably get in. And if they do it right, it could be a really good paper that are lacking these days. Actually, that is another point: sometimes rejection is good, because the paper that gets in later is much much better. Patience.
"This work has significant novelty, but is lacking a comparison against technique XYZ."
For a Tier 1 conference submission, that's a rejection. For a journal, that's a revision request. Of course, in computer science, conferences are where the action is. But, there are attempts to split the difference. VLDB has moved to a more journal acceptance process (http://www.vldb.org/2015/submission-guidelines.html; rolling deadline at the start of each month through the year, reviewers can request revisions), which myself and some co-authors are currently going through. It is much more reasonable.
I like these features. This is simply awesome.
$ time ./higgs --e "var x = 4; x = x + 5; print(x)"
9
real 0m1.191s
e.g. my own little jitted language which compiles also to C like asm with tagged data, but with inner-loop type-checks, does it in $ time bin/potion -e'x = 4, x = x + 5, x print'
9
real 0m0.005s
so I don't buy the compiler overhead yet. type checks are not that slow. $ time ./perl6-p -e'my $x=4; $x=$x+5; print $x'
9
real 0m0.818s
$ time ./perl6-m -e'my $x=4; $x=$x+5; print $x'
9
real 0m0.614s
and uncompiled: $ time perl -e'my $x=4; $x=$x+5; print $x'
9
real 0m0.010sLooks very cool regardless
I'm sure the high paying job offers will be coming in thick and fast.
The project does have a secondary goal be a useful hobbyist platform and is making progress on that front.
(disclaimer: I'm a minor contributor.)
JIT: just in time
Compiler applies to both of them.
Clearly the term "JIT compiler" is a common way to describe such a system.
Would you call that an "AOT compiler"? Because most people wouldn't.
Some notable features of Higgs include:
- A self-hosted runtime written in extended JavaScript
- Lazy/incremental JIT compilation Context-driven versioning of basic blocks
- A Foreign Function Interface (FFI) system to interface with C code
- An interactive shell (REPL) with access to low-level primitives.
- A simple module system and a set of useful libraries.
Example usage:
higgs --e "var x = 4; x = x + 5; print(x)"
or higgs file.js
[1] http://pointersgonewild.wordpress.com/higgs/