Tweak intro and document differences with bellard/quickjs

This commit is contained in:
Saúl Ibarra Corretgé 2024-11-13 23:34:46 +01:00
parent a365f18c98
commit 0575d10da7
2 changed files with 69 additions and 19 deletions

65
docs/docs/diff.md Normal file
View file

@ -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`

View file

@ -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