Skip to main content

Boa release v0.14

· 6 min read

Summary

Boa v0.14 is here! After almost 6 months of development, we are very happy to present you the newest release of the Boa JavaScript engine. Boa makes it easy to embed a JS engine in your projects, and you can even use it from webassembly. See the about page for more info. Together with this release, we present you: A new way to contribute to Boa, a virtual machine, usable examples and much more.

Boa currently supports part of the JavaScript language. In this release, our conformance has grown from 41.01% to 49.74% in the official ECMAScript Test Suite (Test262). The engine now passes 43,986 tests, coming from 33,192 in Boa 0.13 (32.5% increase), and we have closed 40 issues and merged 137 pull requests. You can check the full list of changes here, and the full information on conformance here.

Boa has moved

First off, some breaking changes! Boa is now boa_engine on crates.io. This should bring it in line with our other packages, and allows us to resolve the casing issue we had with Boa previously. It should just be a case of changing your dependencies in cargo.toml to the new destination. The old Boa crate will no longer receive any updates.

New ECMAScript features

Boa v0.14 ships with support for Object.getOwnPropertyNames, Object.getOwnPropertySymbols, Object.prototype.hasOwnProperty, Array.from, AggregateError, Typed Arrays, Proxy, toLocaleString(), Symbol.prototype.valueOf, Array.prototype.at(), String.fromCharCode, Object.hasOwn, Object.fromEntries, Proxy, Array.prototype.findLast, Array.prototype.findLastIndex, console.trace, String.raw( template, ...substitutions ), and more. There's also been several bug fixes and internal improvements, such as switching to Bors for our CI management.

Virtual Machine

The biggest change in this release has definitely been the switch of the main implementation to a Virtual Machine. The JavaScript code first gets parsed into AST, then compiled into op-codes, and finally executed in the VM. This adds some extra steps, which, for now, have reduced the performance of the engine. We hope to fix some of these degradations over the course of the next few releases so hang tight. The new VM opens the door for many great features in the future (we're looking at you, async/await), and allows some nicer optimizations in the parsing and compilation phases in which we have already started working (such as #1829 and #1849).

This move towards a VM has also brought one great new feature, generator execution (#1790). You can find out more about how to use the VM here.


Boa opens financial contributions

In the past months, due to the big and steady progress on Boa, we have received multiple requests to contribute to Boa financially. From now on, anyone can contribute with either a recurring donation, or a one-time contribution in our OpenCollective page.

What does this mean for Boa?

Being able to receive financial contributions won't directly show a change in Boa development, but depending on how much funding we get, we are already planning next steps. Having more motivated contributors would be the first step. We all want to spend more of our free time in boa, and receiving a financial compensation for it is definitely making the team members eager to continue contributing.

But that is not our only idea. We would like to create a reproducible benchmarking platform. Currently, we just use GitHub actions for benchmarking, which is useful to get some general ideas on how some changes affect the performance of the engine. However, they have a high variability (up to 10%), meaning that we can definitely see changes if they are big, but it's impossible to see differences if changes are minimal (1-2%, for example). Having the infrastructure to do proper performance testing would require using dedicated CPUs, for example, which could be financed using the Boa Open Collective.

On the development side, there are some very big projects that require deep involvement from the team. Priorities include (not neccesarily in order):

  • Async/Await support.
  • Better completion records implementation
  • Performance improvement across the board.
  • Future implementation of Shapes/Hidden Classes.
  • Being able to measure against other engines.
  • Improved conformance of the EcmaScript specification.
  • Integration with ICU4X for Intl and future Temporal implementation.

Implementing a proper API for Rust crates that want to embed Boa as they like, or a C API so that other software, not written in Rust, can use Boa, are also a priority, and implementing all the new built-in objects to achieve 100% conformance with the ECMAScript specification is also a must. All this takes time, and we will need to finance developers working on these big issues.

Can I contribute differently?

If financial contribution is not your strength, you can contribute by asking to be assigned to one of our open issues, and asking for mentoring if you don't know your way around the engine. Our contribution guide should help you here. If you are more used to working with JavaScript or frontend web development, we also welcome help to improve our web presence, either in our website, or in our testing representation page or benchmarks page. You can also contribute to our Criterion benchmark comparison GitHub action.

We are also looking to improve the documentation of the engine, both for developers of the engine itself and for users of the engine. Feel free to contact us in Discord.

Thank You

Last but certainly not least, a big Thank You to all the contributors of Boa. It's not often we list them but we would like to say thank you to the new contributors who joined for the last release.

Thank you New Contributors