js 编写简单的 compiler
这个小小的 compiler 还挺简单,将简单的画图指令转换为 SVG 标记。文章作者写了一个 demo,用来演示转换的整个过程,感觉不错,建议看看。
之前也有人讲过一些,比如 github 上的 the-super-tiny-compiler(有中文版),貌似还在 2016 年 JSConf 上讲过。又如我之前翻译的这个,《小两百行 JavaScript 打造 lambda 演算解释器》。
其实,说到底还是几个步骤,简单的 compiler 实现起来大同小异。词法分析生成 token,句法分析生成 AST,然后转换 AST,最后遍历 AST 生成代码。
说到遍历 AST 生成代码,实际上,我们常用的 Babel、UglifyJS 等等这些都有用到。
想到几篇文章,可以看看:
Typed Array
关于 Typed Array 的浏览器支持,目前还存在以下问题:
- IE 9 不支持
- IE10 (以及 IE 10&11 mobile) 不支持 Uint8ClampedArray
- Safari 5.1 不支持 Float64Array
- Firefox 14 以下没有 DataView
- Safari 6 之前的版本, Typed Array 比 Array 对象还要慢
- IE 10 中的 ArrayBuffer 没有 slice 方法
Type Array 类型如下:
Type | 字节 | Web IDL type | C type |
---|---|---|---|
Int8Array | 1 | byte | int8_t |
Uint8Array | 1 | 8-bit unsigned integer octet | uint8_t |
Uint8ClampedArray | 1 | 8-bit unsigned integer (clamped) octet | uint8_t |
Int16Array | 2 | 16-bit two’s complement signed integer short | int16_t |
Uint16Array | 2 | 16-bit unsigned integer unsigned short | uint16_t |
Int32Array | 4 | 32-bit two’s complement signed integer long | int32_t |
Uint32Array | 4 | 32-bit unsigned integer unsigned long | uint32_t |
Float32Array | 4 | 32-bit IEEE floating point number unrestricted float | float |
Float64Array | 8 | 64-bit IEEE floating point number unrestricted double | double |