2016-10-28

JavaScript Weekly 307 阅读笔记

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 typeC type
Int8Array1byteint8_t
Uint8Array18-bit unsigned integer octetuint8_t
Uint8ClampedArray18-bit unsigned integer (clamped) octetuint8_t
Int16Array216-bit two’s complement signed integer shortint16_t
Uint16Array216-bit unsigned integer unsigned shortuint16_t
Int32Array432-bit two’s complement signed integer longint32_t
Uint32Array432-bit unsigned integer unsigned longuint32_t
Float32Array432-bit IEEE floating point number unrestricted floatfloat
Float64Array864-bit IEEE floating point number unrestricted doubledouble