Rust 编译为WebAssembly 在前端项目中使用

前言最近 , 不是加大了对Rust相关文章的输出吗 , 在评论区或者私信区 。有一些不同的声音说:“Rust没有前途 , 然后...." 。其实呢,看一个技术是否有需要学习的动力 。想必大家的底层理由都是「一切都是向钱看」 , 毕竟在国内大家都是业务为主 , 想自己纯手搞一套符合自己的技术框架和范式,这是不切实际的 。(当然也不能一杆子打死,还是有很多技术大牛的)现在大家纠结或者对这个技术属于观望态度,无非就是在平时开发工作中没有涉及到的点 。
同时,由于国内技术的「滞后性」,有一些应用场景其实还是处于蛮荒的状态 。(不是崇洋媚外,事实确实如此) 。所以 , 在一些可以用到新的技术点的方向上,国内还是处于蓝海阶段 。
所以,本着对该技术的独有关注度 , 我还是选择义无反顾的投身到学习和实际中 。「冲破黎明之前的黑暗,你会拥有太阳,而晨曦中第一缕阳光也是为你而耀眼」 。

Rust 编译为WebAssembly 在前端项目中使用

文章插图
图片
而具体 , Rust到底能给你带来点啥,我们之前有文章讲过 , 这里就不在赘述了 。
Last but not leaset,由于现在本人暂时专注于前端领域居多 , 所以我更多关注Rust能为前端带来点啥 。而说到Rust和前端,第一点的联想就是:WebAssembly 。(如果,不了解何为WebAssembly , 可以参考我们之前的文章浏览器第四种语言-WebAssembly,里面的例子是用Emscripten写的)
其实,我们之前写过如何用C写wasm,也写过WebAssembly-C与JS互相操作等文章 。但是 , 由于一些不可言喻的原因搁置了 。
我们今天将使用Rust创建一个WebAssembly Hello World程序 。我们将深入了解由wasm-bindgen生成的代码,以及它们如何共同协作来帮助我们进行开发 。我们还将使用wabt来探索生成的wasm代码 。这将使我们更好地理解Rust WebAssembly,并为我们的开发奠定良好的基础 。
好了,天不早了,干点正事哇 。
我们能所学到的知识点
  1. 前置知识点
  2. 项目搭建
  3. 原理探析
  4. 内容拓展
1. 前置知识点「前置知识点」,只是做一个概念的介绍,不会做深度解释 。因为 , 这些概念在下面文章中会有出现,为了让行文更加的顺畅,所以将本该在文内的概念解释放到前面来 。「如果大家对这些概念熟悉,可以直接忽略」同时 , 由于阅读我文章的群体有很多,所以有些知识点可能「我视之若珍宝,尔视只如草芥,弃之如敝履」 。以下知识点 , 请「酌情使用」 。
安装Rust如果是你一个Rust萌新,我们也给你提供Rust环境配置和入门指南 。
如果,想独立完成安装,可以到Rust 安装页面跟着教程安装 。
在安装成功Rust后,它会安装一个名为rustup的工具,这个工具能让我们管理多个不同版本的 Rust 。默认情况下,它会安装用于惯常 Rust 开发的 stable 版本 Rust Release 。
Rustup 会安装
  • Rust 的编译器 rustc
  • Rust 的包管理工具 cargo
  • Rust 的标准库 rust-std
  • 以及一些有用的文档 rust-docs
因为 , 我本机已经安装好了Rust 。我们可以通过rustup --version来查看rustup的版本 。以下是我本机的rustup版本信息 。下文中所有的代码,都基于该版本 。
rustup --versionrustup 1.26.0 (5af9b9484 2023-04-05)安装WebAssembly二进制工具包(wabt)
Rust 编译为WebAssembly 在前端项目中使用

文章插图
图片
这些工具旨在用于开发工具链或其他系统,这些系统希望「操作WebAssembly文件」 。与WebAssembly规范解释器不同(该解释器旨在尽可能简单、声明性和“规范性”) , 这些工具是用C/C++编写的 , 并设计成更容易集成到其他系统中 。这些工具不旨在提供优化平台或更高级的编译目标;相反,它们旨在实现与规范的完全适应和遵从 。
我们可以利用brew来在mac环境下安装 。
Rust 编译为WebAssembly 在前端项目中使用

文章插图
图片
2. 项目搭建2.1 安装wasm-bindgen我们可以通过cargo install --list来查看在$HOME/.cargo/bin位置安装过的Rust二进制文件 。


推荐阅读