TypeScript 编译器源码研究(一)

TypeScript (如下简称 TS)是一个很是强大的语言,其编译器源码超过 10000 行。git

源码在 Github 能够找到:https://github.com/Microsoft/TypeScript/tree/master/src/compilergithub

基础概念

只读(immutable)对象

TS 源码大量应用了只读对象来提高解析性能。只读对象即一个普通对象,但没法修改其内部任意属性,若是须要修改,则必须建立一个新的副本。缓存

这个设计使得程序能够只在须要的时候再处理对象,而且把处理的结果缓存起来。由于对象是只读的,因此缓存的数据始终是正确的,不会由于对象更改致使缓存失效。函数

编译器概念

通用的编译器都须要了解如下概念:性能

  • 语法树(Abstract Syntax Tree):表示源码的基本结构。全部提到编译器原理的地方都会提到语法树,这里很少解释。
  • 符号(Symbol):符号表示是一个变量、一个字段或一个函数之类属于“定义”范畴的概念,符号通常会属于某个词法做用域(Scope),且符号能够计算其类型。
  • 类型(Type):表示一个数值类型,类型拥有父类型、子成员。
  • 流程分支(FlowNode):表示代码从上往下执行的分支状况,经过流程分支能够掌握到从头到当前位置的执行步骤,固然也能够检测到没法执行的代码(好比 return 以后的代码)。
  • 函数签名(Signature):表示一个函数的一种参数方式,经过签名能够肯定函数的参数类型和返回类型。一个函数能够有多个签名。

 ---国内研究编译器的人很少,若是你以为这篇文章有用,请经过评论告知,我将完善内容---设计

相关文章
相关标签/搜索