使用Mono將C#編譯執行至WebAssembly平臺

weixin_33858249發表於2018-02-04
\

看新聞很累?看技術新聞更累?試試下載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上找到當前該專案的程式碼

\\

檢視英文原文:Using Mono to Compile C# to WebAssembly

相關文章