当前位置: 首页 > article >正文

WebAssembly 学习笔记

WASM

概述

wasm最初是为了在浏览器获得接近原生的性能体验
支持将其他语言实现的程序编译到wasm字节码,引入到浏览器由JS交互调用。
后又有了脱离JS的wasm运行时,可以直接运行wasm。
从而促成了wasm跨平台分发的能力。
但由于运行时的安全沙箱限制,其应用范围受限。

应用场景

  • 替换JS来实现高性能要求的功能模块(如md5计算)
  • 将已有的成熟项目迁移到浏览器环境运行(如ffmpeg)
  • 轻量级容器化技术

emscripten

是一个c/c++编译工具,可以编译到wasm

source ./emsdk_env.sh
# 查看emcc
emcc -v

对以下c程序编译

#include <stdio.h>

int main() {
  printf("Hello, world!\n");
  return 0;
}
emcc hello.c -o hello.wasm

根据-o指定不同后缀,编译出的结果供浏览器,node,其他运行时等使用。

  • emcc xx.c -o xx.html 浏览器
  • emcc xx.c -o xx.js node
  • emcc xx.c -o xx.wasm 其他运行时如wasmtime
HTML服务器

可以查看生成的HTML

python -m http.server 8080
nodejs
node xx.js
wasmtime

是一个wasm运行时

cd ~/.wasmtime/bin
./wasmtime xx.wasm
cmake

配合cmake使用,需要指定编译工具

set(CMAKE_C_COMPILER "/emsdk-main/upstream/emscripten/emcc")
set(CMAKE_CXX_COMPILER "/emsdk-main/upstream/emscripten/em++")
set(CMAKE_EXECUTABLE_SUFFIX ".wasm")

存在的问题

主要问题是安全沙箱环境的限制。其次,还有调试工具不完善等。

功能不完全

  • 不能直接访问硬件设备
  • 不能随意访问本地文件系统
  • 不支持基于本地窗口系统(Windows GDI/Linux X11)的图形库
  • 其他:进程管理(fork exec)/网络(sys/socket netdb)/内存/线程(pthread)等

References

  • https://juejin.cn/post/7259182371974266936
  • emscripten
  • wasmtime

http://www.kler.cn/a/461698.html

相关文章:

  • Spring Cloud Security集成JWT 快速入门Demo
  • Linux终端输入删除键backspace显示^H,输入上下左右键显示^A^B^C^D原理以及详细解决办法!
  • vscode代码AI插件Continue 安装与使用
  • PostgreSQL对称between比较运算
  • 【工具进阶】使用 Nmap 进行有效的服务和漏洞扫描
  • MATLAB画柱状图
  • 网络安全 | 5G网络安全:未来无线通信的风险与对策
  • OpenVPN 被 Windows 升级破坏
  • Linux命令——3.网络与用户
  • SQL常用语句(基础)大全
  • C++算法20例
  • Listwise 模型时间线梳理
  • Flask是什么?深入解析 Flask 的设计与应用实践
  • main函数
  • Kafka优势剖析-顺序写、零拷贝
  • 【C++】22___STL常用算法
  • 【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置
  • node.js之---集群(Cluster)模块
  • 最新版Chrome浏览器加载ActiveX控件之CFCA安全输入控件
  • 设置虚拟机设备的dp和pt
  • 07-ArcGIS For JavaScript--隐藏参数qualitySettings(memory和lod控制)
  • DataV数据可视化
  • 【2025 Rust学习 --- 09 特型和泛型】
  • C语言:位段
  • 【2024年-6月-7日-开源社区openEuler实践记录】探索 oec - hardware:硬件适配与管理的开源利器
  • Android实现队列出入队测试