#string #javascript-compiler #js #javascript

boa_string

Boa是一个用Rust编写的JavaScript词法分析器、解析器和编译器。目前,它支持该语言的一些特性。

1 个不稳定版本

0.19.0 2024年7月11日

#94编程语言 中排名

Download history 163/week @ 2024-07-08 2668/week @ 2024-07-15 2822/week @ 2024-07-22 3388/week @ 2024-07-29 4238/week @ 2024-08-05

13,139 每月下载量
12 个crate(2个直接) 中使用

Unlicense OR MIT

110KB
2.5K SLoC

Boa

Boa logo

这是一个用Rust编写的实验性JavaScript词法分析器、解析器和解释器。目前,它支持该语言的一些特性。

Build Status codecov Crates.io Docs.rs Discord Matrix

在线演示(WASM)

现在就来尝试这个WASM在线沙盒吧!点击这里

喜欢命令行?随时可以尝试boa_cli

Boa Crates

Boa目前发布并积极维护以下crate

  • boa_ast - Boa的ECMAScript抽象语法树
  • boa_cli - Boa的CLI和REPL实现
  • boa_engine - Boa的ECMAScript内置对象和执行实现
  • boa_gc - Boa的垃圾回收器
  • boa_interner - Boa的字符串池
  • boa_parser - Boa的词法分析和解析器
  • boa_profiler - Boa的代码分析器
  • boa_icu_provider - Boa的ICU4X数据提供者
  • boa_runtime - Boa的WebAPI功能
  • boa_string - Boa的ECMAScript字符串实现。

请注意:`Boa` 和 `boa_unicode` crate已被弃用。

Boa Engine 示例

要使用`Boa`,请按照以下步骤操作。

将以下依赖项添加到您的`Cargo.toml`中

[dependencies]
boa_engine = "0.19.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(())
}

现在,剩下的就是执行以下命令:

恭喜!您已成功使用 Boa 执行了您的第一个 JavaScript 代码!

文档

有关 Boa API 的更多信息,请查阅我们的文档。

API 文档

一致性

要了解 Boa 覆盖了 ECMAScript 规范的多少,您可以在此处查看运行 ECMASCript Test262 测试套件的结果:这里

贡献

请查阅 CONTRIBUTING.md 文件,了解如何在项目中贡献。您需要安装 Rust 并配置一个编辑器。我们为 VSCode 准备了一些配置。

调试

有关调试的更多信息,请参阅 debugging.md

Web Assembly

此解释器可以暴露给 JavaScript!您可以使用以下命令在本地构建示例:

npm run build

在控制台中,您可以使用 window.evaluate 将 JavaScript 传递进去。要开发 Web Assembly 端,您可以运行

npm run serve

然后转到 https://127.0.0.1:8080

使用方法

  • 克隆此仓库。
  • 在项目根目录中,使用 cargo run -- test.js 运行(其中 test.js 是指向包含任何有效 JavaScript 代码的现有 JS 文件的路径)。
  • 如果任何 JS 代码不工作,那么它是一个错误。请提交一个 问题

示例

Example

命令行选项

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

路线图

请参阅 里程碑

基准测试

请参阅 基准测试

性能分析

请参阅 性能分析

变更日志

请参阅 CHANGELOG.md

沟通

如果您有任何问题,请随时通过 Matrix 联系我们。如果您有兴趣贡献,贡献讨论发生在同一个 Matrix Space。我们还有一个 Discord 用于任何问题或问题。

许可证

该项目可选择在 UnlicenseMIT 许可证下使用。

依赖

~210KB