【許曉笛】EOS 新增的 WebAssembly 解釋器,是什麼鬼?

Daniel Larimer 在最近的博客中透露,EOS 新增了官方的 WebAssembly 解釋器,用來解釋執行 WebAssembly 智能合約,加上之前的編譯執行,EOS 智能合約有了兩種執行方式。

 

對於很多沒有中間語言的(字節碼)的編程語言來說,根本不存在解釋執行與編譯執行的選項,比如傳統 C/C++ 只能編譯執行,直接將代碼編譯成爲可執行的二進制機器碼,我們電腦上 .exe 文件就是編譯的成果。再比如 python 和 javascript 只能解釋執行,用戶拿到的就是原始的代碼,解釋器會像翻譯員一樣,一行一行地執行代碼。

 

爲什麼 WebAssembly 智能合約有兩種執行方式?因爲 WebAssembly 類似 java,會生成中間語言:字節碼,字節碼既可以編譯成機器碼後執行,又可以使用解釋器直接執行。中間語言賦予了 WebAssembly 靈活的執行方式。這就是爲什麼 EOS 的智能合約不能直接上傳 c++ 文件,而是需要上傳編譯後的 .wasm 文件,這就是 WebAssembly 的中間語言(字節碼)。

無標題.png

 編譯執行的優點是執行速度快,但缺點是每次智能合約有更新時,見證人的服務器都要重新編譯生成二進制機器碼,對於執行次數不多的智能合約,是不划算的。解釋執行正好相反,不需要提前編譯,但執行時速度比編譯執行慢很多,Daniel 說速度僅僅是原來的20%,也就是比原來慢5倍,不過 Daniel 還說明,WebAssembly 在整個智能合約執行中只佔很小的一部分,對於真正系統性能的影響大約在 5%。

 

所以折騰了半天,效果還沒有原來好嗎?Daniel 說,引入 WebAssembly 的官方解釋器是給智能合約的結果提供了一個權威參考,當各個見證人的編譯執行結果不一致時,就可以使用解釋器得到參考結果。而且解釋器也會給編譯執行做後補,以防 WASM 編譯器出問題時維持系統穩定。

 

目前來看,不論是 EOS 系統,還是 WebAssembly 技術 都還在快速發展階段,還沒有針對性能做更細緻的優化,我認爲 WebAssembly 可以參考 Java 的 JIT(Just In Time) 技術,對高頻執行的代碼進行編譯優化,對低頻代碼直接解釋執行。不過鑑於 WebAssembly 並不是系統性能的最主要瓶頸,現在看來這方面的需求並不迫切。

 

參考文獻:

1. EOSIO Development Update 

https://medium.com/@bytemaster/eosio-development-update-272198df22c1

2. WebAssembly/binaryen

https://github.com/WebAssembly/binaryen

3. 編譯中的一些事兒(講解主流的編譯技術,包括WebAssembly)

http://blog.csdn.net/qq_33280027/article/details/69944498

4. 幾張圖讓你看懂WebAssembly

http://www.sohu.com/a/141587149_464084



End 虛線簡潔分割線虛線簡潔分割線虛線簡潔分割線


圓方圓區塊鏈彙集大批區塊鏈名師,採取導師值班制,爲學員實時解決技術疑難。請關注圓方圓區塊鏈知識星球與導師。(培訓諮詢請聯繫船長13826054890微信手機同號)

知識星球介紹.png

更多技術文章請關注

圓方圓鏈圈

wechat code258&258.jpg





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章