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
瀏覽:563

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 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決“一般錯誤: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_imag...
    程式設計 發佈於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用戶的垂直滾動,同時保持其與固定側邊欄的對齊方式。但是,地圖的滾動無限期擴展,超過了視口的高度,阻止用戶訪問頁面頁腳。 可以限制地圖的滾動,我們可以利用CS...
    程式設計 發佈於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_decryp...
    程式設計 發佈於2025-02-04

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3