boa-dev/boa
GitHub: boa-dev/boa
Boa 是一个用 Rust 编写的可嵌入 JavaScript 引擎,支持超过 90% 的 ECMAScript 规范,让开发者能在 Rust 应用中轻松集成 JavaScript 执行能力。
Stars: 6963 | Forks: 568
# Boa
Boa 是一个用 Rust 🦀 编写的实验性 JavaScript 词法分析器、解析器和解释器,它支持 **超过** 90% 的最新 ECMAScript 规范。我们不断改进一致性,以跟上不断发展的标准。
[][build_link]
[](https://codecov.io/gh/boa-dev/boa)
[](https://crates.io/crates/boa_engine)
[](https://docs.rs/boa_engine)
[](https://discord.gg/tUFFk9Y)
[](https://matrix.to/#/#boa:matrix.org)
## ⚡️ 在线演示 (Wasm)
立即在 Wasm playground [这里](https://boajs.dev/playground)试用引擎!
更喜欢 CLI?欢迎试用 `boa_cli`!
## 📦 Crates
Boa 目前发布并积极维护以下 crates:
- **`boa_ast`** - Boa 的 ECMAScript 抽象语法树
- **`boa_cli`** - Boa 的 CLI && REPL 实现
- **`boa_engine`** - Boa 的 ECMAScript 内置对象和
执行
- **`boa_gc`** - Boa 的垃圾回收器
- **`boa_interner`** - Boa 的字符串驻留器
- **`boa_parser`** - Boa 的词法分析器和解析器
- **`boa_icu_provider`** - Boa 的 ICU4X 数据提供者
- **`boa_runtime`** - Boa 的 WebAPI 功能
- **`boa_string`** - Boa 的 ECMAScript 字符串实现。
- **`tag_ptr`** - 实用程序库,允许将指针与 `usize` 类型的标签关联。
## 🚀 示例
要开始使用 Boa,只需将 `boa_engine` crate 添加到您的 `Cargo.toml` 中:
```
[dependencies]
boa_engine = "0.21.0"
```
然后在 `main.rs` 中,复制以下内容:
```
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(())
}
```
现在,剩下要做的就是 `cargo run`。
恭喜!您已经使用 Boa 执行了您的第一段 JavaScript 代码!
## 🔎 文档
有关 Boa 的 API 的更多信息,请随时查看我们的文档。
[**API 文档**](https://docs.rs/boa_engine/latest/boa_engine/)
## 🏅 一致性
要了解有关 Boa 围绕 _ECMAScript_ 规范一致性的更多详细信息,
您可以[在此处](https://boajs.dev/conformance)查看我们的 _ECMAScript Test262_ 测试套件结果。
## 🪚 贡献
请查看 [CONTRIBUTING.md](CONTRIBUTING.md) 文件以了解
如何为项目做出贡献。您需要安装 Rust 和一个编辑器。我们
为 VSCode 准备了一些配置。
### 🐛 调试
查看 [debugging.md](./docs/debugging.md) 以获取有关调试的更多信息。
### 🕸 Web Assembly
- 启用 `js` feature flag。
- 设置 `RUSTFLAGS='--cfg getrandom_backend="wasm_js"'`
也可以通过在项目根目录中添加 `.cargo/config.toml` 文件来设置 `rustflags`:
```
[target.wasm32-unknown-unknown]
rustflags = '--cfg getrandom_backend="wasm_js"'
```
有关更多信息,请参阅:[`getrandom` WebAssembly 支持][getrandom-webassembly-support]
## ⚙️ 使用
- 克隆此仓库。
- 在项目根目录下使用 `cargo run -- test.js` 运行,其中 `test.js` 是包含任何有效 JS 代码的现有 JS 文件的路径。
- 如果有任何 JS 不起作用,那就是一个 bug。请提出一个 [issue](https://github.com/boa-dev/boa/issues/)!
### 示例

### 命令行选项
```
Usage: boa [OPTIONS] [FILE]...
Arguments:
[FILE]... The JavaScript file(s) to be evaluated
Options:
--strict Run in strict mode
-a, --dump-ast [] 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 [] Generate instruction flowgraph. Default is Graphviz [possible values: graphviz, mermaid]
--flowgraph-direction 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 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
```
## 🧭 路线图
参见 [Milestones](https://github.com/boa-dev/boa/milestones)。
## 📊 基准测试
当前的基准测试取自 v8 的基准测试,您可以[在此处][boa-benchmarks]找到。您还可以在[此处](https://boajs.dev/benchmarks)查看夜间基准测试运行的结果,该结果将 Boa 与其他 JavaScript 引擎进行了比较。
如果您希望在本地运行基准测试,请使用 `combined.js` 脚本在 release 模式下运行 Boa,该脚本包含 `bench-v8` 目录中的所有子基准测试。
```
cargo run --release -p boa_cli -- bench-v8/combined.js
```
## 🧠 性能分析
参见 [性能分析](./docs/profiling.md)。
## 📆 变更日志
参见 [CHANGELOG.md](./CHANGELOG.md)。
## 💬 沟通
如果您有任何问题,请随时在 [Matrix](https://matrix.to/#/#boa:matrix.org) 上联系我们。
如果您有兴趣做出贡献,贡献者讨论将在同一个 Matrix Space 中进行。
我们还有一个 [Discord](https://discord.gg/tUFFk9Y) 用于解答任何问题或疑虑。
## ⚖️ 许可证
本项目根据 [Unlicense](./LICENSE-UNLICENSE) 或 [MIT](./LICENSE-MIT) 许可证授权,您可以选择其中之一。
标签:AI工具, boa, CLI, ECMAScript, Javascript 引擎, odt, REPL, Rust, Wasm, WebAssembly, WiFi技术, 前端工具, 可视化界面, 垃圾回收, 嵌入式脚本, 开发库, 抽象语法树, 编程语言实现, 编译器, 网络流量审计, 解析器, 解释器, 词法分析, 语法分析, 通知系统, 通知系统