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/@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

圆方圆区块链汇集大批区块链名师,采取导师值班制,为学员实时解决技术疑难。请关注圆方圆区块链知识星球与导师。(培训咨询请联系船长13826054890微信手机同号)

作者小笛 ,专注于 EOS 技术研究与区块链智能合约开发.是圆方圆区块链的导师,更多小笛老师的文章和视频请关注圆方圆链圈公众号。

EOS 新增的 WebAssembly 解释器,是什么鬼?的更多相关文章

  1. EOS踩坑记

    [EOS踩坑记] 1.每个account只能更新自己的contract,即使两个account的秘钥相同,也不允许. 如下,使用alice的权限来更新james的contract.会返回 Missin ...

  2. Safari 11.0 已发布,新特性都在这儿了!

    Safari 11.0 兼容性 Safari 11.0 可运行于 iOS 11.0 和 macOS 10.1版本的系统环境,同时在macOS 10.12.6 和 10.11.6版本中也可以使用. Hi ...

  3. PhpStorm 配置 PHPUnit

    配置说明 全局安装phpunit代码 composer global require phpunit/phpunit 该代码会自动保存在 /User/你的用户名/.composer/vendor/ph ...

  4. EOS之hello智能合约解析

    传送门: 柏链项目学院   EOS的智能合约与以太坊区别很大, EOS 的智能合约基于 WebAssembly(WASM) 技术执行用户生成的应用程序和代码.WASM是一项新兴的网络标准,得到了谷歌, ...

  5. 【PHP发展史】PHP5.2 到 PHP5.6 中新增的功能详解

    截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护的 PHP5.2, 其余的一半用户在使用 PHP5.3. 因为 PHP 那“集百家之长”的 ...

  6. PHP5.2至5.6的新增功能详解

    截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护 [注] 的 PHP5.2, 其余的一半用户在使用 PHP5.3 [注]. 因为 PHP ...

  7. PHP 自 5.2 到 5.6 中新增的功能详解

    截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护 [注] 的 PHP5.2, 其余的一半用户在使用 PHP5.3 [注].因为 PHP 那 ...

  8. [设计模式]解释器(Interpreter)之大胆向MM示爱吧

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 “我刚写了个小程序,需要你来参与下.”我把MM叫到我的电脑旁,“来把下面这条命令打进去,这是个练习打(Pian)符(ni)号(de)的 ...

  9. Python学习笔记——基础篇【第二周】——解释器、字符串、列表、字典、主文件判断、对象

    目录 1.Python介绍 2.Python编码 3.接受执行传参 4.基本数据类型常用方法 5.Python主文件判断 6.一切事物都是对象 7.   int内部功能介绍 8.float和long内 ...

随机推荐

  1. hdu4825 01字典树+贪心

    从高位向低位构造字典树,因为高位得到的数更大. AC代码: #include<cstdio> using namespace std; typedef long long LL; cons ...

  2. MyEclipse中如何去掉JS/JSP语法错误提示

    一    优化一下MyEclipse 1 .关闭MyEclipse的自动validation      windows > perferences > myeclipse > val ...

  3. Git 版本退回commit

    有的时候错误提交了commit,需要版本退回. 先用git log查看一下节点版本号commit_id $ git log 再用git reset退回 $ git reset -soft commit ...

  4. ssh (Spring , Struts2 , Hibernate)框架的配置使用

    思维导图(基本配置) 1. 需要引入的包 2 .spring-config.xml 的配置 <!-- 链接数据库 外部配置文件扫入 --> <context:property-ove ...

  5. Win7/8出现An error occurred on the server when processing the URL解决办法

    使用的是win8系统搭建的本地服务器,win7使用的方法是相同的.如果你的系统是精简版的Win7/8,那么安装IIS7也有可能出现这问题.下面SJY带领大家来解决这个错误. 解决方法 打开控制面板→管 ...

  6. const char *p;和char * const p的区别

    const char *p;       const修饰*p,所以*p是一个常量,不可修改. char* const p; const修饰p,所以指针p是一个常量,不可修改. #include< ...

  7. Javascript和JQuery中常用的随机数产生函数

    无论在普通Js框架或者JQuery中都可以使用的,函数如下,使用方法简介: 1)获取0-100的随机数--getRandom(100); 2)获取0-999的随机数--getRandom(999); ...

  8. MyEclipse保存出现错误

    1.错误描述 Errors occurred during the build. Errors running builder 'JavaScript Validator' on project 'S ...

  9. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxError Exception

    1.错误描述 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxError Exception:You have an error in your SQL synt ...

  10. 如何在BIOS中设置RAID?

    随着价格的下降和相应主板的支持,目前SATA硬盘已经逐渐成为主流.但由于受芯片组和操作系统的影响,不少用户对SATA硬盘的使用及安装系统掌握不足,今天小编就给大家介绍一下SATA硬盘的日常应用技巧,希 ...