From 0575d10da795373a9cab95b228758478ee9b36cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Wed, 13 Nov 2024 23:34:46 +0100 Subject: [PATCH] Tweak intro and document differences with bellard/quickjs --- docs/docs/diff.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++ docs/docs/intro.md | 23 +++------------- 2 files changed, 69 insertions(+), 19 deletions(-) create mode 100644 docs/docs/diff.md diff --git a/docs/docs/diff.md b/docs/docs/diff.md new file mode 100644 index 0000000..6b5c083 --- /dev/null +++ b/docs/docs/diff.md @@ -0,0 +1,65 @@ +# Differences with bellard/quickjs + +This project aims to be a drop-in replacement for those already using QuickJS. +Minimal API changes might be necessary. + +## Community development + +NG is developed in the open, interacting with the wider community and through +these interactions many improvements have already been made, including the incorporation +of patches previously maintained in other forks. + +Each PR is reviewed, iterated on, and merged in GitHub. + +To date, NG has had over 40 distinct contributors and over 400 PRs. + +## Consistent release cadence + +As the project moves forward, a steady cadence of releases has been maintained, with an +average of a new release every 2 months. + +## Testing + +Since its inception testing has been a focus. Each PR is tested in over 50 configurations, +involving different operating systems, build types and sanitizers. + +The `test262` suite is also ran for every change. + +## Cross-platform support + +In order to better support other platforms such as Windows the build system was +changed to use [CMake]. + +In addition, Windows is treated as a first class citizen, with the addition of support +for the MSVC compiler. + +[CMake]: https://cmake.org/ + +## Performance + +While being an interpreter limits the performance in comparison with other engines which +use a JIT, several significant performance improvements have been made: + +- Opcode fusion +- Polymorphic inline caching +- Memory allocation improvements +- Improved parse speeds + +## New ECMAScript APIs + +The main focus of NG is to deliver state-of-the-art JavaScript features. Typically once they +are stable (stage 4) but sometimes even at earlier stages. Here is a non-exhaustive list +of ES features present in NG: + +- Resizable ArrayBuffer +- Float16Array +- WeakRef +- FinalizationRegistry +- Iterator Helpers +- Promise.try +- Error.isError +- Set operations + +Some non-standard but widely used APIs have also been added: + +- V8's `Error.prepareStackTrace` and `Error.stackTraceLimit` diff --git a/docs/docs/intro.md b/docs/docs/intro.md index e29ff7c..cb63ed5 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -9,29 +9,18 @@ sidebar_label: Welcome QuickJS is a small and embeddable JavaScript engine. It aims to support the latest [ECMAScript] specification. -This project is a _fork_ of the [original QuickJS project] by Fabrice Bellard, after it went -dormant for several years, with the intent of reigniting its development. +This project is a _fork_ of the [original QuickJS project] by Fabrice Bellard and Charlie Gordon, after it went dormant, with the intent of reigniting its development. -In October 2023 [@bnoordhuis] and [@saghul] decided to fork the original project with -the aim of reigniting it. They reached out to the original authors ([@bellard] and [@chqrlie]) -about their intentions. - -As of December 2023 the initial goal was somewhat accomplished. [@bellard] resumed working on -the project and both parties have been pulling patches from each other since. - -As of early 2024 both projects agree the proper path forward involves merging both projects -and combining the efforts. While that may take a while, since both projects diverged in certain -areas, there is willingness to go in this direction from both sides. - -This fork is focused on (but not limited to): +This project is focused on (but not limited to): - Community development - Testing - Cross-platform support - ES features -:::note +You can check the differences with the original project [here.](./diff) +:::note This site is under construction, the entire API is not yet documented. ::: @@ -42,7 +31,3 @@ for installing it from prebuilt binaries. [ECMAScript]: https://tc39.es/ecma262/ [original QuickJS project]: https://bellard.org/quickjs -[@bellard]: https://github.com/bellard -[@bnoordhuis]: https://github.com/bnoordhuis -[@chqrlie]: https://github.com/chqrlie -[@saghul]: https://github.com/saghul