资讯专栏INFORMATION COLUMN

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

SunZhaopeng / 752人阅读

摘要:对于很多没有中间语言的字节码的编程语言来说,根本不存在解释执行与编译执行的选项,比如传统只能编译执行,直接将代码编译成为可执行的二进制机器码,我们电脑上文件就是编译的成果。

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24408.html

相关文章

  • 晓笛】开发第一个 EOS 智能合约

    摘要:所以最简单的智能合约只需实现文件。我们看到文件中已经声明了这个,并说明了这个的李嘉图合约,大概意思是本合约的输入为一串字符,本合约意图是打印输出,没有其他效果。 Hello World! 稍微了解 EOS 系统,你就会知道 EOS 的智能合约基于 WebAssembly(WASM) 技术,这种技术在性能和跨平台兼容性之间取得了很好的平衡,通过将原始代码编译成字节码,使得代码可以在多种平...

    Developer 评论0 收藏0
  • 晓笛EOS智能合约案例解析(1)

    摘要:构造函数为空,参数为智能合约账户名。每个智能合约类都要继承类类构造函数创建代币函数声明函数,这个函数用来新建一种代币,并输入代币的各种属性,同时函数也是一个。 详解 EOS 智能合约的 hpp 文件 为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo —— eosio.token。eosio.token 智能合约目前还不是特别完善,个别功能还没有完...

    forsigner 评论0 收藏0
  • 晓笛】深入理解 EOS 账户权限映射

    摘要:为了解决这个问题,采取了三步用户账户自定义分级权限。用户权限与智能合约之间的映射。图中不难看出,权限是账户最高权限,可以执行权限。如果没有发现任何符合的映射,会直接检查本次执行是否满足了权限,若不足,会检查。 到底什么叫智能合约? 名词解释:本篇文章出现很多 Action 和 Active,Action (动作)为 EOS 中账户可以接受的动作,也就是别人可以对你做什么;Active ...

    zacklee 评论0 收藏0
  • 晓笛EOS 数据库与持久化 API —— 实战

    摘要:查询数据使用方法和其他迭代器操作查询数据。数据库服务的对象是维修技师和车主。如果查找成功,迭代器就会指向所需的数据对象。 EOS 数据库开发实战 上次的文章详细讲解了 EOS 数据库的架构,本文将以官方示例为基础,详解 EOS 数据库的开发实战。 基本步骤 在智能合约里与 EOS 数据库交互,首先要定义存储的数据: 定义对象:具体就是定义一个 C++ 类或者 C++ 结构体,数据表...

    yck 评论0 收藏0
  • 晓笛】听说你买了EOS ,连代码什么样都不知道?

    摘要:说点题外话如果你想提高英语的话,持有一点代币吧,你会急于搞清楚白皮书在讲什么,要是想短时间快速提高英语,持有大量代币吧,别问我是怎么知道的。 最近发现很多人投资了EOS,却并不关心 EOS 目前的开发进度和技术细节,如果你投资了 EOS, 还有一定的技术基础,那就更应该关心 EOS 的开发情况了,下面我们就从 EOS 的源代码说起: Github 是目前最流行的源码管理网站,无数明星项...

    imccl 评论0 收藏0

发表评论

0条评论

SunZhaopeng

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<