本文主要对Rust 和 WebAssembly(简称wasm)做简单的介绍。
1. Rust
Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。众所周知,在 Rust 之前的其他编程语言,管理内存的方式无非是以使用垃圾回收算法管理内存(代表就是 Java 和 Python), 或者是 C/C++ 手工管理内存。 手工管理内存非常容易出现问题,即使是非常有经验的工程师也不能 写出完全没内存问题的代码,毕竟人总是免不了出错。 但是使用垃圾回收算法就一定会有运行时和垃圾回收时的停顿,这就不适合系统编程了。 而 Rust 通过新加入的 生命周期 (lifetime)和所有权 (Ownership) 特性,就可以实现内存的自动回收,并且无需运行时, 可以大大地避免出现类似内存泄漏或者时悬停指针之类的问题。
Rust 基本介绍
https://ltoddy.github.io/essay/2018/07/28/rust-summary.html
Rust编译器
Rust 编译器目前支持两个 wasm 关联的目标(target):
a. wasm32-unknown-unknown。此目标直接使用 llvm 后端编译成 wasm。 它适合纯 rust 代码编译,譬如你没有 C 依赖的时候。 跟 emscripten 目标比起来,它默认就生成更加洗练的代码, 而且也便于设置搭建。此处查看如何设置搭建.
b. wasm32-unknown-emscripten。此目标利用 emscripten 工具链编译成 wasm。 当你具有 C 依赖的时候就得使用它了,包括 libc。此处查看如何设置搭建.
wasm32-unknown-unknown 十分有望将新生的 Rust 代码融入 JS 项目中。然而,它也相对欠成熟:
1. 它 只支持优化编译.
2. 它 要求编译时使用单个的大型编译单元.
3. 部分增强被限制,rustc 的 LLVM 远远滞后.
2. WebAssembly
WebAssembly 是一种可以使用非 JavaScript 编程语言编写代码并且能在浏览器上运行的技术方案。不过需要提醒的是Wasm并非设计来完全替代JS,而是对JS的一个强大补充,JS中一部分高性能应用可以使用wasm来进行替代,比如React小组就准备用Wasm来重写其Reconciler部分(该部分用来管理组件加载和刷新),这些变动对React的使用者不可见,但会享受到Wasm带来的性能提升。Wasm在最新版本的Chrome中已经默认启用。
3. Rust & WebAssembly整合
JS互操作
在 JS 宿主环境中运行 wasm 时,导入导出 Rust 函数十分直接:跟 C 的工作机制几乎一样。如下:
因为 wasm 有限的值类型,这些函数只能操作原生数值类型。
参考链接:
https://rust.cc/article/03616001-275b-4e0e-9b4f-a2b8fdfbd53f
网友评论