001 Rust和WebAssembly初体验

0 介绍

视频地址:https://www.bilibili.com/video/BV1eg411g7c8
相关源码:https://github.com/anonymousGiga/Rust-and-Web-Assembly

1 为何是Rust和WebAssembly?

  • 低水平控制与高水平的人体工程学
    JavaScript Web应用程序很难获得和保持可靠的性能。
    Rust为程序员提供了低级别的控制和可靠的性能。

  • 较小的.wasm
    代码大小非常重要,因为 .wasm必须通过网络下载。Rust没有运行时,因此支持较小的.Wasm。

  • 不用全部重写
    使用Rust并不是将现有的代码扔掉,我们可以将部分js函数转换成Rust代码。

  • 和其它的和善相处
    Rust和WebAssembly与现有JavaScript工具集成,支持ECMAScript模块,你可以继续使用之前的工具,如npm、Webpack。

  • 便利的基础设施
    Rust中拥有开发者所期望的便利的工具,如:
    Cargo、零成本抽象、开放热情的社区。

2 WebAssembly是什么?

WebAssembly(wasm)是一种简单的机器模型和具有广泛规范的可执行格式。它被设计成可移植的、紧凑的,并且以或接近本机速度执行。

WebAssembly有两种表示相同结构的格式:

  • .wat 文本格式(WebAssembly Text)使用S表达式,和Lisp家族的语言有些类似;
  • .wasm二进制格式,级别较低,直接供wasm虚拟机使用,它在概念上类似于ELF和Mach-O。

2.1 线性存储器

WebAssembly有一个非常简单的内存模型。wasm模块可以访问单个的线性内存(本质就是数组),此内存可以按照页大小(64K)的倍数增长,但是不能缩小。

2.2 WebAssembly是不是只为Web使用

wasm并没有对其宿主环境做出任何假设,但是到目前为止,主要还是与js相关。

3 初体验

  • 安装Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • 安装wasm-pack
cargo install wasm-pack
  • 创建工程
cargo new --lib mywasm
  • 编写代码

在src/lib.rs中添加如下代码:

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
extern {
    pub fn alert(s: &str);
}

#[wasm_bindgen]
pub fn greet(name: &str) {
    alert(&format!("Hello, {}!", name));
}

修改Cargo.toml配置文件,添加如下:

[lib]
crate-type = ["cdylib"]

[dependencies]
wasm-bindgen = "0.2"
  • 编译package
wasm-pack build --target web
  • 使用package

在mywasm根目录下创建index.html,代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>hello-wasm example</title>
  </head>
  <body>
    <script type="module">
      import init, {greet} from "./pkg/hello_wasm.js";
      init()
        .then(() => {
          greet("WebAssembly")
        });
      </script>
  </body>
</html>
  • 运行server
python3 -m http.server
  • 测试

在浏览器中输入: http://localhost:8000

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值