frameworks_runtimes_typescript_ts2wasm:基于 WasmGC 的 TypeScript 到 WebAssembly 编译工具项目

可将 TypeScript 源码编译为 WebAssembly 字节码,支持动态类型。通过 WasmGC 实现垃圾回收,借助 binaryen 优化,减小内存占用,采用静态编译避免动态类型检查开销,需在 WasmGC 运行环境执行。【此简介由AI生成】

分支5Tags4
文件最后提交记录最后更新时间
7 个月前
7 个月前
1 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前
6 个月前
7 个月前
7 个月前
7 个月前
7 个月前
7 个月前

Wasmnizer-ts

TypeScript 到 WasmGC 的编译工具链

概述

Wasmnizer-ts 利用 WasmGC 将 TypeScript 源代码编译为 WebAssembly 字节码,并通过宿主 API 支持动态类型(例如 any)。目前 Wasmnizer-ts 支持 TypeScript 的一个严格子集,并持续努力容纳更多语义。

Wasmnizer-ts 包含三个组件:

  • ts2wasm-compiler:用于将 TypeScript 源代码编译为 WasmGC 字节码的编译器。
  • ts2wasm-stdlib:用 TypeScript 源代码实现的标准库,将与应用程序一起编译。参见 标准库
  • ts2wasm-runtime-library:暴露生成 wasm 模块运行所需宿主 API 的运行时库,包括:
    1. libdyntype:支持动态对象,参见 API 规范 这里。我们已经提出了一个 WASI 提案
    2. libstruct-indirect:通过运行时计算得到的索引访问 WasmGC 结构字段,参见 API 规范 这里。这些 API 用于模拟 提议的 struct.get/set_indirect 操作码的行为。
    3. libstd:在本地实现的标准库,例如 console.log,参见 标准库

注意此项目高度实验性且正在积极开发中,不要在生产环境中使用

特性

  • 垃圾收集ts2wasm-compiler 利用 WebAssembly GC 提案,可以受益于运行时的垃圾收集能力。
  • 优化ts2wasm-compiler 使用 binaryen 作为后端,可以受益于 binaryen 强大的优化能力。
  • 占用空间小。源代码中的数据结构表示为 WasmGC 类型,从而避免了 wasm 模块内部对 内存分配器垃圾收集器 的需求。
  • 静态编译。TypeScript 源代码中的类型信息用于创建静态 WasmGC 类型,从而避免了动态类型检查的开销。
  • 动态类型。TypeScript 源代码中的 any 和其他动态类型通过宿主 API 支持。

执行环境

ts2wasm-compiler 生成的 wasm 模块旨在在 WasmGC 运行时环境中执行。运行时应该提供以下能力:

  • WebAssembly 提案:
    • WasmGC(强制):WasmGC 提案,为 WebAssembly 提供垃圾收集机制。

      注意:binaryen 生成的 GC 操作码与 GC MVP 略有不同,请参见 这里 了解详情。

    • 异常处理(由 try-catch 语句要求):异常处理提案,为 WebAssembly 添加异常处理机制。
    • stringref(字符串引用特性要求):引用类型字符串提案,提供一种语言无关的字符串表示。
    • APIs:
      • libdyntype API(动态类型要求):支持动态对象的 API。
      • libstruct-indirect APIinterface 类型要求):通过运行时计算得到的索引访问 WasmGC 结构字段的 API。
      • libstd API(标准库要求):从宿主环境提供标准库的 API。

Wasmnizer-ts 目前在多个环境中实现了宿主 API:

  • WebAssembly 微运行时(WAMR)libdyntype APIlibstruct-indirect APIlibstd API
    • chrome 浏览器和 nodejs(20.6.1+):用 JavaScript 实现了 libdyntype API 的一部分

请参见 特性列表 了解每个特性的支持状态。

请访问 快速入门 了解如何使用此项目,以及 介绍 了解更多详情。

贡献

我们欢迎对 Wasmnizer-ts 的贡献。更多细节请参见 CONTRIBUTING.md

许可

Wasmnizer-ts 使用与 LLVM 相同的许可:带有 LLVM 异常的 Apache 2.0 许可。请参见 LICENSE 文件了解详情。您所做的任何贡献都将使用相同的许可。

项目介绍

可将 TypeScript 源码编译为 WebAssembly 字节码,支持动态类型。通过 WasmGC 实现垃圾回收,借助 binaryen 优化,减小内存占用,采用静态编译避免动态类型检查开销,需在 WasmGC 运行环境执行。【此简介由AI生成】

定制我的领域