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
浏览:730

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安装指南链接]”和“[此处应插入相关文档链接]”为正确的链接。

最新教程 更多>
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 问题:考虑以下CSS和HTML: position:fixed; grid-template-columns:40%60%; grid-gap:5px; 背景:#eee; 当位置未固定时,网格将正确显示。但是,当...
    编程 发布于2025-02-04
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。可以将fd.append("fileToUpload[]", files[x]);方法用于此目的,允许您在单个请求中发送多个文件。 初始尝试 在JavaScript中,一种常见方法是:); 但是,此代码仅处理第一...
    编程 发布于2025-02-04
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-02-04
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2025-02-04
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    </main> <section> ,但无法使其正常工作,如您所见。任何洞察力都将不胜感激! display:grid; { position:sticky; top:1em; z-index:1 1 ; { { { pos...
    编程 发布于2025-02-04
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    解决此问题,我们采用了一个巧妙的CSS解决方案来解决问题:高度:100%; 高度:auto; 宽度:100%; //对于水平块 ,使用绝对定位将图像定位在中心,以object-fit:object-fit:cover in IE和edge消除了问题。现在,图像将按比例扩展,保持所需的效果而不会失...
    编程 发布于2025-02-04
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python 导入编解码器 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有表情符号 emoji_pattern = re.compile(“ [”...
    编程 发布于2025-02-04
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 // error:“ coss redeclare foo()” 但是,php工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地...
    编程 发布于2025-02-04
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    [2 _post ['ss'];?> 的目的是从单击提交按钮时,文本框并显示。但是,输出保持空白。当方法=“ get”无缝工作时,方法=“ post”构成问题。 检查action属性:如果您正在刷新页面,请将操作属性设置为空字符串,例如] action ='&#...
    编程 发布于2025-02-04
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    在尝试将image存储在mysql数据库中时,您可能会遇到一个可能会遇到问题。本指南将提供成功存储您的图像数据的解决方案。 easudy values('$ this-> image_id','file_get_contents($ tmp_image)...
    编程 发布于2025-02-04
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    克服go mod中的模块路径差异 coreos/bbolt:github.com/coreos/ [email受保护]:解析go.mod:模块将其路径声明为:go.etcd.io/bbolt `要解决此问题,您可以在go.mod文件中使用替换指令。只需在go.mod的末尾添加以下行:[&& &...
    编程 发布于2025-02-04
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError:SomeClass实...
    编程 发布于2025-02-04
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式界面中实现垂直滚动元素的CSS高度限制 考虑一个布局,其中我们具有与可滚动的映射div一起移动的subollable map div用户的垂直滚动,同时保持其与固定侧边栏的对齐方式。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。 可以限制地图的滚动,我们可以利用CSS...
    编程 发布于2025-02-04
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本号的替代方法,它是使用以下语法: https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js(google hosted...
    编程 发布于2025-02-04
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样?使用openssl?答案:可以使用mcrypt数据加密数据,可以使用openssl。关于如何使用openssl对McRypt进行加密的数据: openssl_decrypt...
    编程 发布于2025-02-04

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

Copyright© 2022 湘ICP备2022001581号-3