美文网首页
关于 Rust & WebAssembly

关于 Rust & WebAssembly

作者: 一瓣山河 | 来源:发表于2019-01-11 21:42 被阅读17次

    本文主要对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

    相关文章

      网友评论

          本文标题:关于 Rust & WebAssembly

          本文链接:https://www.haomeiwen.com/subject/ulpfdqtx.html