Rust 简单入门

目录:
一、安装Rust
        1、在官网下载 rustup-init.exe文件
        2、安装 Microsoft C++生成工具
二、项目搭建
        1、创建 Rust WebAssembly 项目
        2、安装 wasm-bindgen 工具
                2.1、修改 Cargo.toml 配置项
                2.2、编写 rust 代码(关键)
                2.3、rust 代码打包成 wasm文件
                        方法一:使用工具一步到位
                        方法二:手动执行两步完成
        3、构建本地 Web 服务器
        4、安装 Web-pack 及其相关依赖
        5、构建&运行程序

参考:
        在 Windows 上针对 Rust 设置开发环境 | Microsoft Learn
        Rust 编译为WebAssembly 在前端项目中使用 (qq.com)
        编译 Rust 为 WebAssembly - WebAssembly | MDN (mozilla.org)


一、安装Rust

1、官网下载 rustup-init.exe文件

傻瓜式安装即可。该文件含有编译器rustc、包管理工具cargo…,装完后它会自动配好环境变量

检验安装:在Win+R的cmd中输入:

        rustup -V  
        rustup 1.26.0 (5af9b9484 2023-04-05)        ------       successful

只安装 rust 是没办法运行 rust 程序的,还需要安装 Microsoft C++ 生成工具才行

2、安装 Microsoft C++生成工具

此工具是 rust 官方强烈建议安装的,安装此工具,起码能避免后续操作中95%以上的不知名报错

官方建议选择以下几个 Windows 工作负载

检验安装:直接跑一个简单的rust程序即可,新建一个文件夹,在该文件夹中的cmd中输入:

        cargo new hello_rust
        cd hello_rust
        cargo run       
     
 
        Hello, world!                                                             ------        successful

二、项目搭建

在桌面新建个存放项目的文件夹,进入此文件夹后,在空白处,鼠标右键打开 cmd 工具

1、创建 Rust WebAssembly 项目

        cargo new add_demo  --lib  (若忘记加 lib,那就手动把 src 文件下的 main.rs 改为 lib.rs)

此时会生成一个文件夹,其目录结构是这样的:

        +-- Cargo.toml        用于管理项目的依赖和配置
        +-- src                     项目的Rust源代码文件
              +-- lib.rs                                                           -------       successful

2、安装 wasm-bindgen 工具

此工具是一个用于促进 Wasm 模块和 JavaScript 之间高级交互的 Rust 库和 CLI 工具。

        cargo install wasm-bindgen-cli

如何使用(后面的第3、4、5步,就是使用此工具的过程):

第一步:在 Cargo.toml 文件中添加 wasm-bindgen依赖,指定所需的版本

第二步:在 Rust 代码中使用相关的宏(如 #[wasm_bindgen]),来标记要导出到 JS 中的函数

第三步:通过 wasm-pack等工具将 Rust 代码打包成 Wasm 文件,并生成相应的 JS 绑定文件

注:wasm 是二进制格式,不能直接被 JS调用。为了能在 JS 中使用 wasm ,需要借助相关工具将 wasm 代码与 JavaScript 进行绑定,生成相应的 JavaScript 绑定文件。这个绑定文件中包含了一些 JS 代码,用于加载、实例化 wasm 模块,并提供了与 wasm 中定义的函数进行交互的接口。

2.1、修改 Cargo.toml 配置项

在 Cargo.toml 文件中添加 wasm-bindgen依赖,指定所需的版本

        [lib]                                     
        crate-type = ["cdylib"]     
/**指定生成的库的类型“动态链接库”,能被其他编程语言调用*/

        [dependencies]
        wasm-bindgen = "0.2"     /**说明项目依赖于wasm-bindgen库,且指定版本为0.2*/

2.2、编写 rust 代码

在 Rust 代码中使用相关的宏(如 #[wasm_bindgen]),来标记要导出到 JS 中的函数

        use wasm_bindgen::prelude::*;      // 导入了wasm_bindgen库的预导出模块的内容

        #[wasm_bindgen]                           // 标记要导出到 JS 中的函数,只能标记 pub公共函数

        *****pub  rust函数 *****

2.3、rust 代码打包成 wasm文件

方法一:使用工具一步到位

        cargo install wasm-pack                   // 安装wasm-pack工具
        wasm-pack build --target web          // 在rust源代码所在的文件夹中的cmd中运行该命令

通过 wasm-pack工具,将 Rust 代码打包成 Wasm 二进制文件,并生成相应的 JS 绑定文件

此时会生成 pkg 和 Cargo.lock 文件夹,pkg 包含了打包后的产物,前端可调用 Rust 编写的函数

方法二:手动执行两步完成

        cargo build --target wasm32-unknown-unknown     //将 Rust 代码打包成 Wasm 文件

          如果没有安装对应的库,则命令行会提示

          help:consider downloading the target with rustup target add wasm32-unknow

          安装即可:rustup target add wasm32-unknown-unknown

          再运行:   cargo build --target wasm32-unknown-unknown

          Finished dev [unoptimized + debuginfo] targe…, in 10.62s        ------     successful

        wasm-bindgen target/wasm32-unknown-unknown/debug/demo.wasm --out-dir ./pkg

注:此命令可以生成相应的 JavaScript 绑定文件(胶水代码)以及相关的打包配置操作

3、构建本地 Web 服务器

构建 本地的web服务器 ,主要是方便后面测试 JS程序 调用wasm模块的效果

我们需要创建三个文件:index.js、package.json、webpack.config.js

(1)新建 index.js 文件(关键):编写 js 代码,调用编译后的 JS 绑定文件

        const rust = import('./pkg/add_demo.js');           // 直接引入,刚才编译后的 JS 绑定文件

        rust                               
             .then(({ add }) => {                                        // 对应 rust 代码中的函数
                      var result = add(5, 6);
                      alert("wasm sum 5 + 6 = " + result);
                      console.log(result);

             })
             .catch(console.error);     

注1:wasm 是二进制格式,不能直接被 JS调用。为了能在 JS 中使用 wasm ,需要借助相关工具将 wasm 代码与 JavaScript 进行绑定,生成相应的 JavaScript 绑定文件。这个绑定文件中包含了一些 JS 代码,用于加载、实例化 wasm 模块,并提供了与 wasm 中定义的函数进行交互的接口。

注2:rust.then(({  add  }) => { ... }) 中的 ({ add }) 是解构赋值的语法:                                                       从导入的模块对象中提取出名为 add 的函数,以便在后面的JavaScript 代码中调用

注3:用 catch 捕获rust 失败的异步操作(模块导入失败,或其他操作)                                                   然后通过console.error会将相关的错误信息打印到控制台

(2)新建 package.json 文件:npm init -y

该文件是项目的配置文件,包含项目的基本信息,列出了项目所依赖的模块

在生成的 package.json 文件中,新增红色代码:

        "scripts": {
            "build": "webpack",
            "serve": "webpack-dev-server"

        },
        "devDependencies": {
            "@wasm-tool/wasm-pack-plugin": "0.4.2",
            "text-encoding": "^0.7.0",
            "html-webpack-plugin": "^3.2.0",

            "webpack": "^4.29.4",                        /**指定 webpack 作为依赖项*/
            "webpack-cli": "^3.1.1",
            "webpack-dev-server": "^3.1.0"
        },

(3)新建 webpack.config.js文件Web-pack 工具的配置文件,用于定义打包的行为

        const path = require('path');
        const HtmlWebpackPlugin = require('html-webpack-plugin');
        const webpack = require('webpack');
        const WasmPackPlugin = require("@wasm-tool/wasm-pack-plugin");

        module.exports = {
            entry: './index.js',                                // 入口
            output: {
                path: path.resolve(__dirname, 'dist'),
                filename: 'index.js',
            },

            plugins: [
                new HtmlWebpackPlugin(),
                new WasmPackPlugin({
                        crateDirectory: path.resolve(__dirname, ".")
                }),

                //让这个示例在,不包含`TextEncoder`或`TextDecoder`的Edge浏览器中正常工作
                new webpack.ProvidePlugin({
                    TextDecoder: ['text-encoding', 'TextDecoder'],
                    TextEncoder: ['text-encoding', 'TextEncoder']
                })
            ],

            mode: 'development'
        };

4、安装 Web-pack 及其相关依赖

        npm install

Web-pack 模块打包器,能将多个模块(如 JS、CSS、图片等)打包成一个静态资源,供浏览器使用

注:npm install 本身不会自动安装 webpack 工具。但如果在项目的 package.json 文件中明确指定 webpack 作为依赖项,然后运行 npm install ,它会自动安装 webpack 及其相关依赖。

5、构建&运行程序

构建add_demo程序:npm run build                            // 打包项目,此步会生成 dist 文件夹

运行add_demo程序:npm run serve

在浏览器中打开 localhost:8080(这个地址不是固定不变的),将看到实际的效果!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值