7. 最终项目结构

完成以上步骤后,你的项目结构应如下所示:

.├── Cargo.lock├── Cargo.toml├── index.html├── pkg│   ├── package.json│   ├── rust_101.d.ts│   ├── rust_101.js│   ├── rust_101_bg.wasm│   └── rust_101_bg.wasm.d.ts└── src    └── lib.rs

8. 启动 Web 页面

要运行网页,你需要使用本地 Web 服务器来提供服务。可以使用任何你喜欢的Web服务器,例如Live Server扩展(VS Code)。

在浏览器控制台中(Ctrl Shift J 或 Cmd Option J),你应该看到:

5   10 = 15

就是这样!希望本教程对您有所帮助。请随时分享您的反馈或问题!

参考:

请注意,我替换了原文中的一些措辞,并对步骤进行了更清晰的组织,但保持了原文的整体意思和图片位置。 我没有添加任何新的内容或改变原文的重点。 请根据实际情况替换“[此处应插入Rust安装指南链接]”和“[此处应插入相关文档链接]”为正确的链接。

","image":"http://www.luping.net/uploads/20250203/173858941067a0c4e2e6ee9.jpg173858941067a0c4e2e6ef5.jpg","datePublished":"2025-02-03T23:36:00+08:00","dateModified":"2025-02-03T23:36:00+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在网络中运行生锈应用程序

如何在网络中运行生锈应用程序

发布于2025-02-03
浏览:499

How to Run a Rust Application in the Web

在本教程中,我们将学习如何在 Web 浏览器中运行 Rust 应用程序。我们将创建一个简单的 Rust 包,将其编译为 WebAssembly (WASM),并将其集成到一个 HTML 页面中。

1. 安装 Rust

首先,你需要安装 Rust。请参考 Rust 官方安装指南:Rust 安装指南。安装完成后,运行以下命令验证安装是否成功:

rustc --version

2. 创建 Rust 包

接下来,创建一个新的 Rust 包:

cargo new rust-101 --lib

这将生成以下文件夹结构:

├── Cargo.toml
└── src
    └── lib.rs
  • Cargo.toml:项目的配置文件,类似于 JavaScript 中的 package.json
  • lib.rs:包含 Rust 代码的主要库文件。

打开 lib.rs 文件。默认情况下,它包含一个示例 add 函数。我们的目标是从 Web 应用程序调用此函数。

3. 将 Rust 编译为 WebAssembly

要在 Web 上运行 Rust 代码,你需要将其编译为 WebAssembly (WASM)。为此,安装 wasm-pack 工具:

cargo install wasm-pack

4. 建立 Rust 和 JavaScript 之间的通信

为了连接 Rust 和 JavaScript,我们将使用 wasm-bindgen crate。更新 Cargo.toml 文件如下:

[package]
name = "rust-101"
version = "0.1.0"
edition = "2021"

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

[dependencies]
wasm-bindgen = "0.2"

这里:

  • crate-type = ["cdylib"]:配置包以生成与 WebAssembly 兼容的动态库。
  • wasm-bindgen:启用 Rust 和 JavaScript 之间的通信。

安装依赖项:

cargo build

5. 更新 Rust 代码

编辑 src/lib.rs 文件,使 add 函数可从 JavaScript 访问:

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn add(left: u64, right: u64) -> u64 {
    left   right
}
  • #[wasm_bindgen]:将 add 函数暴露给 JavaScript。

运行以下命令将 Rust 包编译为 WebAssembly:

wasm-pack build --target web

此命令将:

  • 将 Rust 代码编译为 WebAssembly。
  • 生成用于处理 WebAssembly 文件的 JavaScript 绑定。
  • 创建一个包含生成文件的 pkg/ 目录。

6. 在网页中使用包

在项目根目录中创建一个 index.html 文件,内容如下:



  
    
    Hello Rust
  
  
    
  

7. 最终项目结构

完成以上步骤后,你的项目结构应如下所示:

.
├── Cargo.lock
├── Cargo.toml
├── index.html
├── pkg
│   ├── package.json
│   ├── rust_101.d.ts
│   ├── rust_101.js
│   ├── rust_101_bg.wasm
│   └── rust_101_bg.wasm.d.ts
└── src
    └── lib.rs

8. 启动 Web 页面

要运行网页,你需要使用本地 Web 服务器来提供服务。可以使用任何你喜欢的Web服务器,例如Live Server扩展(VS Code)。

在浏览器控制台中(Ctrl Shift J 或 Cmd Option J),你应该看到:

5   10 = 15

就是这样!希望本教程对您有所帮助。请随时分享您的反馈或问题!

参考:

请注意,我替换了原文中的一些措辞,并对步骤进行了更清晰的组织,但保持了原文的整体意思和图片位置。 我没有添加任何新的内容或改变原文的重点。 请根据实际情况替换“[此处应插入Rust安装指南链接]”和“[此处应插入相关文档链接]”为正确的链接。

最新教程 更多>
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-04-22
  • CSS强类型语言解析
    CSS强类型语言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    编程 发布于2025-04-22
  • Java数组中元素位置查找技巧
    Java数组中元素位置查找技巧
    在Java数组中检索元素的位置 利用Java的反射API将数组转换为列表中,允许您使用indexof方法。 (primitives)(链接到Mishax的解决方案) 用于排序阵列的数组此方法此方法返回元素的索引,如果发现了元素的索引,或一个负值,指示应放置元素的插入点。
    编程 发布于2025-04-22
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-04-22
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-04-22
  • Java中Lambda表达式为何需要“final”或“有效final”变量?
    Java中Lambda表达式为何需要“final”或“有效final”变量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    编程 发布于2025-04-22
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-04-22
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-04-22
  • 如何有效地选择熊猫数据框中的列?
    如何有效地选择熊猫数据框中的列?
    在处理数据操作任务时,在Pandas DataFrames 中选择列时,选择特定列的必要条件是必要的。在Pandas中,选择列的各种选项。选项1:使用列名 如果已知列索引,请使用ILOC函数选择它们。请注意,python索引基于零。 df1 = df.iloc [:,0:2]#使用索引0和1 的 ...
    编程 发布于2025-04-22
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-04-22
  • C++20 Consteval函数中模板参数能否依赖于函数参数?
    C++20 Consteval函数中模板参数能否依赖于函数参数?
    [ consteval函数和模板参数依赖于函数参数在C 17中,模板参数不能依赖一个函数参数,因为编译器仍然需要对非contexexpr futcoriations contim at contexpr function进行评估。 compile time。 C 20引入恒定函数,必须在编译时进行...
    编程 发布于2025-04-22
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-04-22
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案:的,请访问量很大,并应为procectiquiestate的,并在整个代码上正确格式不多: java.text.simpledateformat; 导入java.util.calendar; 导入java...
    编程 发布于2025-04-22
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-04-22
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-04-22

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3