WebAssembly模塊類似於磁盤上的可執行文件:它們沒有被加載到內存中。
WebAssembly實例是什麼使模塊成爲現實。您可以多次實例化相同的模塊,或者實例化多個模塊。實例化將加載模塊,編譯/驗證它,初始化它的全局變量和內存(如果有的話),填充導出,然後調用它的啓動函數。
您的示例使用s表達式語法,但您不指定如何執行WebAssembly。 s表達式本身就是文本,需要使用嵌入器來運行編譯結果!
在JavaScript嵌入the API有WebAssembly.Module
和WebAssembly.Instance
構造,還有WebAssembly.compile
和WebAssembly.instantiate
功能(無論是工作,WebAssembly.instantiate
更簡單/更好)。您將實例構造函數/函數傳遞給一個導入對象。 WebAssembly存儲器可以通過在二進制文件中聲明一個存儲器部分來創建(然後在實例化時自動創建一個存儲器),或者通過導入對象導出它。
您甚至可以通過創建多個模塊來執行動態鏈接,通過在它們之間共享內存來實例化它們,並讓它們導入/導出彼此的功能。
在spec解釋器中,你可以聲明多個模塊,這些模塊會被驗證,並且你有額外的幫助器來捅他們。見this test其開頭:
(module "\00asm\01\00\00\00")
(module "\00asm" "\01\00\00\00")
(module $M1 "\00asm\01\00\00\00")
(module $M2 "\00asm" "\01\00\00\00")
(assert_malformed (module "") "unexpected end")
(assert_malformed (module "\01") "unexpected end")
我還在使用由Mozilla(尚在測試階段上有)https://mbebenita.github.io/WasmExplorer/提供的探險家。後來即將安裝真實的東西,但我假設瀏覽器使用相同的編譯器,我們可以從git等下載那些編譯器 – Asperger
我是否明白,使模塊彼此協作的這項任務絕對需要JavaScript? – Asperger
WebAssembly不指定您可以使用哪種編譯器。 LLVM + Emscripten是不錯的選擇,還有一個GCC實驗,我相信我們會在未來看到更多。 –