A well-typed program is not stuck; it can either take a step or is already a value.
For Carnegie Mellon's 15-312: Foundations of Programming Languages 15312 foundations of programming languages
A rigorous comparison of the trade-offs between static languages (like Rust or Scala) and dynamic languages (like Python or JavaScript), proving that dynamic languages are actually a special, single-typed subset of static languages. A well-typed program is not stuck; it can
The course views programming languages not as random collections of features, but as coherent mathematical systems. Every feature—whether it is a simple loop, an exception, or a pointer—must be rigorously defined and justified through logic. 1. Syntax vs. Semantics: The Structural Groundwork Every feature—whether it is a simple loop, an
4.5/5
This table demonstrates the rapid yet deliberate pace of the course, moving from basic definitions to advanced concepts like polymorphism and control operators within a single semester.
The formal logic behind garbage collection and resource allocation. 4. The Safety Theorem