阅读列表

1. Daily

2. Rust

rust NG!

3. WASM

iohk?

4. asm.js

5. wasm代码的运行一共有三种模式

  • binaryen模式
    • 基于 bytecode
  • wavm模式
    • 基于JIT,速度可以达到运行native code的级别
    • cons
      • 致命硬伤:JIT时编译速度太慢
        • 以编译源代码里的eosio.system这个系统智能合约为例,需要5秒左右的时间。这已经不是慢的问题的,而是在每个块0.5秒的情况下,已经根本无法满足需求了。
      • 占用的内存比较大
    • pros
      • eos
        • 在replay的时候加快replay的速度。但是这会占用大量额外的内存。
        • 给特权级别的合约进行加速。最常用的就是eosio.token和eosio.system这两个合约。
        • 虽然不能被大量使用,但是可以把它定义为一种稀缺资源。像短帐户名称一样通过竞价的方式来获取。另一种更为简单的的方式就是就是让智能合约的账户来承担wavm JIT模式下的额外内存费用。
        • wavm JIT加速模式的加载时间比较长,所以必须采用异步加载的模式。在加载过程中,合约可以运行在wabt这种解释器的模式之下。
          • 但还要解决一个问题。就是wasm的代码目前只支持单线程运行,另外,由于wasm的设计问题,并不支持wavm和wabt两种模式的共存。也就是说,在程序的初始化的过程中必须指定一种运行模式,wabt模式或者wavm模式。但是在程序跑起来后,就只能以wabt模式或者wavm模式运行了,否则会因为内存冲突导致程序的崩溃。这个问题也应该是后面Eos的要面对的一个问题。PyEos的解决办法是采用将相同的代码编译成两个动态库,这两个动态库是不会共享内存的,从而解决了wavm模式和wabt模式下内存冲突导致程序崩溃的问题。
  • wabt模式

5.1. .wabt

基于栈的bytecode模式, “汇编语言”版本, 采用“S-表达式(S-Expressions)”文本表示, 可以直接通过工具将 .wat 文件编译为 .wasm 文件

5.2. .wasm

编译好的二进制文件

6. WABT: The WebAssembly Binary Toolkit

  • wasm2wast tool
  • wast2wasm tool
  • wasm-interp tool
    • This is an interpreter that lets developers run a WebAssembly binary from the command line stand-alone. It implements a stack-machine based interpreter that interprets the WebAssembly binary directly. This differs from how a browser would JIT the WebAssembly binary into native code for its target architecture at load time.

7. Binaryen

outputs WebAssembly for compilers

It has a C API and implements its own internal intermediate representation (IR) of program logic and can perform a number of optimizations on the IR, support parallelization of code generation, etc.

For example, binaryen is used as part of the compiler asm2wasm that can convert asm.js files into WebAssembly files. It’s also used for supporting the LLVM compiler infrastructure generation of WebAssembly and compilation from Rust.

Copyright © ChrisLinn 2017-2018 all right reserved,powered by Gitbook该文件修订时间: 2020-01-22 14:36:57

results matching ""

    No results matching ""