使用 LLVM 進行程式語言程式設計

程式語言的實用方法

從這 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 轉久一點或回報錯誤而無法連上,請稍等刷新或重新點選就會出現

報名參加課程

Sponsored by Udemy


也許你會有興趣

不受 FB 演算法影響,歡迎透過 e-mail 訂閱網站更新

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

由 WordPress.com 建置.

Up ↑

探索更多來自 Soft & Share 的內容

立即訂閱即可持續閱讀,還能取得所有封存文章。

Continue reading