從頭開始建立一個直譯器

程式語言的語義學 ( Semantics )

報名參加課程

從這 3 小時的課程,你會學到

  • 從頭開始建立一種程式語言
  • 直譯器和編譯器
  • AOT、JIT-編譯器和轉譯器
  • AST直譯器和虛擬機器
  • 位元組碼、LLVM、堆疊機
  • 一級函式( First-class functions )、Lambdas和Closures
  • 呼叫堆疊和啟用記錄
  • OOP。類別、實例( Instances )和原型
  • 模組和抽象

要求

  • 基本資料結構和演算法
  • 圖形、樹、遍歷

課程說明

程式語言如何在引擎蓋下工作?編譯器和直譯器之間有什麼區別?什麼是虛擬機器,以及JIT-編譯器?函數語言程式設計和指令式程式設計的區別又是什麼呢?

當涉及到實現一種程式語言時,有太多的問題了!

學校裡的 “編譯器課程 “的問題是,它們通常被表述為一些 “硬核火箭科學“,只適合高階工程師。

此外,經典的編譯器書籍從最不重要的話題開始,比如詞法分析,馬上就深入到形式化語法的理論方面。而到了實現第一個 Tokenizer 模組的時候,學生們就會對這個主題失去興趣,沒有機會真正開始實現一種程式語言本身。而這一切都被分散到整個學期的標記器和 BNF 語法的混亂中,而沒有理解程式語言的實際語義。

我相信我們應該能夠在4-6個小時內建立並理解一個完整的程式語言語義( full programming language semantics ),內容直奔主題,在現場編碼課程中以配對程式設計的方式展示,並以可理解的方式描述。

在 “解釋要點 “課程中,我們特別關注執行時期語義( runtime semantics ),並為一種非常類似於 JavaScript 或 Python的程式語言建立一個直譯器。

實現一種程式語言也會使你對其他程式語言的實際使用水平更加專業。

實現一種程式語言也會使你對其他程式語言的實際使用水準更加專業。

這門課是為誰準備的?

這門課是為任何好奇的工程師準備的,他們想獲得建構複雜系統的技能(而建構程式語言確實是一項相當高階的工程任務!),並獲得建構此類系統的可轉移知識

如果你對編譯器、直譯器和原始碼轉換工具特別感興趣,那麼這門課也適合你。

這門課的唯一前提是基本的資料結構和演算法:樹、列表( lists ) 、遍歷。

用什麼來實現?

由於我們建立的語言在語義上與 JavaScript 或 Python(當今最流行的兩種程式語言)非常相似,所以我們專門使用JavaScript–它優雅的多正規化結構結合了函數語言程式設計、基於類別和基於原型的OOP,非常適合於此。

許多工程師都熟悉JavaScript,所以應該更容易馬上開始編碼。然而,在實現過程中,我們並不依賴太具體的 JS 結構,課程中的程式碼很容易移植到 TypeScript、Python、Java、C++、Rust 和任何其他你喜歡的語言中。

注意:我們希望我們的學生能夠真正遵循、理解並自己實現直譯器的每一個細節,而不是僅僅從最終解決方案中複製貼上。該語言的完整原始碼在影片講座中提供,展示並指導如何構造特定的模組。

這門課有什麼具體內容?

這些講座的主要特點是:

  • 簡明扼要,直奔主題:每個講座都是自成一體,簡明扼要,描述與主題直接相關的資訊,不會在不相關的材料或講座上分散注意力
  • 動畫展示與現場編輯筆記相結合:這使得對主題的理解更加容易,並顯示出物件結構是如何(以及在什麼時候)連結的。靜態的幻燈片對複雜的內容根本不起作用
  • 帶有作業的端對端現場編碼課程:完整的原始碼,從零開始,一直到最後,都在影片講座課上呈現。在課程中,我們為我們的程式語言實現了一個完整的AST直譯器

閱讀材料

作為本課程的進一步閱讀和補充文獻,推薦以下書籍。

  • Harold Abelson和Gerald Jay Sussman的《Structure and Interpretation of Computer Programs》(SICP)
  • 程式語言。Shriram Krishnamurthi的《Programming Languages: Application and Interpretation》(PLAI)

課程內容是什麼?

該課程分為四個部分,共18個講座,每個講座都有許多子課題。詳細的講座說明請見課程表。

第一部分:編譯器速成課程

在這一部分中,我們描述了不同的編譯和解譯管道,看看 JIT 編譯器和 AOT 編譯器的區別,談談什麼是虛擬機器和位元組碼直譯器,以及它與AST直譯器的區別,展示原生代碼和 LLVM IR 的例子,以及其他主題。

第二部分:直譯器:基本表示式和變數

在這一部分中,我們開始建立我們的程式語言,並考慮基本的表示式,如數字、字串,談論變數、作用域和詞法環境、控制結構,以及觸控解析器發生器。

第三部分。函式和函數語言程式設計

在這一部分,我們開始討論和實現函式抽象,以及函式呼叫。我們描述了閉包、lambda函式和IIL(Immediately-invoked lambda expressions)的概念。此外,我們還討論了Call-stack、遞迴和句法糖等話題。

第四部分:物件導向程式設計

本課程的最後一部分是專門討論我們語言中的物件導向支援。我們描述了基於類別和基於原型的方法,實現類別、實例( instance ) 和模組的概念。

我希望你會喜歡這門課,並樂意在評論中討論任何問題和建議。

  • Dmitry Soshnikov

目標受眾

  • 想知道和了解程式語言如何在引擎蓋下工作的好奇心強的工程師們

講師簡介

Dmitry Soshnikov 軟體工程師和講師 ( 更多講師線上課程介紹 )

Dmitry Soshnikov 是一名軟體工程師,也是一名有不同於電腦科學主題的講師。

他對教育充滿熱情,注重高品質的教育內容: 簡明扼要,並使用現場編輯筆記的動畫講座。

你會從 Dimitry 的課程學到:

  • 編譯器和直譯器: 建立一個程式語言
  • 垃圾收集器(自動記憶體管理)
  • 程式設計語言理論
  • Automata Theory: Building a RegExp machine
  • 自動機理論: 建立一個 RegExp 機器
  • 解析器理論: 實現一個編譯器編譯程式

英文字幕:有

  • 想要了解如何將英文字幕自動翻譯成中文? 請參考這篇 How-To

報名參加課程

Sponsored by Udemy

也許你會有興趣

找其它課程?試看看 Soft & Share 網站搜尋引擎

✍ 搜尋結果太多?可參考 Soft & Share 搜尋引擎使用技巧


追蹤 Soft & Share

幫我們個小忙!

Comments are closed.

Powered by WordPress.com.

Up ↑

%d 位部落客按了讚: