使用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上找到當前該專案的程式碼。
\\相關文章
- 跨平臺編譯編譯
- Windows平臺使用CMake+MinGW64編譯OpenCVWindows編譯OpenCV
- 使用CMake命令編譯Android平臺下的包編譯Android
- 不用Blazor WebAssembly,開發在瀏覽器端編譯和執行C#程式碼的網站BlazorWeb瀏覽器編譯C#網站
- Go跨平臺交叉編譯Go編譯
- .NET探索平臺條件編譯編譯
- [譯][A crash course in WebAssembly] 創作並使用 WebAssembly 模組Web
- JWebAssembly:Java 位元組碼到 WebAssembly 編譯器WebJava編譯
- [譯][A crash course in WebAssembly] Just-in-time(JIT)編譯器速成課Web編譯
- ffmpeg iOS平臺編譯 指令碼註釋iOS編譯指令碼
- 編譯OpenCV——ubuntu x86_64平臺編譯OpenCVUbuntu
- Golang在各平臺下如何交叉編譯Golang編譯
- [譯] 使 WebAssembly 更快:Firefox 的新流式和分層編譯器WebFirefox編譯
- 「譯」Liftoff:V8 引擎中全新的 WebAssembly baseline 編譯器Web編譯
- C#反編譯工具:.NET Reflector基礎使用C#編譯
- c#程式反編譯C#編譯
- 使用 Rust + WebAssembly 編寫 crc32RustWeb
- [譯]使用JavaScript建立WebAssembly模組例項JavaScriptWeb
- [譯] WebAssembly: How and whyWeb
- 執行LearnVIORB及VINS_monoORBMono
- 方舟編譯器開源,華為自家開源平臺面世!(附編譯過程)編譯
- Rust 跨平臺與條件編譯總結 2019.1.3Rust編譯
- VS2017平臺編譯 zmq-4.2.5 過程編譯MQ
- 編譯安裝baas平臺-cello-h3c編譯
- C++跨平臺庫boost和Poco的編譯C++編譯
- 11_QT跨平臺執行之把QT程式交叉編譯到ARM開發板QT編譯
- [譯][A crash course in WebAssembly] assemblyWeb
- -debug(C# 編譯器選項)C#編譯
- c#入門-編譯的概念C#編譯
- 【C#】C#中使用GDAL3(三):Windows下編譯外掛驅動C#Windows編譯
- 【譯】Go和WebAssembly:在瀏覽器中執行Go程式GoWeb瀏覽器
- 小程式框架選擇與平臺編譯能力測評框架編譯
- [譯][A crash course in WebAssembly] 為什麼WebAssembly這麼快Web
- [譯][A crash course in WebAssembly] WebAssembly的進度和計劃Web
- Windows下使用Graalvm將Javafx應用編譯成exeWindowsLVMJava編譯
- C#版Nebula客戶端編譯C#客戶端編譯
- 使用makefile編譯編譯
- Ubuntu 19.10將使用GCC 9作為預設編譯器UbuntuGC編譯
- 全新的.NET直譯器 – Mono已經到來Mono