Building a Typechecker from scratch

2h 16m 15s
English
Paid

Untyped programs are often prone to errors, runtime exceptions, and can make debugging much harder. That’s why many production languages implement a static typechecker — an extra module, which is aimed to increase programs safety and make development simpler.

Type checking or type inference? What is Type theory and Type judgements? Is my language weakly or strongly typed? And how am I actually going to implement a typechecker?

There are so many questions when it comes to implementing this module. If you’ve been asking those questions in implementing your programming language, or just want to understand how typeckechers work under the hood, on a hands-on practical implementation, this course is for you.

Often related books on Type theory and type judgements go to theoretical aspects viewing types as mathematical sets, not explaining how actually to build a practical typechecker. I believe we should be able to build and understand a typechecker for a full programming language, end-to-end, in 2-4 hours — with a content going straight to the point, showed in live coding sessions as pair-programming and described in a comprehensible way.

In the Building a Typechecker from scratch class we focus specifically on a static typechecker, and build a similar to TypeScript, Java, etc. We slightly touch Type theory and already since the first lecture go into the practical implementation.

Implementing a typechecker would also increase your engineering level, as it touches several aspects of data structures and algorithms.

Read more about the course

Prerequisites

An optional prerequisite for this class is the Building an Interpreter from scratch (aka Essentials of Interpretation) course, where we build an AST-interpreter for a full programming language. Unless you already have understanding of how programming languages work at this level, i.e. what eval, a closure, a scope chainenvironments, and other constructs are — it is recommended to take the interpreters class as a prerequisite.

Who this class is for?

This class is for any curious engineer, who would like to gain skills of building complex systems (and building a typechecker for a programming language is an advanced engineering task!), and obtain a transferable knowledge for building such systems.

If you are interested specifically in compilers, PL and Type theory, and want to build a typechecker module for your programming language, this class is also for you.

What is used for implementation?

Sometimes people think that to build a typechecker you certainly need to use some programming language which is itself “very related to types and type theory” (such as OCaml of other functional programming languages). But actually no! You can build a fully working typechecker in plain JavaScript, and cover all the aspects of the Type systems. And this is exactly what we use for implementation.

JavaScript, being the most popular programming language, should be accessible for many engineers, and also our goal is to provide a simple and concise implementation, not focusing on specifics of a host language. So the code should be portable to any language of your taste and choice: TypeScript, Rust, OCaml, C++, Python, etc.

Note: we want our students to actually follow, understand and implement every detail of the Typechecker themselves, instead of just copy-pasting from final solution. Even though the full source code for the typechecker is presented in the video lectures, the code repository for the project contains <em>/* Implement here */</em> assignments, which students have to solve.

Watch Online Building a Typechecker from scratch

Join premium to watch
Go to premium
# Title Duration
1 Introduction to Type theory and checking 19:39
2 Typing Numbers and Strings | Testing 04:18
3 Math binary operations | String concat 06:46
4 Variables and Typing Environment, Р“ 08:17
5 Blocks and Local scope 06:55
6 Parsing: S-expression to AST 07:31
7 Control flow: If and While expressions 07:25
8 User-defined functions | Local environments 09:16
9 Function calls | Built-in functions 04:42
10 Closures | Recursive calls 05:12
11 Lambda functions and IILE | Syntactic sugar 04:30
12 Declaring new types | Type aliases 03:54
13 OOP | Classes 06:40
14 OOP | Instances 03:51
15 Super calls | Inheritance 02:49
16 Union type 06:02
17 Union | Type narrowing 07:24
18 Generics | Function declarations 06:51
19 Generics | Function calls 07:09
20 Final executable 07:04

Similar courses to Building a Typechecker from scratch

Learn JavaScript Closures (PRO)

Learn JavaScript Closures (PRO)codesmith.io

Category: JavaScript
Duration 5 hours 15 minutes 31 seconds
Conquer JavaScript by Building Your Own Framework from Scratch

Conquer JavaScript by Building Your Own Framework from Scratchzerotomastery.io

Category: JavaScript
Duration 1 hour 18 minutes 15 seconds
Youtube clone

Youtube cloneNomad Coders

Category: JavaScript, Node.js, MongoDB
Duration 15 hours 41 minutes 20 seconds
Modern JavaScript

Modern JavaScriptui.dev (ex. Tyler McGinnis)

Category: JavaScript
Duration 3 hours 4 minutes 3 seconds
Discord Clone - Learn MERN Stack with WebRTC and SocketIO

Discord Clone - Learn MERN Stack with WebRTC and SocketIOudemy

Category: JavaScript, React.js, Node.js, MongoDB, Socket.IO, WebRTC
Duration 19 hours 29 minutes 29 seconds
Become a WordPress Developer: Unlocking Power With Code

Become a WordPress Developer: Unlocking Power With Codeudemy

Category: JavaScript, PHP, Wordpress
Duration 41 hours 45 minutes 55 seconds
The Creative Javascript Course

The Creative Javascript Coursedevelopedbyed.com

Category: JavaScript
Duration 17 hours 46 minutes 20 seconds