Emscripten 3.0 可用,C/C++ 到 WebAssembly 编译器

Emscripten 3.0 编译器版本已经发布,允许您将 C/C++ 等基于 LLVM 前端的语言的代码编译为通用低级中间代码 WebAssembly,以便后续与 JavaScript 项目集成,运行在 Web 浏览器中,并在 Node.js 中使用或创建使用 wasm 运行时运行的独立多平台应用程序。 该项目代码是根据 MIT 许可证分发的。 编译器使用 LLVM 项目的开发,Binaryen 库用于生成 WebAssembly 和优化。

Emscripten 项目的主要目标是创建一个工具,允许您在 Web 上执行代码,而不管代码是使用哪种编程语言编写的。 编译的应用程序可以使用对标准 C 和 C++ 库(libc、libcxx)、C++ 扩展、基于 pthreads 的多线程、POSIX API 和许多多媒体库的调用。 用于与 Web API 和 JavaScript 代码集成的 API 单独提供。

Emscripten 支持通过 Canvas 广播 SDL2 库的输出,还通过 WebGL 提供对 OpenGL 和 EGL 的支持,这允许您将图形应用程序和游戏转换为 WebAssembly(例如,有 Qt 工具包的端口并支持 Unreal Engine) 4、Unit游戏引擎(物理子弹引擎)。 除了编译 C/C++ 代码外,还单独开发项目,以确保在浏览器中启动 Lua、C#、Python、Ruby 和 Perl 语言的解释器和虚拟机。 还可以将非 Clang 前端应用于 LLVM,适用于 Swift、Rust、D 和 Fortran 等语言。

Emscripten 3.0 的主要变化:

  • emscripten中使用的musl C库已更新至版本1.2.2(版本2用于Emscripten 1.1.15.x分支)。
  • 项目中主要使用的部分函数已从 parseTools.js 库中删除:removePointing、pointingLevels、removeAllPointing、isVoidType、isStructPointerType、isArrayType、isStructType、isVectorType、isStructuralType getStructuralTypeParts、getStructuralTypePartBits、isFunctionDef、isPossibilityFunctionType、isFunctionType、getReturnType、 splitTokenList、_IntToHex、IEEEUnHex、Compiletime.isPointerType、Compiletime.isStructType、Compiletime.INT_TYPES、isType。
  • 在 shell.html 和 shell_minimal.html 模板中,emscripten 运行过程中发生的、应用程序通过 stderr 输出的错误消息的输出默认切换为使用 console.warn 而不是 console.error。
  • 添加了指定文件名中使用的特定文本编码的功能。 传递文件名时可以以后缀的形式指定编码,例如“a.rsp.utf-8”或“a.rsp.cp1251”)。

来源: opennet.ru

添加评论