eWASM 是 WebAssembly 的⼀个安全⼦集,它是 web 平台上相对新出现的编译⽬标。⽅便的是,WASM (以及 eWASM )模块可以在任何 JavaScript 项⽬中使⽤。对于⼤多数 dApp 应⽤代码来说,通常 75% 以上的代码根本都不是智能合约 —— ⽽是使⽤ JavaScript 与智能合约进⾏通信的代码。ewasm 和 JavaScript 使⽤同样的绑定和模块⽀持机制。 为什么选择 Rust 构建 WebAssembly?随着 2017 年底,四⼤浏览器⼚商全部完成对 WebAssembly 的初步实现,以及 Webpack implementing fifirst-class support for WebAssembly 的消息公布,越来越多的团队在实现需求的时候将 WebAssembly 作为备选技术之⼀考虑。 Rust 作为语⾔是⼀种⾼效、可靠的通⽤⾼级语⾔。其⾼效不仅限于开发效率,它的执⾏效率也是令⼈称赞的,是⼀种少有的兼顾开发效率和执⾏效率的语⾔。Rust 速度惊⼈且内存利⽤率极⾼。由于没有运⾏时和垃圾回收,它能够胜任对性能要求特别⾼的服务,可以在嵌⼊式设备上运⾏,还能轻松和其他语⾔集成。 在探讨 WASM 在智能合约领域的巨⼤潜⼒时,前⾯提到 WASM 的⼀⼤优势就是⽀持有影响⼒的新锐编程语⾔,例如 Rust。使⽤ Rust 编写 WASM 具有如下优势: 可预⻅的性能 没有难以预料的 GC 暂停,也没有 JIT 编译器造成性能抖动,只有底层控制与上层⼈ 体⼯程学的完美结合。 更⼩的代码 代码尺⼨越⼩,⻚⾯加载速度就越快。Rust ⽣成的 wasm 模块不含类似于垃圾回收器这样的额外成本。⾼级优化和 Tree Shaking 优化可移除⽆⽤代码。 ⽣态友好 充满活⼒的库⽣态系统助您旗开得胜。Rust 拥有丰富的表达能⼒和零成本的抽象,以及助⼒您学习的友好社区。 Rust 编译器⽬前⽀持两个 wasm 关联的⽬标 ( target ): wasm32-unknown-unknown。此⽬标直接使⽤ llvm 后端编译成 wasm。它适合纯 rust 代码编译,譬如你没有 C 依赖的时候。跟 emscripten ⽬标⽐起来,它默认就⽣成更加洗练的代码, ⽽且也便于设置搭建。 wasm32-unknown-emscripten。此⽬标利⽤ emscripten ⼯具链编译成 wasm。当你具有 C 依赖的时候就得使⽤它了,包括 libc。 wasm32-unknown-unknown⼗分有望将新⽣的 Rust 代码融⼊ JS 项⽬中。 Rust & WebAssembly(WASM) 安全Rust 被证明是可⽤于⼤型的、拥有不同层次系统编程知识的开发者团队间协作的⾼效⼯具。底层代码中容易出现种种隐晦的 BUG,在其他编程语⾔中,只能通过⼤量的测试和经验丰富的开发者细⼼的代码评审来捕获它们。在 Rust 中,编译器充当了守⻔员的⻆⾊,它拒绝编译存在这些难以捕获的 BUG 的代码,这其中包括并发 BUG。 (责任编辑:admin) |