Emscripten 3.0,一个使用 LLVM 的 WebAssembly 构建工具链

最近 Emscripten 3.0 编译器新版本发布,其特点是允许在低级通用中间件 WebAssembly 中以 C/C++ 和其他基于 LLVM 的前端可用的语言编译代码。

此编译的主要功能是用于后续与 JavaScript 项目的集成,在 Web 浏览器中运行,在 Node.js 中使用。 Js 或创建与 wasm 运行时一起运行的跨平台独立应用程序。

关于 Emscripten

主要目标 Emscripten 项目的开发 是创建一个工具,允许您在 Web 上运行代码, 不管它是用什么编程语言编写的。

编译后的应用程序可以使用标准的 C 和 C++ 库调用 (libc, libcxx)、C++ 扩展、基于 pthreads 的多线程、POSIX API 和许多多媒体库。 用于与 Web API 和 JavaScript 代码集成的 API 是单独提供的。

脚本 支持通过 Canvas 流式传输 SDL2 库输出,并且还通过 WebGL 提供 OpenGL 和 EGL 支持,允许您将图形应用程序和游戏转换为 WebAssembly。

几乎任何可移植的 C 或 C++ 代码库都可以使用 Emscripten 编译成 WebAssembly从需要渲染图形、播放声音、加载和处理文件的高性能游戏,到 Qt 等应用程序框架。 Emscripten 已经被用于将一长串真实世界的代码库转换为 WebAssembly,包括商业代码库,如 Unreal Engine 4 和 Unity Engine。

除了编译 C/C++ 代码,项目单独开发,以确保 Lua、C#、Python、Ruby 和 Perl 的解释器和虚拟机在浏览器中启动。 也可以将非 Clang 接口应用到适用于 Swift、Rust、D 和 Fortran 等语言的 LLVM。

应该指出的是 本机运行时和 Emscripten 之间存在差异, 这意味着,一般来说,e有必要对本机代码进行一些更改. 话虽如此,许多应用程序只需要更改它们定义主循环的方式,并修改它们的文件处理以适应浏览器/JavaScript 的限制。

还有一些限制可以使某些代码更容易迁移 - 阅读可移植性指南以确定您可能需要在哪些方面花费更多精力。

Emscripten 3.0的主要新特性

在这个新版本中,emscripten 中使用的 musl C 库已更新到 1.2.2 版(Emscripten 1.1.15.x 分支中使用了 2 版)。

从 parseTools.js 库中去掉了一部分功能,主要用于项目中: removePointing, pointingLevels, removeAllPointing, isVoidType, isStructPointerType, isArrayType, isStructType, isVectorType, isStructuralType getStructuralTypeParts, getStructuralType _IntToHex, IEEEUnHex, Compiletime.isPointerType, Compiletime.EStructileType,.

在 shell.html 和 shell_minimal.html 模板中,错误消息的输出 在 emscripten 操作期间发生并由应用程序通过 stderr 发出 默认情况下更改为使用 console.warn 而不是 console.error。

还强调了 添加了指定文件名中使用的特定文本编码的功能。 传递文件名时可以将编码指定为后缀,例如“a.rsp.utf-8”或“a.rsp.cp1251”)。

最后,如果你有兴趣了解更多关于 Emscripten 的内容,你可以在它的 官方网站。

同样的,你可以参考网上关于如何使用 Emscripten 的文档,我们可以推荐的参考站点是 Mozilla 开发者网站: https://developer.mozilla.org.

此外,重要的是要提到项目代码是在 MIT 许可下分发的。 编译器使用 LLVM 项目的开发成果,Binaryen 库用于生成 WebAssembly 和优化。 你可以检查你的代码 GitHub 上的源代码。


成为第一个发表评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。