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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

JavaScript與Rust和WebAssembly集成

京東云 ? 來源:jf_75140285 ? 2025-01-24 15:43 ? 次閱讀

作者:京東物流 梁瑞樂

偶然一次機(jī)會,接觸了Rust的代碼。當(dāng)時想給團(tuán)隊小伙伴做演示,發(fā)現(xiàn)自己并不能在移動端按照文檔生成演示demo。我就想,要是Rust代碼能轉(zhuǎn)化成JavaScript就好了。結(jié)果一搜,還真有。

下面整理成文檔,分享給大家。為大家解決問題,多提供一種思路、方式、方法。

?

一、分享的目的:

?由 Rust、WebAssembly、JavaScript、HTML 和 CSS 開發(fā)多語言程序的工作流程。

?如何設(shè)計 API 以最大限度地利用 Rust 和 WebAssembly 的優(yōu)勢以及 JavaScript 的優(yōu)勢。

?如何調(diào)試從 Rust 編譯的 WebAssembly 模塊。

?

二、什么是WebAssembly?

WebAssembly (wasm) 是一種具有廣泛規(guī)范的簡單機(jī)器模型和可執(zhí)行格式。它被設(shè)計為可移植、緊湊并以本機(jī)速度或接近本機(jī)速度執(zhí)行。

作為一種編程語言,WebAssembly 由兩種表示相同結(jié)構(gòu)的格式組成,盡管方式不同:

1.該.wat文本格式(稱為wat“WebAssemblyText”)使用S 表達(dá)式,與 Scheme 和 ClojureLisp 語言家族有相似之處。https://en.wikipedia.org/wiki/S-expression

2.二進(jìn)制格式.wasm是較低級別的,旨在供 wasm 虛擬機(jī)直接使用。它在概念上類似于 ELF 和 Mach-O。

有工具,可以從.wat文本格式到.wasm二進(jìn)制格式的轉(zhuǎn)換。

?

三、環(huán)境準(zhǔn)備:

需要標(biāo)準(zhǔn) Rust 工具鏈,包括rustup、rustc和cargo。

安裝參考:https://www.rust-lang.org/tools/install?

?

四、學(xué)習(xí)網(wǎng)站:

?Rust 和 WebAssembly ?

?wasm-bindgen官網(wǎng)地址?

?

五、練習(xí)演示:

下面這段代碼項目是用 Rust + JavaScript 編寫的,用于 WebAssembly (Wasm) 項目,它與 Web Workers 和 Web 頁面交互。代碼的主要功能是判斷用戶輸入的數(shù)字是否為偶數(shù),并將結(jié)果顯示在網(wǎng)頁上。

?

1、安裝wasm-pack: wasm-pack是一個幫助你構(gòu)建和打包Rust代碼到WebAssembly的工具。

cargo install wasm-pack

2、創(chuàng)建一個新的Rust庫項目

cargo new --lib my_demo
cd my_demo

此時,生成文件目錄:

wKgaoWca_oGAG2WoAABI3bDn3FU446.png

3、配置Cargo.toml: 在Cargo.toml文件中添加wasm-bindgen和web-sys依賴項。

[package]
authors = ["The wasm-demo Developers"]
edition = "2024"
name = "wasm-in-web-worker"
publish = false
version = "0.0.0"

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

[dependencies]
console_error_panic_hook = { version = "0.1.6", optional = true }
wasm-bindgen = "0.2"
web-sys = { version = "0.3", features = ['console',
  'Document',
  'HtmlElement',
  'HtmlInputElement',
  'MessageEvent',
  'Window',
  'Worker'] }

在features中,你可以根據(jù)需要啟用web-sys的特定Web API特性。更多配置,參考學(xué)習(xí)文檔。

?

4、編寫Rust代碼: 在src/lib.rs中使用web-sys。

// 代碼首先導(dǎo)入了一些 Rust 標(biāo)準(zhǔn)庫和 wasm_bindgen 相關(guān)的模塊,這些模塊用于在 Rust 和 JavaScript 之間建立橋梁,以及操作 Web API。
use std::cell::RefCell;
use std::rc::Rc;
use wasm_bindgen::prelude::*;
use web_sys::{console, HtmlElement, HtmlInputElement, MessageEvent, Worker};

// 定義 NumberEval 結(jié)構(gòu)體
// NumberEval 結(jié)構(gòu)體用于存儲一個整數(shù),并提供方法來判斷該整數(shù)是否為偶數(shù)。
// new 方法創(chuàng)建 NumberEval 的新實例,初始數(shù)字為 0。
// is_even 方法接受一個整數(shù)參數(shù),將其存儲在結(jié)構(gòu)體中,并返回該數(shù)字是否為偶數(shù)。
// get_last_number 方法返回結(jié)構(gòu)體中存儲的最后一個數(shù)字

#[wasm_bindgen]
pub struct NumberEval {
    number: i32,
}

#[wasm_bindgen]
impl NumberEval {
    // Create new instance.
    pub fn new() -> NumberEval {
        NumberEval { number: 0 }
    }

    pub fn is_even(&mut self, number: i32) -> bool {
        self.number = number;
        self.number % 2 == 0
    }

    pub fn get_last_number(&self) -> i32 {
        self.number
    }
}

// startup 函數(shù)是在 Wasm 模塊加載時調(diào)用的入口點。它創(chuàng)建了一個 Web Worker 實例,并設(shè)置了一個輸入框的 oninput 事件回調(diào)。
#[wasm_bindgen]
pub fn startup() {
    // 創(chuàng)建Web Worker實例
    let worker_handle = Rc::new(RefCell::new(Worker::new("./worker.js").unwrap()));
    console::log_1(&"Created a new worker from within Wasm".into());

    setup_input_oninput_callback(worker_handle);
}

// 定義 setup_input_oninput_callback 函數(shù)
// 這個函數(shù)設(shè)置了一個回調(diào)函數(shù),當(dāng)用戶在輸入框中輸入時觸發(fā)。它讀取輸入框的值,嘗試將其解析為整數(shù),并將該整數(shù)發(fā)送到 Web Worker。
// 如果解析失敗,它會清空結(jié)果顯示字段。
fn setup_input_oninput_callback(worker: Rc>) {
    let document = web_sys::window().unwrap().document().unwrap();
    
    //  #[allow(unused_assignments)] 屬性被用來告訴編譯器忽略未使用的賦值警告。這樣,即使value變量被賦值后沒有被使用,編譯器也不會發(fā)出警告。
    #[allow(unused_assignments)]
    let mut persistent_callback_handle = get_on_msg_callback();

    let callback = Closure::new(move || {
        console::log_1(&"oninput callback triggered".into());
        let document = web_sys::window().unwrap().document().unwrap();

        let input_field = document
            .get_element_by_id("inputNumber")
            .expect("#inputNumber should exist");
        let input_field = input_field
            .dyn_ref::()
            .expect("#inputNumber should be a HtmlInputElement");

       
        match input_field.value().parse::() {
            Ok(number) => {

                // 代碼中的 Web Worker 交互包括創(chuàng)建 Worker 實例、發(fā)送消息給 Worker (post_message),以及設(shè)置 Worker 的 onmessage 事件處理器來接收 Worker 的響應(yīng)。

                let worker_handle = &*worker.borrow();
                let _ = worker_handle.post_message(&number.into());
                persistent_callback_handle = get_on_msg_callback();

              
                worker_handle
                    .set_onmessage(Some(persistent_callback_handle.as_ref().unchecked_ref()));
            }
            Err(_) => {
                document
                    .get_element_by_id("resultField")
                    .expect("#resultField should exist")
                    .dyn_ref::()
                    .expect("#resultField should be a HtmlInputElement")
                    .set_inner_text("");
            }
        }
    });

 
    document
        .get_element_by_id("inputNumber")
        .expect("#inputNumber should exist")
        .dyn_ref::()
        .expect("#inputNumber should be a HtmlInputElement")
        .set_oninput(Some(callback.as_ref().unchecked_ref()));

    // forget 方法用于防止 Rust 清理閉包,因為閉包將由 JavaScript 管理。
    callback.forget();
}

// 定義 get_on_msg_callback 函數(shù)
// 這個函數(shù)創(chuàng)建了一個閉包,用于處理從 Web Worker 返回的消息。
// 它接收一個 MessageEvent,從中提取數(shù)據(jù),并根據(jù)數(shù)據(jù)是 true 還是 false 來更新頁面上的結(jié)果顯示字段,顯示 "even" 或 "odd"。
fn get_on_msg_callback() -> Closure {
    Closure::new(move |event: MessageEvent| {
        console::log_2(&"Received response: ".into(), &event.data());

        let result = match event.data().as_bool().unwrap() {
            true => "even",
            false => "odd",
        };

        let document = web_sys::window().unwrap().document().unwrap();
        document
            .get_element_by_id("resultField")
            .expect("#resultField should exist")
            .dyn_ref::()
            .expect("#resultField should be a HtmlInputElement")
            .set_inner_text(result);
    })
}




注意事項:

?Closure::new 和 Closure::forget 用于創(chuàng)建和管理 Rust 和 JavaScript 之間的閉包。

?Rc> 用于共享對 Worker 的可變引用,允許在多個地方修改 Worker 的狀態(tài)。

?wasm_bindgen 宏用于將 Rust 代碼暴露給 JavaScript,使得 JavaScript 可以調(diào)用 Rust 函數(shù)。

?

5、構(gòu)建項目: 使用wasm-pack構(gòu)建項目,生成可以在Web環(huán)境中運行的WebAssembly包。

wasm-pack build --target no-modules

--target 后面可以跟的參數(shù),如下圖

wKgZoWca_oKAb7vwAAHongVUFXo059.png

?

6、在Web頁面中使用: 創(chuàng)建一個HTML文件,并在其中引入生成的.wasm文件。

index.html如下:




    
    


與Wasm Web Worker 交互

// index.js

// `#[wasm_bindgen]`
const {startup} = wasm_bindgen;

async function run_wasm() {
    // 加載 Wasm 文件 
    // 在`index.html`里導(dǎo)入了`wasm_bindgen` 
    await wasm_bindgen();

    console.log('index.js loaded');

    // 運行入口方法
    // 創(chuàng)建worker實例
    startup();
}

run_wasm();



// worker.js
// 這段代碼包含 Web Worker 的實現(xiàn)細(xì)節(jié), worker.js 接收到數(shù)字后,會判斷它是否為偶數(shù),并將結(jié)果發(fā)送回主線程。

importScripts('http://www.xsypw.cn/images/chaijie_default.png');

console.log('Initializing worker')

// In the worker, we have a different struct that we want to use as in
// `index.js`.
const {NumberEval} = wasm_bindgen;

async function init_wasm_in_worker() {
    // Load the Wasm file by awaiting the Promise returned by `wasm_bindgen`.
    await wasm_bindgen('./pkg/wasm_in_web_worker_bg.wasm');

    // Create a new object of the `NumberEval` struct.
    var num_eval = NumberEval.new();

    // Set callback to handle messages passed to the worker.
    self.onmessage = async event => {
        // By using methods of a struct as reaction to messages passed to the
        // worker, we can preserve our state between messages.
        var worker_result = num_eval.is_even(event.data);

        // Send response back to be handled by callback in main thread.
        self.postMessage(worker_result);
    };
};

init_wasm_in_worker();


7、啟動一個HTTP服務(wù)器: 你可以使用任何HTTP服務(wù)器來提供你的頁面和WebAssembly模塊。例如,如果你已經(jīng)安裝了Python,可以使用以下命令:

python3 -m http.server

然后在瀏覽器中打開http://localhost:8000,你應(yīng)該能看到【Rust 和 WebAssembly 與現(xiàn)有的 JavaScript 工具集成】的網(wǎng)站。

wKgZoWca_oSAXd4FAAb4oDwn528593.png

?

8、整體文件目錄如下:

wKgaoWca_oSAOeqeAAD3fsNUK58962.png

?

六、其他相關(guān)工具:

1、wasm-bindgen?

wasm-bindgen促進(jìn) Rust 和 JavaScript 之間的高級交互。它允許將 JavaScript 內(nèi)容導(dǎo)入 Rust 并將 Rust 內(nèi)容導(dǎo)出到 JavaScript。

2、wasm-bindgen-futures?

wasm-bindgen-futuresPromise是連接 JavaScript和 Rust 的橋梁Future。它可以雙向轉(zhuǎn)換,在 Rust 中處理異步任務(wù)時非常有用,并允許與 DOM 事件和 I/O 操作進(jìn)行交互。

3、js-sys?

所有 JavaScript 全局類型和方法的原始wasm-bindgen導(dǎo)入,例如Object、等。這些 APIFunction可eval在所有標(biāo)準(zhǔn) ECMAScript 環(huán)境中移植,而不僅僅是 Web,例如 Node.js

4、web-sys?

wasm-bindgen所有 Web API 的原始導(dǎo)入,例如 DOM 操作setTimeout、Web GL、Web Audio 等。

?

七、應(yīng)用場景:

JavaScript 與 Rust 和 WebAssembly (Wasm) 的集成可以應(yīng)用于多種場景,特別是在需要高性能和/或低級系統(tǒng)訪問的情況下。以下是一些具體的應(yīng)用場景:

1.性能密集型任務(wù):對于需要大量計算的任務(wù),如圖像或視頻處理、大數(shù)據(jù)分析、復(fù)雜算法(如機(jī)器學(xué)習(xí)模型的推斷)等,Rust 生成的 WebAssembly 可以提供比純 JavaScript 更好的性能。

2.游戲開發(fā):WebAssembly 可以使開發(fā)者將現(xiàn)有的高性能游戲引擎(如Unity 或 Unreal Engine)移植到網(wǎng)頁上,或者使用 Rust 編寫自定義的游戲邏輯,以實現(xiàn)接近原生的性能。

3.加密和安全:Rust 提供了內(nèi)存安全的保證,這對于加密算法和安全相關(guān)的代碼非常重要。使用 Rust 編寫的 WebAssembly 模塊可以在客戶端執(zhí)行加密操作,而不必?fù)?dān)心內(nèi)存安全漏洞。

4.物聯(lián)網(wǎng) (IoT) 和邊緣計算:Rust 和 WebAssembly 的組合可以用于在瀏覽器之外的環(huán)境中運行,例如在支持 WebAssembly 的 IoT 設(shè)備或邊緣計算節(jié)點上。這允許開發(fā)者在這些環(huán)境中運行高性能的應(yīng)用程序。

5.桌面應(yīng)用:通過技術(shù)如 Electron 或 Tauri,開發(fā)者可以創(chuàng)建跨平臺的桌面應(yīng)用。Rust 和 WebAssembly 可以用于這些應(yīng)用中的性能關(guān)鍵部分,以提高整體性能。

6.文件壓縮和解壓縮:文件處理操作,如壓縮和解壓縮,可以通過 Rust 和 WebAssembly 實現(xiàn),以提高處理速度并減少在客戶端執(zhí)行這些操作的時間。

7.實時通信:對于需要低延遲的實時通信應(yīng)用,如在線協(xié)作工具、實時游戲等,Rust 和 WebAssembly 可以提供必要的性能優(yōu)勢。

8.自定義渲染器:對于需要自定義渲染管線的應(yīng)用,如圖形編輯器或數(shù)據(jù)可視化工具,Rust 和 WebAssembly 可以提供更接近硬件的控制和更好的性能。

9.移植現(xiàn)有的 Rust 庫:許多有用的 Rust 庫可以被編譯成 WebAssembly,使得它們可以在網(wǎng)頁應(yīng)用中使用,擴(kuò)展了 JavaScript 的能力。

10.替代插件:對于傳統(tǒng)上依賴于 NPAPI 插件(如 Flash 或 Java Applets)的功能,WebAssembly 提供了一個更安全、更現(xiàn)代的替代方案。

在集成 Rust 和 WebAssembly 到 JavaScript 項目中時,通常會使用 JavaScript 作為“膠水代碼”,處理 DOM 操作、網(wǎng)絡(luò)請求等,而將計算密集型或需要優(yōu)化性能的部分交給 Rust 編寫的 WebAssembly 模塊處理。這種方式可以結(jié)合 Rust 的性能和安全性以及 JavaScript 的靈活性和生態(tài)系統(tǒng)。

?

八、小結(jié):

1、主要是為大家解決問題,多提供一種思路、方式、方法;

2、Rust 和 WebAssembly與JavaScript集成優(yōu)勢:

?性能提升: Rust 編譯到 WebAssembly 可以提供接近原生的性能,特別是在計算密集型任務(wù)中,這通常比 JavaScript 執(zhí)行得更快。

?類型安全: Rust 是一種靜態(tài)類型語言,提供了編譯時類型檢查,這有助于減少運行時錯誤。

?內(nèi)存安全: Rust 的所有權(quán)和借用機(jī)制確保了內(nèi)存安全,沒有垃圾收集器的開銷,這在 WebAssembly 中同樣適用。

?并發(fā)編程: Rust 的并發(fā)編程模型比 JavaScript 的并發(fā)模型(基于事件循環(huán)和回調(diào))更為強(qiáng)大和靈活。

?現(xiàn)代工具鏈:Rust 的`cargo`工具鏈和`wasm-pack`等工具提供了強(qiáng)大的依賴管理和構(gòu)建工具。

?生態(tài)系統(tǒng):Rust 的生態(tài)系統(tǒng)正在快速增長,提供了大量的庫和框架。

?跨平臺兼容性:WebAssembly 是跨平臺的,可以在所有主流瀏覽器上運行。

3、Rust 和 WebAssembly與JavaScript集成劣勢:

?學(xué)習(xí)曲線:對于熟悉 JavaScript 的開發(fā)者來說,Rust 的學(xué)習(xí)曲線可能會比較陡峭。

?工具集成:盡管 Rust 和 WebAssembly 的工具正在改進(jìn),但它們與現(xiàn)有的 JavaScript 工具和生態(tài)系統(tǒng)(如 npm, webpack 等)的集成可能不如純 JavaScript 項目那樣無縫。

?啟動時間和文件大小:WebAssembly 模塊可能需要額外的加載時間,尤其是當(dāng)模塊很大時。雖然 Wasm 文件通常比等效的 JavaScript 文件小,但是需要額外的解析和編譯時間。

?DOM 和 Web API 交互:直接從 Rust/WebAssembly 與 DOM 進(jìn)行交互比從 JavaScript 進(jìn)行交互更復(fù)雜,通常需要通過 JavaScript 中間層或使用像`web-sys`這樣的庫。

?調(diào)試支持:雖然 WebAssembly 的調(diào)試工具在不斷改進(jìn),但它們通常不如 JavaScript 的調(diào)試工具成熟和易用。

?社區(qū)和資源:JavaScript 擁有一個龐大的社區(qū)和大量的資源,而 Rust 和 WebAssembly 相對較新,社區(qū)和資源可能沒有那么豐富。

?瀏覽器兼容性:雖然 WebAssembly 在所有現(xiàn)代瀏覽器上都得到了支持,但在一些舊的瀏覽器或者某些移動設(shè)備上可能不被支持。

總的來說,Rust 和 WebAssembly 在性能和安全性方面提供了顯著的優(yōu)勢,但在易用性、工具集成和社區(qū)支持方面可能存在一些挑戰(zhàn)。對于需要高性能計算的應(yīng)用程序,或者那些對安全性有嚴(yán)格要求的項目,使用 Rust 和 WebAssembly 可能是一個很好的選擇。然而,對于需要快速開發(fā)和廣泛社區(qū)支持的項目,純JavaScript 解決方案可能更加合適。

歡迎大家留言或私信我,我們共同探討、學(xué)習(xí),并且相互提供寶貴的反饋和建議。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4823

    瀏覽量

    68953
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    525

    瀏覽量

    53927
  • 語言程序
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    5960
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    230

    瀏覽量

    6646
收藏 人收藏

    評論

    相關(guān)推薦

    WebAssembly技術(shù)_編譯ffmpeg(ubuntu20.04)

    WebAssembly并不是直接用匯編語言,而提供了抓換機(jī)制(LLVM IR),把高級別的語言(C,C++和Rust)編譯為WebAssembly,以便有機(jī)會在瀏覽器中運行。主要是解決目前JS語言的效率問題,設(shè)計立足點為快速,內(nèi)
    的頭像 發(fā)表于 07-14 10:29 ?2297次閱讀
    <b class='flag-5'>WebAssembly</b>技術(shù)_編譯ffmpeg(ubuntu20.04)

    Rust語言如何與 InfluxDB 集成

    Rust 是一種系統(tǒng)級編程語言,具有高性能和內(nèi)存安全性。InfluxDB 是一個開源的時間序列數(shù)據(jù)庫,用于存儲、查詢和可視化大規(guī)模數(shù)據(jù)集。Rust 語言可以與 InfluxDB 集成,提供高效
    的頭像 發(fā)表于 09-30 16:45 ?1230次閱讀

    RUST在嵌入式開發(fā)中的應(yīng)用是什么

    的文檔、有用的錯誤消息、友好編譯器、一流的工具,只是Rust的幾個好處。它帶有一個集成的包管理器和構(gòu)建工具,支持自動完成和類型檢查的智能多編輯器,一個自動格式化程序,等等。為什么在嵌入式開發(fā)中使用Rust
    發(fā)表于 12-24 08:34

    Rust代碼中加載靜態(tài)庫時,出現(xiàn)錯誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?

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

    WebAssembly的起源及實踐分析

    在瀏覽器之爭中,Chrome憑借Java的卓越性能取得了市場主導(dǎo)地位,然而由于Java的無類型特性,導(dǎo)致其運行時消耗大量的性能做為代價,這也是Java的瓶頸之一。WebAssembly旨在解決這一
    發(fā)表于 09-30 14:18 ?0次下載
    <b class='flag-5'>WebAssembly</b>的起源及實踐分析

    .NET應(yīng)用程序可以直接調(diào)用WebAssembly模塊了

    WebAssembly Runtime現(xiàn)已添加.NET Core API,開發(fā)者可直接在.NET應(yīng)用程序中調(diào)用WebAssembly模塊。
    的頭像 發(fā)表于 12-10 11:35 ?2465次閱讀

    WebAssembly中的BL602/BL604模擬器使用

    讓我們使用WebAssembly在 Web 瀏覽器中模擬 BL602 / BL604 Rust 固件
    發(fā)表于 03-18 10:11 ?2次下載

    WebAssembly技術(shù)_編譯ffmpeg(ubuntu)

    WebAssembly/wasm WebAssembly 或者 wasm 是一個可移植、體積小、加載快并且兼容 Web 的全新格式。
    的頭像 發(fā)表于 08-14 09:43 ?1600次閱讀
    <b class='flag-5'>WebAssembly</b>技術(shù)_編譯ffmpeg(ubuntu)

    基于Rust 編程語言的小游戲程序?qū)嵗?/a>

    在編寫程序之前你的電腦必須先安裝好 Rust 的基礎(chǔ)開發(fā)環(huán)境,并且有 Cargo 支持,如果你是其他編程語言轉(zhuǎn)過來的例如 C、 Java 、Python 、JavaScript 、Swift 等
    發(fā)表于 12-15 10:53 ?1887次閱讀

    WebAssembly中使用Rust編寫eBPF程序并發(fā)布OCI鏡像

    WebAssembly(Wasm)最初是以瀏覽器安全沙盒為目的開發(fā)的,發(fā)展到目前為止,WebAssembly 已經(jīng)成為一個用于云原生軟件組件的高性能、跨平臺和多語言軟件沙箱環(huán)境,Wasm 輕量級容器也非常適合作為下一代無服務(wù)器平臺運行時,或在邊緣計算等資源受限的場景高效執(zhí)
    的頭像 發(fā)表于 02-14 18:10 ?1170次閱讀

    Go/Rust挑戰(zhàn)Java/Python地位

    增長持續(xù)下去,其可能很快就會直接挑戰(zhàn) Java 和 Python 的地位。Go 是其中第三大最受歡迎的語言,其次是 C++、JavaScript、C#、C、Rust、TypeScript、R、Kotlin 和 Scala。
    的頭像 發(fā)表于 03-06 10:19 ?728次閱讀

    Rust的內(nèi)部工作原理

    Rust到匯編:了解 Rust 的內(nèi)部工作原理 非常好的Rust系列文章,通過生成的匯編代碼,讓你了解很多Rust內(nèi)部的工作機(jī)制。例如文章有 Rus
    的頭像 發(fā)表于 06-14 10:34 ?833次閱讀
    <b class='flag-5'>Rust</b>的內(nèi)部工作原理

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

    使用 C++ 編寫通用庫并在 Rust 中使用它 (WASI) WebAssembly 簡介 WebAssembly 是一種二進(jìn)制指令格式,旨在成為一種低級虛擬機(jī),可以在 Web 瀏覽器中以接近本機(jī)
    的頭像 發(fā)表于 06-16 10:03 ?1146次閱讀
    使用C++編寫通用庫并在 <b class='flag-5'>Rust</b> 中使用它 (WASI)

    javascript:;怎么解決

    javascript:” 是一個JavaScript偽協(xié)議,它通常出現(xiàn)在URL地址欄或鏈接中,用于執(zhí)行JavaScript代碼。然而,有時它可能會導(dǎo)致一些問題,特別是在一些不支持
    的頭像 發(fā)表于 11-26 14:39 ?7982次閱讀

    [鴻蒙]OpenHarmony4.0的Rust開發(fā)

    集成 Rust 代碼,并最大程度發(fā)揮 Rust 和 OpenHarmony 中原有 C/C++ 代碼的交互性,采用 GN 作為統(tǒng)一構(gòu)建工具,即通過 GN 構(gòu)建 Rus
    的頭像 發(fā)表于 02-26 17:28 ?949次閱讀
    [鴻蒙]OpenHarmony4.0的<b class='flag-5'>Rust</b>開發(fā)
    主站蜘蛛池模板: 日本不卡视频一区二区三区 | 欧美性喷潮 | 色综合久久88 | 色偷偷91综合久久噜噜噜男男 | 福利片在线观看免费高清 | 奇米影视一区二区三区 | 亚洲欧洲一二三区 | 欧洲色妇 | 久久久久国产免费 | 五月婷婷爱 | 欧美性淫爽www视频播放 | 国产精品第九页 | 国产精品a在线观看香蕉 | 亚洲欧美啪啪 | 日本老师69xxxxxxxxx| 特黄特黄特色大片免费观看 | 久久看精品| 99pao强力打造免费高清色 | 亚洲午夜网 | 一级毛片在线看在线播放 | 天天干天天色天天 | 一级片在线观看免费 | 免费一级特黄3大片视频 | 国产免费久久精品99 | 在线最新版www资源网 | 欧美伊人久久综合网 | 日本精品高清一区二区2021 | 日本一级成人毛片免费观看 | 偷窥自拍亚洲色图 | 亚洲1卡二卡3卡四卡不卡 | 亚洲欧美视频在线 | 狠狠操夜夜 | 特级毛片s级全部免费 | 久久中文字幕一区二区 | 丁香花五月婷婷 | 国产性夜夜春夜夜爽 | 国产精品福利一区 | 在线天堂中文字幕 | 国产在线一区视频 | 成 人在线观看视频网站 | 五月天婷婷一区二区三区久久 |