【许晓笛】EOS 新增的 WebAssembly 解释器,是什么鬼?

发布时间:2019-06-18 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了【许晓笛】EOS 新增的 WebAssembly 解释器,是什么鬼?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Daniel Larimer 在最近的博客中透露,EOS 新增了官方的 WebAsSEMbly 解释器,用来解释执行 WebAssembly 智能合约,加上之前的编译执行,EOS 智能合约有了两种执行方式。

对于很多没有中间语言的(字节码)的编程语言来说,根本不存在解释执行与编译执行的选项,比如传统 C/C++ 只能编译执行,直接将代码编译成为可执行的二进制机器码,我们脑上 .exe 文件就是编译的成果。再比如 python 和 javascript 只能解释执行,用户拿到的就是原始的代码,解释器会像翻译员一样,一行一行地执行代码。

为什么 WebAssembly 智能合约有两种执行方式?因为 WebAssembly 类似 java,会生成中间语言:字节码,字节码既可以编译成机器码后执行,又可以使用解释器直接执行。中间语言赋予了 WebAssembly 灵活的执行方式。这就是为什么 EOS 的智能合约不能直接上传 c++ 文件,而是需要上传编译后的 .wasm 文件,这就是 WebAssembly 的中间语言(字节码)。

@H_406_10@

编译执行的优点是执行速度快,但缺点是每次智能合约有更新时,见证人的服务器都要重新编译生成二进制机器码,对于执行次数不多的智能合约,是不划算的。解释执行正好相反,不需要提前编译,但执行时速度比编译执行慢很多,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/@bytemaste...

2.WebAssembly/binaryen
https://github.com/WebAssembl...

3.编译中的一些事儿(讲解主流的编译技术,包括WebAssembly)
http://blog.csdn.net/qq_33280...

4.几张图让你看懂WebAssembly
http://www.sohu.com/a/1415871...


相关文章和视频推荐

【许晓笛】从零开始运行EOS系统

方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。

公开课地址:https://ke.qq.com/course/345101

脚本宝典总结

以上是脚本宝典为你收集整理的【许晓笛】EOS 新增的 WebAssembly 解释器,是什么鬼?全部内容,希望文章能够帮你解决【许晓笛】EOS 新增的 WebAssembly 解释器,是什么鬼?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。