Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Boa is an embeddable Javascript engine written in Rust.

License

MIT, Unlicense licenses found

Licenses found

MIT
LICENSE-MIT
Unlicense
LICENSE-UNLICENSE
NotificationsYou must be signed in to change notification settings

boa-dev/boa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Boa logo

Boa is an experimental JavaScript lexer, parser and interpreter written in Rust 🦀, it has support formore than 90% of the latest ECMAScript specification. We continuously improve the conformance to keep up with the ever-evolving standard.

Build StatuscodecovCrates.ioDocs.rsDiscordMatrix

⚡️ Live Demo (WASM)

Try out the engine now at the live WASM playgroundhere!

Prefer a CLI? Feel free to try outboa_cli!

📦 Crates

Boa currently publishes and actively maintains the following crates:

  • boa_ast - Boa's ECMAScript Abstract Syntax Tree
  • boa_cli - Boa's CLI && REPL implementation
  • boa_engine - Boa's implementation of ECMAScript builtin objects andexecution
  • boa_gc - Boa's garbage collector
  • boa_interner - Boa's string interner
  • boa_parser - Boa's lexer and parser
  • boa_icu_provider - Boa's ICU4X data provider
  • boa_runtime - Boa's WebAPI features
  • boa_string - Boa's ECMAScript string implementation.
  • tag_ptr - Utility library that enables a pointer to be associated with a tag of typeusize.

Note

TheBoa andboa_unicode crates are deprecated.

🚀 Example

To start using Boa simply add theboa_engine crate to yourCargo.toml:

[dependencies]boa_engine ="0.20.0"

Then inmain.rs, copy the below:

use boa_engine::{Context,Source,JsResult};fnmain() ->JsResult<()>{let js_code =r#"      let two = 1 + 1;      let definitely_not_four = two + "2";      definitely_not_four  "#;// Instantiate the execution contextletmut context =Context::default();// Parse the source codelet result = context.eval(Source::from_bytes(js_code))?;println!("{}", result.display());Ok(())}

Now, all that's left to do iscargo run.

Congrats! You've executed your first JavaScript code using Boa!

🔎 Documentation

For more information on Boa's API, feel free to check out our documentation.

API Documentation

🏅 Conformance

To know more details about Boa's conformance surrounding theECMAScript specification,you can check out ourECMASCript Test262 test suite resultshere.

🪚 Contributing

Please, check theCONTRIBUTING.md file to know how tocontribute in the project. You will need Rust installed and an editor. We havesome configurations ready for VSCode.

🐛 Debugging

Checkdebugging.md for more info on debugging.

🕸 Web Assembly

Important

This only applies towasm32-unknown-unknown target,WASI andEmscripten target variants are handled automatically.

  • Enable thejs feature flag.
  • SetRUSTFLAGS='--cfg getrandom_backend="wasm_js"'

Therustflags can also be set by adding a.cargo/config.toml file in the project root directory:

[target.wasm32-unknown-unknown]rustflags ='--cfg getrandom_backend="wasm_js"'

For more information see:getrandom WebAssembly Support

⚙️ Usage

  • Clone this repo.
  • Run withcargo run -- test.js in the project root directory wheretest.js is a path to an existing JS file with any valid JS code.
  • If any JS doesn't work then it's a bug. Please raise anissue!

Example

Example

Command-line Options

Usage: boa [OPTIONS] [FILE]...Arguments:  [FILE]...  The JavaScript file(s) to be evaluatedOptions:      --strict                        Run in strict mode  -a, --dump-ast [<FORMAT>]           Dump the AST to stdout with the given format [possible values: debug, json, json-pretty]  -t, --trace                         Dump the AST to stdout with the given format      --vi                            Use vi mode in the REPL  -O, --optimize      --optimizer-statistics      --flowgraph [<FORMAT>]          Generate instruction flowgraph. Default is Graphviz [possible values: graphviz, mermaid]      --flowgraph-direction <FORMAT>  Specifies the direction of the flowgraph. Default is top-top-bottom [possible values: top-to-bottom, bottom-to-top, left-to-right, right-to-left]      --debug-object                  Inject debugging object `$boa`  -m, --module                        Treats the input files as modules  -r, --root <ROOT>                   Root path from where the module resolver will try to load the modules [default: .]  -h, --help                          Print help (see more with '--help')  -V, --version                       Print version

🧭 Roadmap

SeeMilestones.

📊 Benchmarks

The current benchmarks are taken from v8's benchmark that you can findhere. You can also view the results of nightly benchmark runs comparing Boa with other JavaScript engineshere.

If you wish to run the benchmarks locally, then run Boa in release using thecombined.js script which contains all the sub-benchmarks in thebench-v8 directory.

cargo run --release -p boa_cli -- bench-v8/combined.js

Tip

If you'd like to run only a subset of the benchmarks, you can modify theMakefile located in thebench-v8 directory.Comment out the benchmarks you don't want to include, then runmake. After that, you can run Boa using the same command as above.

🧠 Profiling

SeeProfiling.

📆 Changelog

SeeCHANGELOG.md.

💬 Communication

Feel free to contact us onMatrix if you have any questions.Contributor discussions take place on the same Matrix Space if you're interested in contributing.We also have aDiscord for any questions or issues.

⚖️ License

This project is licensed under theUnlicense orMIT licenses, at your option.


[8]ページ先頭

©2009-2025 Movatter.jp