Home

Awesome

Rust NotImplemented Counter Fuzzbug days since Fuzzbug open SmooshMonkey Build Result SmooshMonkey Test Result

jsparagus - A JavaScript parser written in Rust

jsparagus is intended to replace the JavaScript parser in Firefox.

Current status:

Join us on Discord: https://discord.gg/tUFFk9Y

Building jsparagus

To build the parser by itself:

make init
make all

The build takes about 3 minutes to run on my laptop.

When it's done, you can:

Building and running SpiderMonkey with jsparagus

NOTE: Even after building with jsparagus, you must run the shell with --smoosh to enable jsparagus at run time.

Benchmarking

Fine-grain Benchmarks

Fine-grain benchmarks are used to detect regression by focusing on each part of the parser at one time, exercising only this one part. The benchmarks are not meant to represent any real code sample, but to focus on executing specific functions of the parser.

To run this parser, you should execute the following command at the root of the repository:

cd crates/parser
cargo bench

Real-world JavaScript

Real world benchmarks are used to track the overall evolution of performance over time. The benchmarks are meant to represent realistic production use cases.

To benchmark the AST generation, we use SpiderMonkey integration to execute the parser and compare it against SpiderMonkey's default parser. Therefore, to run this benchmark, we have to first compile SpiderMonkey, then execute SpiderMonkey shell on the benchmark. (The following instructions assume that ~ is the directory where all projects are checked out)

This should return the overall time taken to parse all the Script once, in the cases where there is no error. The goal is to minimize the number of nano-seconds per bytes.

Limitations

It's all limitations, but I'll try to list the ones that are relevant to parsing JS.

We're currently working on parser performance and completeness, as well as the bytecode emitter and further integration with SpiderMonkey.