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):表示一個函數的一種參數方式,經過簽名能夠肯定函數的參數類型和返回類型。一個函數能夠有多個簽名。

 ---國內研究編譯器的人很少,若是你以爲這篇文章有用,請經過評論告知,我將完善內容---設計

相關文章
相關標籤/搜索