程式語言的實用方法
從這 3 小時的課程,你會學到
- LLVM 編譯器基礎架構
- LLVM 前端
- 使用 LLVM 建立自訂程式語言
- 物件導向程式設計:編譯類
- 函數式程式設計:Lambda 函數與閉包
- 分支指令和控制流
- LLVM IR
- 程式碼生成
要求
課程說明
課程大綱
程式語言的底層運作原理是什麼?compiler (編譯器) 和 interpreter (直釋器)有什麼差別?virtual machine (虛擬機器) 和JIT-compiler (即時編譯器)是什麼? functional (函數式程式設計) 和 imperative (命令式程式設計)有什麼差別?
在實作一門程式語言時,會遇到很多問題!
學校裡“compiler classes( 編譯器課程)”的問題在於,這類課程通常被描述成“高深莫測的火箭科學”,似乎只適合高級工程師。
此外,經典的編譯器教材往往從最不重要的主題(例如詞法分析)入手,直接深入形式語法的理論層面。等到學生開始實現第一個分詞器模組時,他們就已經對這個主題失去了興趣,根本沒有機會真正開始實現一門程式語言。就這樣,整整一個學期都在擺弄分詞器和 BNF 語法,卻始終無法真正理解程式語言的語意。
我相信我們應該能夠在 4-6 小時內建立並理解一門完整的程式語言語義,從頭到尾——課程內容直奔主題,透過結對程式設計的即時編碼演示,並以易於理解的方式進行講解。
在「使用 LLVM 進行程式語言開發」課程中,我們將專注於把我們的語言編譯成 LLVM IR,並建立一門底層程式語言。透過與 LLVM 編譯器基礎架構的緊密合作,您將了解 C++、Rust 等底層編譯和生產級語言的工作原理。
實現一門程式語言還能提升您在其他程式語言方面的實作水平,使其更加專業。
先決條件
本課程有三個先修要求。
“使用 LLVM 進行程式語言程式設計”課程是先前課程的自然延伸——“從零開始構建 Interpreter 直釋器(又稱 Essentials of Interpretation)”,我們也會建立一門完整的程式語言,但這次是在更高的抽象語法樹(AST)層面上;此外,我們還學習了“構建虛擬機器(Virtual Machine,VM )”。除非您已經了解程式語言在這個層面的工作原理,例如 eval、閉包、作用域鏈、環境和其他結構是什麼,否則您必須先修 interpreters 課程。
此外,為了更深入了解生產語言所在的底層(位元程式碼/IR),我們需要具備基本的 C++ 經驗。然而,本課程並非專注於 C++,因此我們只使用非常基礎(且可遷移到其他語言)的結構。
本課程適合哪些人?
本課程適合任何對構建複雜系統充滿好奇心的工程師,他們希望掌握構建複雜系統(構建程式語言是一項高級工程任務!)的技能,並獲得構建此類系統的可遷移知識。
如果您對 LLVM、其編譯器基礎架構以及如何建立自己的語言特別感興趣,那麼這門課程也適合您。
實現方式是什麼?
由於底層編譯器注重效能,它們通常使用 C 或 C++ 等底層語言實作。我們也正是這樣做的,但主要使用 C++ 的基本特性,而不是 C++ 的具體細節。程式碼應該易於轉換和移植到任何其他語言,例如 Rust 甚至 Python 等更高級的語言。使用 C++ 也方便進一步實作 JIT 編譯器。
注意:我們希望學生能夠真正理解並自行實現 LLVM 編譯器的每個細節,而不是僅從最終解決方案中複製貼上。儘管影片課程中展示了該語言的完整原始碼,但專案程式碼庫中包含 /* 在此處實現 */ 的作業,學生必須自行完成這些作業。
這門課有什麼特別之處?
這些講座的主要特點是:
簡明扼要。直奔主題。每堂課內容完整、精煉,直接圍繞主題展開,避免無關內容或討論分散注意力。分散在不相關的材料或談話上。
動畫演示與實時編輯筆記相結合。這使得對主題的理解更容易,並顯示物件結構是如何連接。靜態簡報根本不適用於複雜的內容。
從一頭到另一頭的實際寫程式時段。完整的源始碼,從頭開始,直到最後都在視訊講座中呈現
課程內有什麼?
課程分為四個部分,共20節課,每節課有多個子課題。下面是目錄和課程表。
第 1 部分:LLVM 基本構造
本部分將介紹編譯和解釋流程,並開始建立我們的語言。我們將討論 LLVM IR、物件以及位碼編譯等主題。
第 2 部分:函數( Functions ) 和堆疊( Stack )
在本部分中,我們將實作諸如 if 表達式和 while 迴圈之類的控制流結構,討論堆疊變數、巢狀區塊和局部變量,並編譯函數。
第 3 部分:物件導向程式設計
在本部分中,我們將實作物件導向程式設計(Object-oriented programming,OOP)的概念,例如類別、實例,並討論堆分配和垃圾回收器。
第 4 部分:高階函數
在本部分中,我們將重點放在閉包、函數式程式設計、lambda 函數,並實現最終的可執行檔。
目標受眾
- 編譯器工程師
- 對程式語言充滿好奇心的工程師
- 想要從零開始建立程式語言的開發者
講師簡介
Dmitry Soshnikov 軟體工程師與講師
Dmitry Soshnikov 是一名軟體工程師和不同計算機科學主題的講師。
他對教育充滿熱情,專注於高品質的教育內容:簡明扼要的動畫講座和現場編輯筆記。
你將學習:
- 編譯器( compilers )和直譯器( interpreters ):建構程式語言
- 低階虛擬機( VM )
- 垃圾收集器(自動記憶體管理)
- 程式語言理論
- 自動機( Automata )理論:構建 RegExp 機器
- 解析器( Parsers )理論和解析器生成器
英文字幕:有
- 想要了解如何將英文字幕自動翻譯成中文? 請參考這篇 How-To
- Udemy 永久擁有課程 限時優惠中 約NT330(點擊連結看更多)
- ✨年訂閱每月 NT350 🌈 悠遊 Udemy 的 26000+ 門課,最大化學習 ( 原價 NT635/月 )
- Udemy 現在越來越多課程有中文字幕,請參考 Soft & Share 中文線上課程
- 手機上點選優惠連結看到的價格比電腦上看到的貴
- $代表當地貨幣, 如在台灣為 NT
- 點選”報名參加課程”有可能因瀏覽器 cookies 轉久一點或回報錯誤而無法連上,請稍等刷新或重新點選就會出現
報名參加課程

也許你會有興趣
- 資料結構與演算法相關線上課程
- ★英語學習地圖 – 練好英文是最大的學習槓桿
- 如何找工作學習地圖 – 找工作不要靠運氣!
- 從 Soft & Share 各種社團頻道挑選你喜歡的加入
發表迴響