日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

WebAssembly 基礎(chǔ)以及結(jié)合其他編程語(yǔ)言

freeflydom
2024年10月14日 9:33 本文熱度 1589

WebAssembly 基礎(chǔ)

詳情參考《WebAssembly | MDN》

(1)概述

  • WebAssembly 簡(jiǎn)稱 WASM 或 WA,是一種新的編碼方式,可以在現(xiàn)代的 Web 瀏覽器中運(yùn)行
  • 可以通過(guò)編譯器,把多種編程語(yǔ)言(如 C/C++、C#、Go、Python、Rust、TypeScript 等)編寫的代碼轉(zhuǎn)化為 WA,并在瀏覽器中使用
  • 特點(diǎn):
    • 靈活度高:是一種低級(jí)的類匯編語(yǔ)言
    • 體積較小:具有緊湊的二進(jìn)制格式
    • 性能提升:接近原生的性能運(yùn)行
  • WA 可以與 JavaScript 共存,允許兩者一起工作
  • WA 關(guān)鍵概念:
    • 模塊:表示一個(gè)已經(jīng)被瀏覽器編譯為可執(zhí)行機(jī)器碼的 WA 二進(jìn)制代碼
    • 內(nèi)存:一個(gè)可變長(zhǎng)的 ArrayBuffer
    • 表格:一個(gè)可變長(zhǎng)的類型化數(shù)組
    • 實(shí)例:一個(gè)模塊及其在運(yùn)行時(shí)使用的所有狀態(tài)(包括內(nèi)存、表格和一系列導(dǎo)入值)
  • 使用 WA 編寫的相關(guān)應(yīng)用:Figma 等

(2)加載與運(yùn)行

  1. 通常,編譯器將其他語(yǔ)言的代碼編譯成 .wasm 文件,以便在 WA 環(huán)境中使用

  2. 在瀏覽器環(huán)境中,可以通過(guò) AJAX 導(dǎo)入外部文件,如導(dǎo)入 .wasm 文件


    fetch("main.wasm");
  3. JavaScript 中的 WebAssembly 對(duì)象是所有 WA 相關(guān)功能的命名空間,其中 WebAssembly.compile / WebAssembly.instantiate 或 WebAssembly.compileStreaming / WebAssembly.instantiateStreaming 方法組合可以用于加載和運(yùn)行 WA 代碼


    fetch("main.wasm")

     .then((response) => response.arrayBuffer())

     .then((bytes) => WebAssembly.compile(bytes))

     .then((module) => {

       const instance = new WebAssembly.Instance(module);

       console.log(instance.exports);

     });


    WebAssembly.instantiateStreaming(fetch("main.wasm")).then(

     (results) => {

       const instance = results.instance;

       console.log(instance.exports);

     },

    );

(3)相關(guān) JavaScript API

  • WebAssembly:所有 WA 相關(guān)功能的命名空間

a. 對(duì)象

  • WebAssembly.Module:包含已經(jīng)由瀏覽器編譯的無(wú)狀態(tài) WebAssembly 代碼
  • WebAssembly.Global:一個(gè)全局變量實(shí)例,可以被 JavaScript 和 importable/exportable 訪問(wèn)
  • WebAssembly.Instance:有狀態(tài),是 WebAssembly.Module 的一個(gè)可執(zhí)行實(shí)例
  • WebAssembly.Table:代表 WA 表格概念的 JavaScript 包裝對(duì)象,具有類數(shù)組結(jié)構(gòu),存儲(chǔ)了多個(gè)函數(shù)引用
  • WebAssembly.Tag:定義了一種 WA 異常的類型,該異??梢詮?WA 代碼拋出或拋出
  • WebAssembly.Exception:表示從 WA 拋出到 JavaScript 的運(yùn)行時(shí)異常,或者從 JavaScript 拋出到 WA 異常處理程序的運(yùn)行時(shí)異常
  • WebAssembly.LinkError:表示在模塊實(shí)例化期間發(fā)生錯(cuò)誤

b. 方法

  • WebAssembly.Memory():用于創(chuàng)建一個(gè)新的 Memory 內(nèi)存對(duì)象
  • WebAssembly.CompileError():創(chuàng)建一個(gè)新的 WA 編譯錯(cuò)誤對(duì)象
  • WebAssembly.RuntimeError():創(chuàng)建一個(gè)新的 WA 運(yùn)行時(shí)錯(cuò)誤對(duì)象

0x01 結(jié)合 C/C++

  1. 使用 C 或 C++ 編寫一段代碼(以 C 為例)


    // filename: main.c

    #include<stdio.h>



    int main(){

     printf("Hello, WebAssembly!");

     return 0;

    }

    運(yùn)行測(cè)試無(wú)誤后繼續(xù)

  2. 下載并安裝用于編譯 C/C++ 到 WA 的 Emscripten

    詳細(xì)操作參考官方下載與安裝文檔:https://emscripten.org/docs/getting_started/downloads.html

  3. 使用命令 emcc main.c -s WASM=1 -o main.html 編譯

    • emcc:Emscripten 提供的工具
    • main.c:基于 C 語(yǔ)言的代碼
    • -s WASM=1:指定輸出 WA
    • -o main.html:輸出 main.wasm、main.js 和 main.html 文件,按需使用

0x02 結(jié)合 C#

  1. 使用 C# 編寫一段代碼


    // filename: main.cs

    public class Example

    {

     public static void Main()

     {

       System.Console.WriteLine("Hello, WebAssembly!");

     }

    }
  2. 安裝 .NET Core SDK、mono

  3. 使用命令 mcs --out:main.dll -t:library main.cs 將 C# 代碼編譯為 DLL

  4. 使用命令 mono --runtime=mono --aot=llvm main.dll 將 DLL 編譯為 WA

0x03 結(jié)合 Go

  1. 使用 Go 編寫一段代碼:


    // filename: main.go

    package main



    import "fmt"



    func main() {

     fmt.Println("Hello, WebAssembly!")

    }
  2. 使用命令 GOOS=js GOARCH=wasm go build -o main.wasm main.go 通過(guò) GOCC 將 main.go 編譯為 main.wasm

0x04 結(jié)合 Python

  • 可以通過(guò) py2wasm 工具將 Python 編譯為 WA,或使用 pyodide 直接在 JavaScript 中執(zhí)行 Python

a. py2wasm

  1. 使用 Python 編寫一段代碼:


    # filename: main.py

    if __name__ == '__main__':

       print("Hello, WebAssembly!")
  2. 使用命令 pip install py2wasm 安裝 py2wasm 工具

  3. 使用命令 py2wasm main.py -o main.wasm 將 main.py 編譯為 main.wasm

b. pyodide

在 HTML 頭中導(dǎo)入 pyodide.js 并編寫 Python 代碼


<!DOCTYPE html>

<html>

 <head>

   <script src="https://cdn.jsdelivr.net/pyodide/v0.26.0/full/pyodide.js"></script>

 </head>



 <body>

   <script>

     async function main() {

       let pyodide = await loadPyodide();

       await pyodide.loadPackage("numpy"); // 加載一個(gè) Python 庫(kù)

       let result = await pyodide.runPythonAsync(`

               import numpy as np

               np.sum([1, 2, 3, 4])

           `);

       console.log(result);

     }

     main();

   </script>

 </body>

</html>

如果在 NodeJS 環(huán)境中,可以使用命令 npm install pyodide 導(dǎo)入

0x05 結(jié)合 Rust

參考自《將 Rust 代碼編譯為 WASM | 博客園-_zhiqiu》

  1. 使用命令 cargo add wasm-bindgen 添加依賴項(xiàng)

  2. 使用命令 rustup target add wasm32-unknown-unknown 安裝目標(biāo)

  3. 使用 Rust 編寫一段代碼:


    // filename: main.rs

    use wasm_bindgen::prelude::*;



    // 使用 #[wasm_bindgen] 宏來(lái)導(dǎo)出函數(shù)到 JavaScript

    #[wasm_bindgen]

    pub fn greet(name: &str) -> String {

     format!("Hello, {}!", name)

    }
  4. 使用命令 cargo build --target wasm32-unknown-unknown --release 將 main.rs 編譯為 main.wasm 等文件

  5. 使用命令 wasm-bindgen --out-dir ./out --target web target/wasm32-unknown-unknown/release/lib_wasm.wasm 生成 JavaScript 綁定文件,并設(shè)置輸出目錄為 ./out

0x06 結(jié)合 TypeScript

  • AssemblyScript 簡(jiǎn)稱 AS,可以將 TypeScript 的嚴(yán)格變體編譯為 WA
  • 具體操作方法參考 AS 官方文檔

-End-

本文作者:SRIGT

本文鏈接:https://www.cnblogs.com/SRIGT/p/18462925

版權(quán)聲明:本作品采用知識(shí)共享署名-非商業(yè)性使用-禁止演繹 2.5 中國(guó)大陸許可協(xié)議進(jìn)行許可。



該文章在 2024/10/14 9:33:55 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

日本无毛毛片| 国产麻豆媒体91| 美女张开腿让男生往里插视频在线| 狼友在线免费观看| 国产一区二区三区久久丫丫爱| 美国超碰麻豆| 精品亚洲永久免费777777| 台湾佬中文字幕在线看视频| 欧美日韩一区久久在线| 久热精品99| 欧美高清H一区| 3p欧美肛交视频网站| 日本a v不卡一线| 一区二区国产露脸在线播放| 另类小说激情| 1997成人超碰在线| 色夜欧美亚洲| 文幕一区二区日本一区二区| 老熟女精品一区二区| 亚洲一区二区综和| 国产草草影院第一页| 婷婷五月综合在线视频精品| 日木不卡区二区三区高| 老湿机午夜免费观看| 骚穴发骚视频| 日本特黄一级乱码一二区| 台湾佬激情中文网| 国產精品久久久| 国产高潮一区二区三区| 国产熟女加勒比| 在线亚洲色欲精品一区| 久久久精品视频动图| 日韩日b直接看| 日韩公开视频| 美女无圣光福利视频| 亚洲日本欧美精品久久| 中文字幕12页久久久| 91人人妻人人澡人人爽超污| 欧美黄色一区二区不卡| 日本成人啪啪啪精品视频| 香蕉久久AV一区二区三区|