CS307
Programming Languages
The concepts behind languages: paradigms, type systems, and how memory is managed.
10 modules · 40 lessons · Practice after every lesson
Take first
Leads to
Syllabus
Module 1
Language Evaluation and Semantics
- Syntax, Semantics, and Pragmatics
- Abstract Syntax Trees
- Operational Semantics
- Evaluation Order and Effects
Module 2
Names, Scope, and Binding
- Lexical and Dynamic Scope
- Environments and Closures
- Shadowing and Capture
- Modules and Namespace Systems
Module 3
Types and Type Systems
- Static and Dynamic Typing
- Type Safety and Progress–Preservation Intuition
- Type Inference
- Subtyping and Variance
Module 4
Parametric and Algebraic Types
- Parametric Polymorphism
- Algebraic Data Types
- Pattern Matching
- Kinds and Higher-Kinded Types: An Introduction
Module 5
Functional Languages
- Lambda Calculus
- Immutability and Persistent Data
- Higher-Order Abstraction
- Lazy Evaluation
Module 6
Object-Oriented Languages
- Objects, Classes, and Prototypes
- Dynamic Dispatch
- Inheritance and Traits
- Object Identity and Encapsulation
Module 7
Logic and Declarative Languages
- Relations and Unification
- Logic Programming
- Constraint Programming
- Dataflow and Query Languages
Module 8
Memory Management
- Stack and Heap Allocation
- Manual Memory Management
- Tracing Garbage Collection
- Reference Counting and Cycles
Module 9
Control Abstractions
- Exceptions and Nonlocal Control
- Continuations
- Coroutines and Generators
- Async–Await and Event Loops
Module 10
Language Implementation and Design
- Interpreters and Virtual Machines
- Macros and Metaprogramming
- Foreign-Function Interfaces
- Evaluating Language Design Trade-Offs
Start Programming Languages.
No setup, nothing to install. Try the first lessons before you sign up.