0.8.3
Bali 0.8.3 is out after quite a long time. I'm mostly just preparing it to be as stable and usable for a project. It comes with about ~40 commits.
Fixes
- Passes in Madhyasthal are now a sequence, not a set. This allows certain passes to be repeated after certain other passes.
- Madhyasthal's copy propagation pass is more aggressive now
- Madhyasthal's DCE pass is more careful when dealing with globals now
- The tokenizer is now 100% pure and does not use logging as there was no point in doing so.
- The parser no longer uses logging as there was no point in doing so.
- Bytecode generation no longer crashes in certain cases if a reassignment's literal is a
null. bali::grammar::Tokenizeris no longer a GC'd type as it doesn't require it.- The parser no longer (ab)uses
deepCopy()for the tokenizer. - The x64 midtier JIT now uses more diagnosable constants instead of random values that might cause undiagnosable crashes in edge cases (dummy jump addresses).
String.prototype.indexOf()now relies solely onstrutils::find(), as Kaleidoscope was way too finnicky and unpredictable in many cases, while providing a negligible performance improvement.- Fixed a small bug in
Tokenizer::advance()that'd make column reporting inaccurate in some cases
Optimizations
- Massive speedups in the bytecode interpreter by no longer relying on a function to find the currently executing clause/function. This was incredibly hot and required way too much computation for an otherwise simple task.
- Slimmed down
bali::runtime::vm::interpreter::Operationby removing old fields from very old experiments.
Additions
- Madhyasthal can now lower and compile the following operations, allowing it to compile a lot of loops:
*LTI
*INC
*GTE
*GTEI - Madhyasthal's x64 can now perform proper conditional jump patching. It just takes the preexisting jump patching code to add some extra metadata required for emitting conditional jumps.
- Laid down a lot of infrastructure for mid-execution JIT patching, letting compiled segments take over from the middle of interpreting a function, possibly providing massive performance speedups. Currently disabled as it caused major semantic breakage, but I'd love to revisit it in the future.
- Bumped
nim-urlto 0.2.0 from 0.1.0, this brings various fixes and major performance optimizations along with it, along with AArch64 SIMD support for its parser.