Skip to content

Releases: ferus-web/bali

0.6.2

17 Feb 10:24
ce8d37d
Compare
Choose a tag to compare

0.6.2 is out with a single fix that fixes the final (known) regression that entered the codebase with 0.6.x! 🎊

Fixes

  • Sequence types no longer hold pointers to atoms, holding full atoms instead.
  • Removed Herobrine

Additions

  • Added map parsing, although the code generation part is not complete yet.

Upcoming Features

For the next version, you can expect the Set type to be implemented, alongside another (hopefully successful) attempt to implement bytecode callable atoms for functions-as-values to work.

0.6.1

15 Feb 16:36
Compare
Choose a tag to compare

0.6.1 is out with a single bug fix. It fixes a silly oversight that caused most programs that allocated memory to fail.

0.6.0

15 Feb 16:23
fd0d4ff
Compare
Choose a tag to compare

0.6.0 is a new series, overhauling the engine entirely.

Changes

  • The VM is now in-tree.
  • The garbage collector has been swapped by Boehm-Demers-Weiser Conservative GC, meaning

This is a breaking release, expect stuff to break. File bug reports for regressions.

0.5.0

26 Jan 15:14
Compare
Choose a tag to compare

"It is far better to grasp the universe as it really is than to persist in delusion, however satisfying and reassuring."

Bali 0.5.0 is out with multiple fixes, new features, adding up to 51 commits in total.
Most importantly, Bali now has support for true and loose equality now! This brings us one step closer to being more compliant.

Bug Fixes

  • Grammar: Allow constructors as call arguments
  • Grammar/Runtime: Allow identifiers to be wasted
  • Fixed regressions in the URL functions since the move to JSString
  • ToNumber() now calls ToPrimitive() whenever necessary
  • Fixed double codegen for some functions
  • Removed Herobrine

Additions

  • Added String() function which is just another way to call the constructor
  • Balde: Added --dump-statistics
  • Implemented String.prototype.codePointAt
  • String(s) now have their length property attached to them, which just contains how many UTF-16 code units the string has.
  • Implemented strict and loose equality. Issues with strict equality will be ironed out in the rest of the 0.5.x series.

Note

I will not be making any new releases until 15th of March, as I have to give my examinations. Until then, consider this project inactive.

0.4.4

14 Jan 06:34
Compare
Choose a tag to compare

This is a new Bali release with 27 new commits, bringing many new additions and bug fixes.

Bug Fixes

  • Tokenizer tokenizes floating point numbers incorrectly (#68)
  • Field accesses in Math don't work due to a codegen bug (#67)
  • Don't use explicit casts in getDateFromYear as that causes bugs
  • ToString() no longer gives an incorrect hint in some cases now to ToPrimitive()
  • ToPrimitive() now properly raises TypeError(s) on failure
  • Removed Herobrine

Additions

  • Implemented String.fromCharCode
  • Implemented Date.prototype.toString
  • Implemented Date.prototype.getYear
  • Implemented Date.prototype.getFullYear
  • Implemented Date.prototype.getDay
  • Implemented Date.prototype.getDate
  • Improved Test262 harnesses
  • Implemented ternary operations
  • Added rudimentary support for the BigInt type using GMP
  • Implemented isFiniteNumber(), isBigInt() and isIntegralNumber()
  • Bumped Mirage to 1.1.0, which brings the new BigInteger type

0.4.31

07 Jan 07:39
Compare
Choose a tag to compare

Bali 0.4.31 is out with a single compliance fix.

Bug Fixes

  • typeof now returns "string" instead of "object" for strings created with the String constructor syntax (i.e, new String)

0.4.3

06 Jan 13:43
Compare
Choose a tag to compare

Bali 0.4.3 is out with 25 commits in total and multiple new features, optimizations and fixes.
There are 6 new additions and 2 bug fixes. There should not be any breaking changes migrating to this release.

New Additions

  • Implemented two new bytecode optimizations:
  • Loop allocation elimination (to reduce expensive loops' memory footprint)
  • Return-value register cleaner (to reduce memory usage when calling functions and discarding their return value)
  • Implemented String.prototype.concat
  • Implemented String.prototype.repeat
  • Comments in array index and array construction are now correctly ignored instead of raising a SyntaxError
  • Stabilized JavaScript Date API!
  • Implemented Date.parse
  • The Date constructor can now take in ISO 8601 compliant date strings as arguments
  • The rest of the prototype will be implemented in upcoming versions
  • Implemented RangeError

Bug Fixes

  • Field-access on the null type is no longer allowed, it throws a TypeError as the spec mandates.
  • Identifiers can now be used to index arrays
  • Removed Herobrine

Full Changelog: 0.4.2...0.4.3

0.4.2

17 Dec 17:14
Compare
Choose a tag to compare

This is a new release with several breaking changes, with 38 commits in total.

Engine Additions

  • The engine now has support for multiple instances of a type that are created via the constructor syntax.
  • Alongside this, a new way to define a function for a type's prototype has been added via definePrototypeFn.
  • Implemented some of the String prototype functions
  • String.prototype.toLowerCase
  • String.prototype.toUpperCase
  • String.prototype.indexOf
  • String.prototype.trimLeft
  • String.prototype.trimRight
  • console is a standalone type now, instead of a name-mangling hack. This means that all engine components now use the new type interface.
  • Calls are parsed as field accesses whenever necessary. This means that the bytecode interface consoledotlog is now just log, which takes in the console type as an argument alongside the rest of the arguments.

Bug Fixes

  • String trim implementation was wrongly written, resulting in right-facing whitespace not being trimmed (#58)
  • Scope hashing would result in an infinite recursion if two scopes were linked
  • The runner would incorrectly output unrelated errors to stderr, which'd result in expected errors being treated as unexpected, giving us a lower score on test262.fyi

REPL Changes

  • Added the .express command. You must provide an integer argument to it and it will pretty-print the atom at the address, if it exists.

Dependencies

  • Bumped Mirage from 1.0.42 to 1.0.43
  • Added Kaleidoscope: a library providing SIMD accelerated routines for strings (as you might have guessed, it is related to the above additions :^) )

Breaking Changes

  • The command for running a file with Balde is just balde <file> now.
  • Old, cached compressed-bytecode is incompatible with this new release. There's unfortunately no invalidation mechanism for different bytecode versions right now, so you're advised to remove the ~/.cache/mirage directory entirely in order to prevent weird bugs.

0.4.13

11 Dec 11:19
Compare
Choose a tag to compare

This is a minor release and lays down some scaffolding for the next few versions.

Additions

  • Implemented encodeURI
  • Implemented string padding implementations used internally
  • We now have CI builds per push, which automatically runs the test262 runner, our internal tests and generates a build artifact
  • Added Date as an experimental feature. To enable it in Balde, use --enable-experiment:date-routines. Currently, only Date.now() is supported.
  • Added field-write helper for Nim primitives, which makes wrapping objects between the Nim <-> JS layer much more convenient.

Fixes

  • Fixed reassignment parsing algorithm (#54, #55)
  • -d:baliUseStdBase64 no longer tries importing simdutf
  • We now return the index address to undefined when an identifier can not be found via index()
  • The engine now uses the Runtime abstraction instead of directly requesting for a mutable reference to the Pulsar VM whenever possible

0.4.13-alpha2

10 Dec 09:49
Compare
Choose a tag to compare
0.4.13-alpha2 Pre-release
Pre-release

Please do not use this release, it is not meant for production as it isn't as thoroughly tested!

Fixes

  • Undefined identifiers now return undefined correctly

Additions

  • encodeURI implementation