最近 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 上的源代碼。