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、CompileTileType、CompiletimeType、

在 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. 權利:您可以隨時限制,恢復和刪除您的信息。