WebAssembly
https://bun.sh/docs/runtime/loaders#wasm
读到这里出于好奇去了解了一下 WebAssembly
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.
下面是对这段话的解释
解释开始:
WebAssembly 是一个二进制的指令格式
其他的 high-level programming language (e.g., C, C++, Rust, Go) 可以被编译成 wasm 二进制格式这样的中间产物
stack-based virtual machine 是一种 VM 类型,stack-based 是一种较为通用的设计,不依赖特定的机器。 A stack-based virtual machine (VM) is a type of virtual machine where most of the instructions perform operations by pushing and popping values from a stack, rather than manipulating values in fixed registers.
Since Wasm binaries can be executed by any environment that supports WebAssembly (e.g., modern web browsers, server runtimes like Node.js), the same Wasm binary will run consistently across all these environments. 实现了 WebAssembly 规范的 VM 就可以跑 wasm 代码
解释结束
这种设计,在对性能有较高要求的时候,可以利用 wasm 承担一部分复杂任务,来提高性能
- 接近原生的执行速度 WebAssembly 被设计成一种高效的二进制格式,旨在提供接近原生的执行速度。相比于 JavaScript,Wasm 的指令集更简单且直接,解析和执行速度更快。这使得 Wasm 非常适合用于计算密集型任务,例如图形渲染、图像处理、音视频编解码和科学计算等。
- 高效的内存管理 Wasm 使用线性内存模型,这种内存模型更加接近底层硬件,减少了内存管理的开销。Wasm 的内存分配和访问操作是通过明确的指令进行的,这减少了不必要的开销,提高了性能。
- 优化的编译和执行环境 现代浏览器和运行时(如 Node.js)都对 Wasm 进行了深度优化,包括即时编译(JIT)和流式编译,使得 Wasm 模块可以在加载时就开始编译和执行,从而减少启动时间并提高执行效率。
了解了下相关生态,看着 Rust 在这里是做的比较好的