RaptorJIT 1.0 is released!
Woohoo! You little ripper! Whacko the diddleo!
This has been a long and gradual development process. Much of the activity played out downstream in various Snabb application repos and forums. Thanks for staying tuned :).
Credit for this release must go to:
- The LuaJIT upstream community for developing such a fantastic JIT compiler and and keeping a steady stream of fixes flowing.
- The people who have contributed ideas, suggestions, testing, or code including @agladysh @alexandergall @capsadmin @corsix @darius @dpino @eugeneia @fsfod @igelhaus @javierguerragiraldez @justincormack @mejedi @pygy @raj2569 @szbnwer @takikawa @wingo. Thanks folks! (Sorry for all the names I missed!)
- The NLnet Foundation for supporting RaptorJIT development with a significant grant towards development of the release 1.0. NLnet have also indirectly supported RaptorJIT with grants to several Snabb projects that have been early RaptorJIT adopters and testers. Thank you NLnet!
- Everybody who decides to build a new application using RaptorJIT. Especially when the alternative is C/C++. Thank you and welcome to the community in advance :).
I am especially happy that I can now start working on the post-1.0 features with a clear conscience ;-)
Release notes
The major changes in RaptorJIT 1.0 compared with LuaJIT 2.1 are:
New features
-
Studio interactive diagnostics support (#179).
- Add comprehensive binary auditlog (#63 #64 #81).
- Add VMProfile sampling profiler (#66 #124 #140 #146 #147 #175 #176).
- Add debug information to map mcode back to IR code (#98).
- Add debug information for the declared name of each function prototype (#168).
- Add jit.tracebarrier() primitive (#116).
- Add log of recorded bytecodes to
jit_State
(#132).
- Make
jit.flush()
clear bytecode blacklistings (#134).
New optimizations
- Optimize instruction selection to avoid "slow LEA" (#55)
- Support JIT compilation of non-power-of-2 FFI pointer-difference arithmetic (#86)
- Reduce the incidence of "blacklisting" with revised JIT heuristics (#101)
- Support JIT of inline calls to blacklisted functions (IFUNC/IFUNCV) (#120)
- Optimize string-interning by removing a harmfully obsolete optimization (#150)
Changes to ease maintenance
- Continuous Integration testing (#6 #14 #47 #52 #192).
- Performance tests (#7 #59).
- Remove many build options, platforms, architectures (#5 #10 #19 #33 #34 #43 #44 #45 #69).
- Remove introspecton APIs (#9 #35 #36).
- Replace minilua with LuaJIT bootstrap (#28 #90).
- Make GCproto.lineinfo representation more uniform (#127 #144).
- Statically allocate bounded-size JIT structures (#131).
Administative changes
- Adopt Apache license (#3 #16).
- Adopt Code of Conduct (#4).