當前位置:
首頁 > 科技 > Mozilla發布WebAssembly執行介面WASI

Mozilla發布WebAssembly執行介面WASI

新一代網頁格式WebAssembly提供極佳的執行效率,讓瀏覽器也能夠執行像是遊戲或是Photoshop這類重量級網頁應用程序,而Mozilla要進一步擴展WebAssembly的可移植性,讓WebAssembly應用程序順利跨出瀏覽器,因此開始推動WebAssembly系統介面WASI,使WebAssembly能以更主動的方式與系統核心溝通。

由於WebAssembly是一個概念機器(Conceptual Machine)而非物理機器的彙編語言,因此可以在不同的平台上執行,而要讓WebAssembly在瀏覽器之外,還能在不同的操作系統上執行,需要一個概念操作系統的系統介面,而這正是Mozilla致力制定WebAssembly系統介面WASI的原因,以擴展WebAssembly到更多的平台。

一般應用程序可以通過系統調用,請求操作系統核心執行特定操作,在多數的設備上,這是程序代碼可以訪問系統資源的唯一方法,而由於多數開發語言都有標準函示庫,因此開發者也不需要知道不同操作系統的實例,只要知道怎麼使用介面就行了,當程序代碼在編譯的時候,工具鏈會依照程序代碼目標系統,選擇需要的介面實例,而這個實例則取決於操作系統API的函數,每個操作系統有所區別,像是對Windows機器就會使用Windows API,為Mac或Linux機器編譯就會使用POSIX。

但這樣的模式卻無法套用到WebAssembly上,在WebAssembly編譯階段,系統仍然不知道應用程序的目標操作系統,因此也無法在標準函數庫的WebAssembly實例,使用單一操作系統的介面。雖然現在WebAssembly已經可以在瀏覽器之外執行,但是卻使用非正規的方法。

Emscripten編譯工具在網頁上模擬操作系統介面POSIX,讓開發人員特以使用C標準函數庫中的函數,為此Emscripten創建了C標準函數庫的實例,實例分為兩部分,一部分編譯成WebAssembly模塊,另一部分則以JavaScript中介程序代碼實例,而JavaScript中介程序代碼會調用瀏覽器與操作系統溝通。

要在沒有瀏覽器的情況下執行WebAssembly,執行的Runtime需要實例JavaScript中介程序代碼中的函數,Mozilla提到,這些JavaScript中介程序代碼的介面並非為標準而設計,甚至還對外公開。因此這隻能作為暫時的解法,為了WebAssembly生態系統統的長久發展,需要尋求更根本的解決方案。

為了要保持WebAssembly的可移植性以及安全性,Mozilla提出了WebAssembly系統介面解決方案,構建一套模塊化的標準介面,而這項工作從最基礎的wasi-core開始,wasi-core將包含所有應用程序需要的基礎,包括文件、網路鏈接、時間以及隨機數字等POSIX功能,來允許應用程序執行打開、關閉、讀取或是寫入文件等工作。

但wasi-core也不會涵蓋POSIX的所有部分,像是程序概念就不會完全映射到WebAssembly上,而每個WebAssembly引擎也不需要支持像是fork這樣的程序操作。 Mozilla表示,模塊化的好處在於讓利基平台可以只使用適合的WASI部分,像是Rust就能直接在標準函數庫使用wasi-core,對C和C 而言,則可以使用C標準函數庫實例wasi-sysroot。 Mozilla希望Clang這類編譯器也可以與WASI API兼容,像Rust編譯器和Emscripten等工具鏈,把WASI納入系統實例中。

Mozilla表示,wasi-core是WebAssembly正式跨出網頁的第一步,並為其生態系統統創建了良好的基礎,而在wasi-core完全標準化之後,還需要解決非同步I /O、文件監控與文件鎖定等工作。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 十輪網 的精彩文章:

Toyota將成為首家使用NVIDIA自駕模擬平台的公司
冬天只想冬眠,科學家指人類睡愈多愈抑鬱

TAG:十輪網 |