TypeScript 編譯器源碼研究(一)


TypeScript (以下簡稱 TS)是一個非常強大的語言,其編譯器源碼超過 10000 行。

源碼在 Github 可以找到:https://github.com/Microsoft/TypeScript/tree/master/src/compiler

基礎概念

只讀(immutable)對象

TS 源碼大量應用了只讀對象來提升解析性能。只讀對象即一個普通對象,但無法修改其內部任意屬性,如果需要修改,則必須創建一個新的副本。

這個設計使得程序可以只在需要的時候再處理對象,並且把處理的結果緩存起來。因為對象是只讀的,所以緩存的數據始終是正確的,不會因為對象更改導致緩存失效。

編譯器概念

通用的編譯器都需要了解以下概念:

  • 語法樹(Abstract Syntax Tree):表示源碼的基本結構。所有提到編譯器原理的地方都會提到語法樹,這里不多解釋。
  • 符號(Symbol):符號表示是一個變量、一個字段或一個函數之類屬於“定義”范疇的概念,符號一般會屬於某個詞法作用域(Scope),且符號可以計算其類型。
  • 類型(Type):表示一個數值類型,類型擁有父類型、子成員。
  • 流程分支(FlowNode):表示代碼從上往下執行的分支情況,通過流程分支可以掌握到從頭到當前位置的執行步驟,當然也可以檢測到無法執行的代碼(比如 return 之后的代碼)。
  • 函數簽名(Signature):表示一個函數的一種參數方式,通過簽名可以確定函數的參數類型和返回類型。一個函數可以有多個簽名。

 教程見:https://www.cnblogs.com/xuld/p/12180913.html 。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM