- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
详情参考《WebAssembly | MDN》 。
ArrayBuffer
通常,编译器将其他语言的代码编译成 .wasm 文件,以便在 WA 环境中使用 。
在浏览器环境中,可以通过 AJAX 导入外部文件,如导入 .wasm 文件 。
fetch("main.wasm");
JavaScript 中的 WebAssembly 对象是所有 WA 相关功能的命名空间,其中 WebAssembly.compile / WebAssembly.instantiate 或 WebAssembly.compileStreaming / WebAssembly.instantiateStreaming 方法组合可以用于加载和运行 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);
},
);
WebAssembly
:所有 WA 相关功能的命名空间WebAssembly.Module
:包含已经由浏览器编译的无状态 WebAssembly 代码WebAssembly.Global
:一个全局变量实例,可以被 JavaScript 和 importable/exportable 访问WebAssembly.Instance
:有状态,是 WebAssembly.Module
的一个可执行实例WebAssembly.Table
:代表 WA 表格概念的 JavaScript 包装对象,具有类数组结构,存储了多个函数引用WebAssembly.Tag
:定义了一种 WA 异常的类型,该异常可以从 WA 代码抛出或抛出WebAssembly.Exception
:表示从 WA 抛出到 JavaScript 的运行时异常,或者从 JavaScript 抛出到 WA 异常处理程序的运行时异常WebAssembly.LinkError
:表示在模块实例化期间发生错误WebAssembly.Memory()
:用于创建一个新的 Memory
内存对象WebAssembly.CompileError()
:创建一个新的 WA 编译错误对象WebAssembly.RuntimeError()
:创建一个新的 WA 运行时错误对象使用 C 或 C++ 编写一段代码(以 C 为例) 。
// filename: main.c
#include<stdio.h>
int main(){
printf("Hello, WebAssembly!");
return 0;
}
运行测试无误后继续 。
下载并安装用于编译 C/C++ 到 WA 的 Emscripten 。
详细操作参考官方下载与安装文档:https://emscripten.org/docs/getting_started/downloads.html 。
使用命令 emcc main.c -s WASM=1 -o main.html 编译 。
emcc
:Emscripten 提供的工具main.c
:基于 C 语言的代码-s WASM=1
:指定输出 WA-o main.html
:输出 main.wasm、main.js 和 main.html 文件,按需使用使用 C# 编写一段代码 。
// filename: main.cs
public class Example
{
public static void Main()
{
System.Console.WriteLine("Hello, WebAssembly!");
}
}
安装 .NET Core SDK、mono 。
使用命令 mcs --out:main.dll -t:library main.cs 将 C# 代码编译为 DLL 。
使用命令 mono --runtime=mono --aot=llvm main.dll 将 DLL 编译为 WA 。
使用 Go 编写一段代码:
// filename: main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, WebAssembly!")
}
使用命令 GOOS=js GOARCH=wasm go build -o main.wasm main.go 通过 GOCC 将 main.go 编译为 main.wasm 。
使用 Python 编写一段代码:
# filename: main.py
if __name__ == '__main__':
print("Hello, WebAssembly!")
使用命令 pip install py2wasm 安装 py2wasm 工具 。
使用命令 py2wasm main.py -o main.wasm 将 main.py 编译为 main.wasm 。
在 HTML 头中导入 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"); // 加载一个 Python 库
let result = await pyodide.runPythonAsync(`
import numpy as np
np.sum([1, 2, 3, 4])
`);
console.log(result);
}
main();
</script>
</body>
</html>
如果在 NodeJS 环境中,可以使用命令 npm install pyodide 导入 。
参考自《将 Rust 代码编译为 WASM | 博客园-_zhiqiu》 。
使用命令 cargo add wasm-bindgen 添加依赖项 。
使用命令 rustup target add wasm32-unknown-unknown 安装目标 。
使用 Rust 编写一段代码:
// filename: main.rs
use wasm_bindgen::prelude::*;
// 使用 #[wasm_bindgen] 宏来导出函数到 JavaScript
#[wasm_bindgen]
pub fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
使用命令 cargo build --target wasm32-unknown-unknown --release 将 main.rs 编译为 main.wasm 等文件 。
使用命令 wasm-bindgen --out-dir ./out --target web target/wasm32-unknown-unknown/release/lib_wasm.wasm 生成 JavaScript 绑定文件,并设置输出目录为 ./out 。
-End- 。
最后此篇关于WebAssembly基础以及结合其他编程语言的文章就讲到这里了,如果你想了解更多关于WebAssembly基础以及结合其他编程语言的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一张 Excel 表格,用于更新玩家评分。 播放器 配售 初始化 1 2 3 4 金融评级 一个 1 2.0 1.000 0.018 0.016 0.014 2.007 D 2 -2.0 54.5
我有一个 map = std::map ,其中 myItemModel继承QAbstractItemModel . 我现在要合并所有 myItemModel合一myItemModel (其他所有元素模
我大量使用“do.call”来生成函数调用。例如: myfun <- "rnorm"; myargs <- list(n=10, mean=5); do.call(myfun, myargs); 但是
想象一下 InputStream 的以下变体: trait FutureInputStream { //read bytes asynchronously. Empty array means E
这是我的 C 代码: #include void sum(); int newAlphabet; int main(void) { sum();
我只是想选择类“.last”之后的每个元素。 HTML: 1 2 Jquery
我正在为一个项目构建一个 XML 反序列化器,我经常遇到这种类型的代码情况: var myVariable = ParseNDecimal(xml.Element("myElement")) == n
这是来自 Selecting the highest salary 的继续问题 假设有一个表 'wagetable' name lowhours highhours wage pri
我正在为我的程序创建一个战舰程序;该程序运行良好,但我试图确保当用户将坐标超出范围时,程序会说他们输入的坐标不正确。这是代码: #include #include void
我有一个函数,它为每种情况返回不同的 DWORD 值,如果出现错误。所以我有以下定义: #define ERR_NO_DB_CONNECTION 0x90000 #define ERR_DB_N
在派生类中引发基类事件以下简单示例演示了在基类中声明可从派生类引发的事件的标准方法。此模式广泛应用于 .NET Framework 类库中的 Windows 窗体类。在创建可用作其他类的基类的类时,应
我只是想知道这是否可能: use Modern::Perl; my @list = ('a' .. 'j'); map { func($_) } each(@list); sub func { m
我一直在使用 =IF(L2="","Active",IF(K2I2,"Late"))) 有效,但现在我需要检查 F 上的多个条件 专栏 我试过了 OR 函数 =IF(OR(F2="Scheduled"
我有 2 个命令,如下所示。 在视频中添加介绍图片 ffmpeg -y -loop 1 -framerate 10 -t 3 -i intro.png -i video.mp4 -filter_com
好的,我有这个公式可以根据名字和姓氏列表生成用户名。现在,虽然这可行,但我希望单元格改为引用我自己的 VBA 函数。但是,由于代码少得多,我仍然想使用原始公式。 我有这个公式: =SUBSTITUTE
我有两个 HAProxy 实例。两个实例都启用了统计信息并且工作正常。 我正在尝试将两个实例的统计信息合并为一个,以便我可以使用单个 HAProxy 来查看前端/后端统计信息。我试图让两个 hapro
我有一个 Observable,其中每个新值都应该引起一个 HTTP 请求。在客户端,我只关心最新的响应值;但是,我希望每个请求都能完成以进行监控/等。目的。 我目前拥有的是这样的: function
我的网站上有 TinyMCE 插件。在 TinyMCE 插件的 textarea 中添加图像时,我希望这些图像包含延迟加载。我网站的缩略图具有特定类型的延迟加载,其中 src 图像是灰色背景。根据用户
我希望合并润滑间隔,以便如果它们重叠,则从内部第一个时间获取最小值和从内部最后一个时间获取最大值并总结以创建一个跨越整个时间段的新间隔。这是一个reprex: library(lubridate, w
我有一个应用程序,它本质上是一个页眉、主要内容和一个始终可见的页脚。页脚可以改变大小,我想在页脚上方的主内容面板上放置一些工具。主要布局是用 flex 完成的,我阅读文档的理解是绝对定位通过相对于最近
我是一名优秀的程序员,十分优秀!