Wasmer在正式推出下一个重大版本3.0之前先发布了Wasmer2.3版本,该版本更新内容包含:
- 发布了一个新的堆栈切换器(corosensei),用来处理从主机语到 Wasm 的跨越问题,我们可以使用堆栈切换器来处理从主机语到Wasm的跨越
- 为了帮助开发者进行调试,Singlepass编译器中增加了对EH框架生成的支持
- 使用用 Singlepass 支持 Dylib 引擎
- Wasmer 编译为 Wasm/WASI
- 将 Cranelift 升级到 0.82
接下来我们看看更具体的内容:
一个新的堆栈切换器-Corosensei
在Wasmer 2.3之前的版本中,在Wasm主机中Web组件用的都是同一个堆栈,而正因为如此,其可能更加容易受到来自堆栈的恶意攻击 在分析许多不同的备用方案的后,我们发现Rust中最受到流行的堆栈切换仓库要么没有人去维护,要么就只能依赖于Rust只能夜间构建的的特征
- libfringe
- async-wormhole
得益于Rust的1.59版本和它对了在线组件的原生支持,我们意识到我们能够实现了能够使用这个新特性去驱使这个新的堆转换器执行
因此当我们在一个新的库上工作时,这个新的堆栈切换器和其执行得到结果是很棒的.
它甚至支持链接回溯和恐慌性传播。
创建一个新的堆栈切换库的最好的事情之一是我们现在使用完全相同的策略在 Wasmer 原生支持异步导入调用已经完成了一半!
请查看 Crates.io 中的 corosensei 库以获取更多详细信息!
crates.io:Rust 包注册表
在 Singlepass 中更好地支持本机回溯和 dylib 执行 当 Wasmer 编译 WebAssembly 程序时,它可以使用以下三种可用编译器之一: Singlepass(区块链的理想选择) Cranelift(开发的理想选择) LLVM(非常适合生产) Singlepass 是我们内部制作的编译器,允许区块链安全快速地运行智能合约,而无需担心 JIT 炸弹。
我们之前使用 Cranelift 支持完整的回溯;但是,一旦触发陷阱,Singlepass 和 LLVM 后端就缺乏这种支持。
因此,经过几次客户访谈后,我们了解到我们需要通过使用Singlepass来加强我们的游戏。
在 Wasmer 2.3 中,我们改进了对 Singlepass 的展开支持,以提供更好的回溯,并使使用 Dylib 引擎运行 Singlepass 成为可能。
Wasmer 编译为 Wasm/WASI!
在他们看来,谁曾认为将 Wasmer 运行时编译为 Wasm 是个好主意?我们做到了!为什么?我们希望完全在 Web组件中将Web组件编译为原生,以便将其用于我们未来的产品。
现在,Wasmer 编译为 Wasm/WASI,我们很高兴向您展示接下来您将能够做什么。敬请关注!
将 Cranelift 升级到 0.82
我们更新了 Wasmer 以使用最新版本的 Cranelift。 因此,Wasmer 2.3 完全支持 SIMD 指令,并使用 ISLE 使用新的实验性编译策略。 ISLE 是由 Cranelift 团队创建的用于指令选择和机器代码降低的新领域特定语言 (DSL)。