fbpx

從頭開始建構一個 Typechecker

型別( Type )檢查和推理的要點

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

  • 型別系統
  • 型別理論和類型判斷
  • 靜態與動態 TC
  • 強型別與弱型別
  • 型別檢查 | 型別推斷
  • 類型安全和記憶體安全
  • Typechecker (型別檢查器)實現的實踐方法
  • 為完整的程式語言建構靜態型別檢查器( static typechecker )
  • 型別聲明
  • 泛型函數的型別化
  • 鍵入功能和 OOP 程式設計

要求

[可選]“從頭開始建構一個直譯器”課程

課程說明

課程大綱

無型別程式設計( untyped programs )通常容易出錯、運行時異常,並且會使 debug 變得更加困難。這就是為什麼許多程式語言都實現了靜態型別檢查器( static typechecker ) —— 一個額外的模組,旨在提高程式的安全性並簡化開發。

型別檢查( type checking )或型別推斷( type inference )?什麼是型別理論和類型判斷?我用的語言是弱型別還是強類型?我實際上將如何實現 typechecker?

在實施這個模組時會有很多問題。如果你在實施你的程式語言時一直在問這些問題,或者只是想了解 typeckechers 在後台是如何工作的,那麼本課程適合你。


通常關於型別理論和型別判斷的相關書籍都將型別視為數學集合的理論方面,而不是解釋如何實際建構實用的 typechecker。我相信我們應該能夠在 2-4 小時內建構和理解一個完整的程式語言的 typechecker,端到端,內容清楚明暸,如結隊編寫程式的樣子即時在你面前編寫程式,並以一種可以理解的方式說明。

在本課程中,我們特別關注靜態型別檢查器,並建構一個類似於 TypeScript、Java 等的工具。我們稍微接觸了型別理論,並且從第一堂課開始就進入了實際實現。

實現型別檢查器還會提高你的工程水準,因為它涉及資料結構和演算法多個方面。

實施中採用了哪些技術?

有時人們認為,要建構一個 typechecker,你當然需要使用一些本身“與型別和型別理論非常相關”的程式語言(例如其他函數式程式語言的 OCaml)。但實際上沒有!你可以用純 JavaScript 建構一個完全可運作的 typechecker,並涵蓋型別系統的所有方面。這正是我們用於實現的。

JavaScript 作為最流行的程式語言,對許多工程師應該沒問題,而且我們的目標是提供一個簡單而簡潔的實現,而不是專注於特定宿主語言的細節。因此,程式碼應該可以移植到你喜歡的和選擇的任何語言:TypeScript、Rust、OCaml、C++、Python 等

注意:我們希望我們的學生自己真正遵循、理解和實施 Typechecker 的每個細節,而不是僅僅從最終解決方案中複製貼上。儘管視訊講座中提供了 typechecker 的完整源始碼,但該專案的程式碼貯儲庫( repository )包含 <em>/*在此實施 */<em> 作業,學生必須實做解決。

這門課有什麼特別之處?

這些講座的主要特點是:

簡明扼要。每個講座都是自給自足的,簡潔的,並描述與主題直接相關的資訊,而不是分散在不相關的材料或談話上。

動畫演示與實時編輯筆記相結合。這使得對主題的理解更容易,並顯示物件結構是如何連接。靜態簡報根本不適用於複雜的內容。

從一頭到另一頭的實際寫程式時段。完整的源始碼,從頭開始,直到最後都在視訊講座中呈現

課程內有什麼?

課程分為四個部分,共20節課,每節課有多個子課題。下面是目錄和課程表。

第 1 部分:型別理論和基本類型

在這一部分中,我們開始討論型別理論、型別檢查和型別推斷,並為我們的 typechecker 奠定了基礎。我們建立基本類型,實施變數,討論 Typing Environment,建構解析器( parser )。

第 2 部分:功能的程式編輯

在這一部分中,我們關注不同類型的函數——用戶定義的、內置的函數、內部函數和閉包、遞歸函數和匿名 lambda 表達式。

第 3 部分:型別聲明( TYPE DECLARATIONS )和類別( CLASSES )

在這一部分中,我們實現了旨在定義新型別的構造。考慮型別別名和 OOP 類別( classes )的主題。

第 4 部分:泛型程式編輯

在這一部分中,我們繼續型別聲明,討論聯合( Union )型別,並實現泛型函數( generic functions )。

目標受眾

  • 程式語言工程師
  • 任何想知道 typecheckers 如何在幕後工作的好奇工程師

講師簡介

Dmitry Soshnikov 軟體工程師與講師

Dmitry Soshnikov 是一名軟體工程師和不同計算機科學主題的講師。

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

你將學習:

  • 編譯器( compilers )和直譯器( interpreters ):建構程式語言
  • 低階虛擬機( VM )
  • 垃圾收集器(自動記憶體管理)
  • 程式語言理論
  • 自動機( Automata )理論:構建 RegExp 機器
  • 解析器( Parsers )理論和解析器生成器

英文字幕:有

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

使用 Notion 來做上課筆記?

udemy 的課程講座數量動輒上百個,如果你要使用 Notion 當作是線上課程的筆記輔助工具,為這些講座建立與組織筆記是一件耗時且沒效率的工作

為了解決這個問題,Soft & Share 開發一個 chrome extension – LN+ for udemy ,可以根據 udemy 線上課程的課程大綱幫你自動建立成 Notion 筆記資料庫並產生筆記與課程的雙向關聯讓您專心上課與寫筆記就好,不用再煩惱課程筆記要放哪裡的問題!

🛫了解 LN+ for udemy 更多功能介紹請參考 – Learning Notes Plus for udmy


報名參加課程

Sponsored by Udemy


🛫使用關鍵字連結獲得更多線上學習資訊?請參考這個網頁說明


幫我們個小忙!

使用 e-mail 追蹤 Soft & Share

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

Powered by WordPress.com.

Up ↑

%d 位部落客按了讚: