在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用C++編寫通用庫并在 Rust 中使用它 (WASI)

jf_wN0SrCdH ? 來源:Rust語言中文社區 ? 2023-06-16 10:03 ? 次閱讀

使用 C++ 編寫通用庫并在 Rust 中使用它 (WASI)

WebAssembly 簡介

WebAssembly 是一種二進制指令格式,旨在成為一種低級虛擬機,可以在 Web 瀏覽器中以接近本機的速度運行代碼。它不特定于網絡,也可以在其他平臺上運行。WebAssembly 代碼可以從各種編程語言編譯而來,例如 C、C++、Rust、C# 等。 Wasmer 是一個輕量級且快速的 WebAssembly 運行時,可以在各種平臺上運行 WebAssembly 模塊,包括 Windows、Linux 和 macOS。Wasmer 支持多種編程語言,包括 C、C++、Rust 等。

使用 C++ 創建 WebAssembly 庫

首先,我們將使用 C++ 創建一個簡單的“加法”函數,它將兩個整數作為輸入并返回它們的和。


// add.cpp extern "C" { int add ( int a, int b) { return a + b; } }

在這段代碼中,我們將使用 Rust 中的 add 函數。使用外部“C”是為了使函數“add”不被編譯器破壞。我們將不得不在我們的 Rust 代碼中使用相同的名稱。以下是將代碼編譯為 WebAssembly 的更新命令:


wasmc++ add.cpp -o add.wasm

完成執行后,您應該能夠看到文件 add.wasm。我們會將這個 Web 程序集加載到我們的 Rust 項目中。

在 Rust 中使用它

讓我們使用創建一個簡單的 Rust 項目


cargo new wasmer-consume

在 Cargo.toml 中添加如下依賴


wasmer = “3.1.1” wasmer-wasi = “3.1.1”

替換main.rs中的以下代碼


use wasmer::{Instance, Module, Store, Value, Function}; use wasmer_wasi::{WasiState, WasiEnv, generate_import_object_from_env, WasiFunctionEnv}; fn main() -> Result<(), Box> { // Read the WebAssembly module bytes let wasm_bytes = include_bytes!("/Users/shyamsundarb/Library/cppWrk/wasmerblog/wasmer-consume/add.wasm"); // Create a new store to hold WebAssembly instances let mut store = Store::default(); // Create a new WASI state for the WASI environment let wasi_state = WasiState::new("wasi_snapshot_preview1").build()?; // Create a new WASI environment using the WASI state let wasi_env = WasiEnv::new(wasi_state); // Compile the WebAssembly module from the provided bytes let module = Module::new(&store, wasm_bytes)?; // Create a new instance of the WASI functions using the store and WASI environment let wasi_func = WasiFunctionEnv::new(&mut store, wasi_env); // Generate the import object from the WASI functions and environment let mut import_object = generate_import_object_from_env(&mut store, &wasi_func.env, wasmer_wasi::Latest); // Create a host function that exits the program let exit_func = Function::new_typed(&mut store, |i: i32| { std::exit(i); }); // Add the missing `proc_exit` function to the import object import_object.define("wasi_snapshot_preview1", "proc_exit", exit_func); // Create a new instance of the WebAssembly module with the import object let instance = Instance::new(&mut store, &module, &import_object)?; // Get the `add` function from the instance exports let add: &Function = instance.exports.get_function("add")?; // Call the `add` function with two integer arguments let result = add.call(&mut store, &[Value::I32(2), Value::I32(3)])?; // Retrieve the result value from the function call let result_value: i32 = result[0].unwrap_i32(); // Print the result println!("Result: {}", result_value); Ok(()) }

當您運行cargo run命令時,如果一切順利,您應該會看到以下內容:

495f33c0-05f0-11ee-962d-dac502259ad0.png.

我們可以看到該函數在控制臺應用程序中可用。現在讓我們看看如何在瀏覽器中使用它。

結論

盡管這個例子很簡單,但從概念上講,它為“一次編寫,到處運行”開辟了新的含義。Webassembly 作為一項技術仍處于初期階段。它幫助我們彌合編程語言和平臺之間的鴻溝。
責任編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2723

    瀏覽量

    47603
  • C++
    C++
    +關注

    關注

    22

    文章

    2113

    瀏覽量

    73738
  • 虛擬機
    +關注

    關注

    1

    文章

    919

    瀏覽量

    28315

原文標題:【Rust日報】2023-06-07 使用 C++ 編寫通用庫并在 Rust 中使用它 (WASI)

文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何在Rust中使用Memcached

    Memcached是一種高性能、分布式的內存對象緩存系統,可用于加速動態Web應用程序。Rust是一種系統級編程語言,具有內存安全、高性能和并發性等特點。Rust語言的Memcached提供了
    的頭像 發表于 09-19 16:30 ?1269次閱讀

    FX2 CY7C68013A如何在C++環境中使用LoadEEPROM函數?

    我使用的是 FX2 CY7C68013A 芯片。 我知道 CyUSB.NET 中有我需要的 LoadEEPROM 函數。 請問如何在 C++ 環境而不是 C#/CLR 環境
    發表于 05-31 06:59

    Rust代碼中加載靜態時,出現錯誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?

    “ [i]malloc ”、“ [i]exit ”。我驗證了使用 ` [i]nm ` 命令。 問題是我打算使用 ffi 在 rust 中使用這個靜態。當我嘗試在我的 Rust 代碼
    發表于 06-09 08:44

    c++標準手冊

    C++的標準手冊,新手學習的好資料,同時也是開發人員的必備手冊。里面涵蓋了標準C++的所有的庫函數。
    發表于 11-03 14:05 ?43次下載

    如何在C++代碼中使C頭文件

    12.3 在C target=_blank style=cursor:pointer;color:#D05C38;text-decoration:underline;》C++中使
    發表于 10-19 09:24 ?3次下載

    Chrome團隊將測試驗證RustC++的互操作性

    Chrome 團隊也開始嘗試 Rust 了。在 Chromium 官網近期發布的文檔中,“RustC++ 的互操作性”作為一項尚待解決的挑戰被提出。
    的頭像 發表于 08-25 10:35 ?1965次閱讀

    微軟開始嘗試使用Rust代替C/C++,介紹這些運用Rust的產品

    微軟擁有世界上最大的C/C++代碼之一。從Windows、Office到Azure云,微軟的所有核心產品都在該代碼上運行。但因為C++
    的頭像 發表于 09-03 10:09 ?4164次閱讀

    C++ STM32 編程 005 用c++編寫STM32程序的準備

    ? ? ? ? 由于我們使用的是 ARM 的工具鏈 是gcc的,所以,我們大可以用c++編寫程序,無論是 c++99 或c++11 還是 c
    發表于 12-02 14:36 ?5次下載
    <b class='flag-5'>C++</b> STM32 編程 005 用<b class='flag-5'>c++</b><b class='flag-5'>編寫</b>STM32程序的準備

    KEIL中使C++注意事項

    KEIL中使C++ 注意事項、操作指南、書寫規范大全。
    發表于 06-01 16:12 ?1次下載

    Rust語言助力Android內存安全漏洞大幅減少

    從 Android 12 開始,Google 就在 Android 系統中帶來了 Rust 語言的支持,作為 C/C++ 的替代方案,他們的目標并不是把現有的 C/
    發表于 12-06 17:56 ?683次閱讀

    Chromium正式開始支持Rust

    ? Chromium 正式開始支持 Rust 目前的支持只是第一階段,在C++代碼中使Rust寫的第三方(編譯成.so)。估計明年Chr
    的頭像 發表于 01-14 10:04 ?999次閱讀

    RustC++哪個更好入門

    作為一門系統編程語言,Rust 一直致力于解決高并發和高安全性系統等問題。和老牌的 C++ 相比,Rust 的性能也毫不遜色。但曾幾何時,因為上手難、用戶量少、社區不活躍等諸如問題讓想要入門的開發者感到迷茫,如今新的一年已經開始
    的頭像 發表于 03-17 14:45 ?1964次閱讀

    CC++編寫環境下LabVIEW如何調用動態

    C語言編寫的動態鏈接相比,不同的地方在于extern int “C” __declspec(dllexport) add(int x,int y) 這一導出語句,在
    發表于 06-11 09:15 ?7866次閱讀
    <b class='flag-5'>C</b>和<b class='flag-5'>C++</b><b class='flag-5'>編寫</b>環境下LabVIEW如何調用動態<b class='flag-5'>庫</b>?

    FastTime-純Rust編寫的高并發快速時間

    FastTime, 純Rust編寫的快速時間, 并發: 2800萬+/秒. 一、組件
    的頭像 發表于 11-06 09:23 ?660次閱讀

    谷歌捐款100萬美元給Rust基金會,以增強C++Rust的交互性

    如今,谷歌多項核心業務仍以 C++為主要編程語言,雖然無法直接使用Rust替代現有的C++程序,但谷歌依然選擇支持Rust基金會的“Interop Initiative”計劃,幫助那些
    的頭像 發表于 02-19 15:41 ?680次閱讀
    主站蜘蛛池模板: 色多多福利| 久久久久久午夜精品| 日日夜夜天天干| 日本黄页网站| 免费中国jlzzjlzz在线播放| 就去色播| 天堂中文最新版www| 深爱五月激情五月| 特级毛片aaa免费版| 欧美激情区| 黄色午夜影院| 色噜噜亚洲男人的天堂| 国产精品午夜自在在线精品| 一个综合色| 天堂资源在线中文| 日本三级日产三级国产三级| 一级特黄女毛毛片| 天天摸夜夜摸夜夜狠狠摸| 色老头久久久久| 玖玖精品国产| 日韩毛片网| 六月激情| 中国一级特黄剌激爽毛片| 天天色官网| 在线欧美激情| 老熟女毛片| 四虎精品影院在线观看视频| 看免费一级片| 最新激情网站| 国产午夜a理论毛片在线影院 | 99热热热| 色综合久久久久久久久五月性色| 毛片网在线| 永久福利盒子日韩日韩免费看| 免费看美女午夜大片| h视频在线观看网站| 一级毛片在线| 美国色天使| 午夜操操操| 欧美tube44videos| jzzjlzz亚洲乱熟在线播放|