simlock
병렬 코딩 에이전트가 동일 시뮬레이터를 놓고 충돌하지 않도록 제어 평면 제공
Rust로 작성된 임베드 가능한 JavaScript 엔진
Boa is an embeddable Javascript engine written in Rust.
개발 도구Rust · JavaScriptGitHub @boa-dev직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Boa is an experimental JavaScript lexer, parser and interpreter written in Rust 🦀, it has support for more than 90% of the latest ECMAScript specification. We continuously improve the conformance to keep up with the ever-evolving standard.
Try out the engine now at the live Wasm playground here!
Prefer a CLI? Feel free to try out boa_cli!
Boa currently publishes and actively maintains the following crates:
boa_ast - Boa's ECMAScript Abstract Syntax Treeboa_cli - Boa's CLI && REPL implementationboa_engine - Boa's implementation of ECMAScript builtin objects and
executionboa_gc - Boa's garbage collectorboa_interner - Boa's string internerboa_parser - Boa's lexer and parserboa_icu_provider - Boa's ICU4X data providerboa_runtime - Boa's WebAPI featuresboa_string - Boa's ECMAScript string implementation.tag_ptr - Utility library that enables a pointer to be associated with a tag of type usize.[!NOTE]
The
Boaandboa_unicodecrates are deprecated.
To start using Boa simply add the boa_engine crate to your Cargo.toml:
[dependencies]
boa_engine = "0.21.0"
Then in main.rs, copy the below:
use boa_engine::{Context, Source, JsResult};
fn main() -> JsResult<()> {
let js_code = r#"
let two = 1 + 1;
let definitely_not_four = two + "2";
definitely_not_four
"#;
// Instantiate the execution context
let mut context = Context::default();
// Parse the source code
let result = context.eval(Source::from_bytes(js_code))?;
println!("{}", result.display());
Ok(())
}
Now, all that's left to do is cargo run.
Congrats! You've executed your first JavaScript code using Boa!
For more information on Boa's API, feel free to check out our documentation.
To know more details about Boa's conformance surrounding the ECMAScript specification, you can check out our ECMAScript Test262 test suite results here.
Please, check the CONTRIBUTING.md file to know how to contribute in the project. You will need Rust installed and an editor. We have some configurations ready for VSCode.
Check debugging.md for more info on debugging.
[!IMPORTANT]
This only applies to
wasm32-unknown-unknowntarget,WASIandEmscriptentarget variants are handled automatically.
js feature flag.RUSTFLAGS='--cfg getrandom_backend="wasm_js"'The rustflags 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
cargo run -- test.js in the project root directory where test.js is a path to an existing JS file with any valid JS code.Usage: boa [OPTIONS] [FILE]...
Arguments:
[FILE]... The JavaScript file(s) to be evaluated
Options:
--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`
--test262-object Inject the test262 host object `$262`
-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
See Milestones.
The current benchmarks are taken from v8's benchmark that you can find here. You can also view the results of nightly benchmark runs comparing Boa with other JavaScript engines here.
If you wish to run the benchmarks locally, then run Boa in release using the combined.js script which contains all the sub-benchmarks in the bench-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 the
Makefilelocated in thebench-v8directory. Comment out the benchmarks you don't want to include, then runmake. After that, you can run Boa using the same command as above.
See Profiling.
See CHANGELOG.md.
Feel free to contact us on Matrix if you have any questions. Contributor discussions take place on the same Matrix Space if you're interested in contributing. We also have a Discord for any questions or issues.
This project is licensed under the Unlicense or MIT licenses, at your option.