WebAssembly在前端中的应用与展望
徐君
Intel 软件研发工程师
个人简介
徐君
- 擅长运行时引擎、编译器前端方向
- WebAssemblyMicroRuntime(WAMR)项目核心成员,主要负责: • 性能优化 • 开发者体验 • 产品应用
- 项目地址: https://github.com/bytecodealliance/wasm-micro-runtime
WebAssembly在前端中的应用与展望 徐君 Intel 软件研发工程师
WebAssembly 和 WAMR 简介
什么是WebAssembly?
- WebAssembly(wasm)是一个可移植、体积小、加载快并且兼容Web的 全新格式
- 安全
- 沙箱隔离机制,宿主资源访问可控制
- 高效
- 通过JIT/AOT技术加持,可接近原生应用的执行性能
- 多语言支持
- C/C++, typescript, python, go, rust, ..
WebAssembly = Sandboxing + Performance + Portability + Capabilities
WAMR发展历史
- 2019年5月Intel开源WAMR项目
- 2019年11月以创始项目身份发起并加入Bytecode Alliance(BA)
- 2021年10月转换为社区开放治理模式
- 设计目标
• 广泛的适用性:从嵌入式设备到云端
• 小尺寸,高性能的轻量级 WASM 运行时
• 适配多种CPU架构(32bit and 64bit)和操作系统 • Intel SGX/TDX 一等公民支持
WAMR在前端的应用
- 浏览器中的应用
- Disney ADK
- 天猫精灵 waft 案例链接: https://developer.aliyun.com/article/787582
- 小米 vela OS
- 支付宝Paladin互动引擎
WAMR针对前端场景的优化设计
WAMR特性介绍
- 实现语言:C
- 解释器:
- Fast interpreter —— 速度优先
- Classic interpreter —— 内存优先
- 编译后端:LLVM • 目标文件大小
- VMCore – 60K for AoT, 90K for interpreter
- 150K for the whole runtime
- AoT 支持平台:Linux, SGX, MCU
- SIMD 支持
- SGX/TDX 一等公民支持
- Wasm 多线程特性与 pthread 支持
- Reference type, Multi-modules
- CPU Arch support:
- X86-64, X86-32
- ARM, THUMB, AARCH64
- MIPS
- XTENSA
- Platform support:
- Linux,SGX (Linux)
- Windows
- MacOS
- Android
- Zephyr, AliOS Things • Vxworks
- Nuttx, RT-thread
- iOS*
WAMR整体架构
- 预先编译
- Fast interpreter
- Extend new bytecode
- Builtin-libc
WebAssembly现存问题
- 应用编程语言欠缺
- 跨模块交互不便
- 开发工具不完善
WebAssembly未来展望
WebAssembly 2.0 草案
- 已包含的主要内容:
- 固定宽度(128bit)SIMD
- 批量内存操作、table操作
- 引用类型
- 多返回值
- 讨论中
- 异常处理
- 多线程
- 宽松SIMD
- 其他
GC proposal
- 意义
- 更高效地支持高级语言
- 更快的执行效率
- 更小的模块体积
- 纯静态类型系统
- 复用任意GC实现
- GCproposal并不涉及具体GC算法
- 定义struct,array等基本结构
- 目前状态
- 一部分依赖的feature(如reference-types等)已就绪
- 一些runtime已经提供实验性支持(WAMR,V8)
- 暂未稳定,偶尔会有大幅调整
Component model