编译和解释
编程语言分为两类:
编译型:如 C/C++
解释型:如 Java/Python/JS
编译型语言,代码需要经过下面的步骤转成机器码:
文本 -> 汇编语言 -> 可运行机器码
实解释性语言需要经过词法分析、语法分析、语义分析转成汇编语言。然后再把汇编语言翻译成机器码,汇编和机器码是两个比较接近的语言,只是汇编不需要去记住哪个数字代表哪个指令。
WebAssembly
WASM 优势在于它不需要解释器,可以直接转成汇编代码,所以运行速度提升明显。
Mozilla 公司最早开发的 asm.js,后来慢慢主流的浏览器都支持 asm,并发展成 WASM。它的特点是强类型,一般认为 WASM 是 JS 的一个子集,它的特点是强类型,并且只支持整数、浮点数、函数调用、数组、算数计算等。
WASM 和 js 比较
- 速度比较,计算 1-46 的斐波那契值,重复一百万次,wasm 要比 js 快一倍
- 解析时间,wasm 解析时间较长
- 文件大小比较,20000 行代码,wasm 只有 3.4k,压缩后的 js 还有 165k
- wasm 优缺点,适合对计算性能要求高的,如图形计算方面。缺点是它的类型检查比较严格,写 js 编译经常会报错,不方便 debug。