使用Mono將C#編譯執行至WebAssembly平臺
\\\看新聞很累?看技術新聞更累?試試下載InfoQ手機客戶端,每天上下班路上聽新聞,有趣還有料!
\
因為所有的主流網頁瀏覽器都支援WebAssembly,開發者們現在可以尋找一個新的平臺來部署他們的應用程式。由WebAssembly團隊提供的標準工具鏈僅能將C、C++編譯成為WebAssembly,然而這對使用其他程式語言的開發者們並沒有什麼幫助。C#開發者就幸運的多了,Mono專案提供了兩種不同的方法來對WebAssembly進行支援。
\\第一種方法是通過使用Mono IL直譯器在執行時(runtime)執行託管程式碼(例如C#)。這種方法的目標是支援快速原型化和快速開發。當應用程式已經準備交付給客戶時,最好使用第二種方法。該方法使用靜態編譯生成一個WASM檔案,該檔案能夠被支援WebAssembly的瀏覽器於本地進行執行。
\\為了能夠建立這些WASM檔案,Mono專案中引入了一個叫做mono-wasm的新工具。它將C#語言作為輸入,並且生成LLVM二進位制程式碼,將其用於LLVM WebAssembly的後端。由mono-wasm生成的目標WASM檔案包含C#程式執行所需的所有依賴,包括mscorlib.dll、C庫檔案以及Mono執行時檔案。由於LLVM連結器於近日增加了對WebAssembly的支援,因此mono-wasm支援增量式編譯。這種方式能夠大大減少編譯時間,當你進行開發時,對於那些沒有改變的程式碼(例如mscorlib.dll、Mono執行時檔案等等)不需要進行重新編譯。
\\雖然該專案已經完成了非常多的工作,但是其首席開發人員Laurent Sansonetti指出,該專案依然處於測試前版本(pre-alpha)。在最近的短期開發階段中,該專案主要的目標是修復垃圾回收機制以及準備推出正式的alpha測試版本。該專案長期開發階段的目標將著眼於減少WASM可執行檔案的大小(一個hello world示例程式的大小是10MB)以及對Mono編譯器進行更新,使其能夠直接編譯成為WASM32,另外就是改進與C#、JavaScript之間的互動性。
\\該專案當前處於非常活躍的開發狀態,好奇的開發者們以及想要為該專案貢獻程式碼的人們可以在GitHub上找到當前該專案的程式碼。
\\相關文章
- 跨平臺編譯編譯
- 跨平臺的.NET執行環境 Mono 3.2.7釋出!Mono
- .NET 編譯器平臺:使用 Roslyn 體驗 MVVM編譯ROSMVVM
- Go跨平臺交叉編譯Go編譯
- 編譯arm平臺的ethtool編譯
- Mac平臺反編譯Unity編譯的安卓apkMac編譯Unity安卓APK
- WebAssembly 系列(三)編譯器如何生成彙編Web編譯
- 不用Blazor WebAssembly,開發在瀏覽器端編譯和執行C#程式碼的網站BlazorWeb瀏覽器編譯C#網站
- [譯][A crash course in WebAssembly] 創作並使用 WebAssembly 模組Web
- 使用CMake命令編譯Android平臺下的包編譯Android
- Windows平臺使用CMake+MinGW64編譯OpenCVWindows編譯OpenCV
- Unity3D-重新編譯Mono加密DLLUnity3D編譯Mono加密
- .NET探索平臺條件編譯編譯
- Mono 計劃―Linux版.NET平臺 (轉)MonoLinux
- 在 Azure 上使用 Docker 執行 MonoDockerMono
- JWebAssembly:Java 位元組碼到 WebAssembly 編譯器WebJava編譯
- [譯][A crash course in WebAssembly] Just-in-time(JIT)編譯器速成課Web編譯
- Golang在各平臺下如何交叉編譯Golang編譯
- ffmpeg iOS平臺編譯 指令碼註釋iOS編譯指令碼
- 用 NDK 編譯 ffmpeg 到 Android 平臺編譯Android
- visualgdb windows linux 跨平臺編譯WindowsLinux編譯
- [譯]使用JavaScript建立WebAssembly模組例項JavaScriptWeb
- 使用 Rust + WebAssembly 編寫 crc32RustWeb
- jsoncpp linux平臺編譯和arm移植JSONLinux編譯
- [譯] WebAssembly: How and whyWeb
- 方舟編譯器開源,華為自家開源平臺面世!(附編譯過程)編譯
- [譯] 使 WebAssembly 更快:Firefox 的新流式和分層編譯器WebFirefox編譯
- C# 中利用執行時編譯實現泛函C#編譯
- C#反編譯工具:.NET Reflector基礎使用C#編譯
- c#程式反編譯C#編譯
- 編譯安裝baas平臺-cello-h3c編譯
- C++跨平臺庫boost和Poco的編譯C++編譯
- 「譯」Liftoff:V8 引擎中全新的 WebAssembly baseline 編譯器Web編譯
- [譯][A crash course in WebAssembly] assemblyWeb
- 11_QT跨平臺執行之把QT程式交叉編譯到ARM開發板QT編譯
- .NET 使用 .NET Core 跨平臺執行
- 小程式框架選擇與平臺編譯能力測評框架編譯
- Cocos2dx交叉編譯至android平臺編譯Android