Skip to content

0.8.3

Latest

Choose a tag to compare

@xTrayambak xTrayambak released this 21 Feb 06:00
· 2 commits to master since this release

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::Tokenizer is 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 on strutils::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::Operation by 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-url to 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.