Dart Live:通过 WebAssembly 在 Web 上运行编译器、VM、分析器和热重载
摘要
Dart Live 使得 Dart 编译器、虚拟机和分析器能够完全在浏览器中通过 WebAssembly 运行,支持无需服务器的状态保持式热重载。
<p>我成功将 Dart VM 编译为 WebAssembly,从而可以在浏览器中编译 Dart 程序。Dart 自带一个基础的 ARM 解释器,利用该解释器,热重载功能可以直接在浏览器中工作。</p>
<p>其 gzip 压缩后的大小为 7.6 MB,且后端没有运行服务器,因此我能够直接将其托管在 GitHub Pages 上。</p>
<p><a href="https://github.com/modulovalue/dart-live" rel="ugc">https://github.com/modulovalue/dart-live</a></p>
<p><a href="https://lobste.rs/s/qwoixg/dart_live_compiler_vm_analyzer_hot_reload">评论</a></p>
查看缓存全文
缓存时间: 2026/05/13 10:14
# Dart in WebAssembly
Source: https://modulovalue.com/dart-live/
## DartVM in WebAssembly
编辑 Dart,运行它。CFE 在浏览器中编译(dart2wasm);VM 通过 ARM 模拟器(emcc)运行;Dart 分析器也编译到了 WebAssembly。支持 Web 上的**有状态热重载**,编译为 WebAssembly。
高级模式加载中...
## 关于此项目
Dart VM 被编译为**WebAssembly**,完全在浏览器中运行,不涉及服务器。
内核前端(`dart2wasm`)在页面内将源码编译为内核字节码,VM(使用带 ARM 模拟器的 `emcc`)执行它,Dart 分析器(同样是 `dart2wasm`)在你输入时实时提供类型检查和诊断。
编辑器使用 **Monaco**(VS Code 编辑器),集成了 Dart 语法高亮和 CodeLens API,因此每个顶级函数的声明上方都会出现内联的可点击按钮 `▶ 调用` / `▸ IL`。
**热重载**内部使用 `IsolateGroup::ReloadKernel`,在重载时保留程序状态,与 Flutter 一样。**调用**功能让你可以调用 live isolate 上任意零参数的顶级函数,通过 `--no-verify-entry-points` 绕过入口点检查。
`Future.delayed` 通过 Asyncify 使用 `emscripten_sleep`,因此 await 真的会等待墙钟时间,而不会阻塞页面。
相似文章
LaTeX.wasm: 浏览器中的LaTeX引擎
SwiftLaTeX 通过 WebAssembly 直接在浏览器中启用 LaTeX 编译,允许用户无需服务器端 LaTeX 安装即可创建和编辑 LaTeX 文档。
[browser-use-wasm] 我制作了一个在WASM中运行的零成本浏览器使用代理
一位开发者构建了一个完全自包含的浏览器使用代理,完全在WASM/WebGPU中运行,零服务器成本,通过自然语言提示实现完整的网页控制。
@llama_index: 当我们说“LiteParse 无处不在”时,我们是认真的。我们的 WASM 包轻量、精简,专为浏览器和…
LiteParse 是一个基于 WASM 的轻量级 PDF 解析器,专为浏览器和边缘运行时(如 Cloudflare Workers)设计,可在边缘环境中高效解析文档。
在 Chrome DevTools 中调试 WASM
关于使用 Chrome DevTools 调试 WebAssembly 代码的指南,包括设置断点和捕获异常。
llama.cpp的Web UI现在支持通过Web Workers在浏览器中执行模型生成的JavaScript(可选加入)
llama.cpp的Web UI现在支持通过Web Workers在沙箱iframe中执行模型生成的JavaScript,作为可选功能实现轻量级的代理代码执行。