15312 Foundations Of Programming Languages [better] 🔥

15312 Foundations Of Programming Languages [better] 🔥

A typical week in "15312 foundations of programming languages" CMU:

By the end of this course, students will be able to: 15312 foundations of programming languages

If a program has a certain type and takes a step of execution, it must still have that same type. A typical week in "15312 foundations of programming

| Term | Definition | |------|-------------| | | Tree representation ignoring parentheses and precedence. | | Substitution | ( [e/x]e' ) = replace free occurrences of ( x ) in ( e' ) with ( e ), avoiding capture. | | Canonical Forms | If ( v : \tau_1 \rightarrow \tau_2 ), then ( v ) must be a lambda abstraction. | | Contextual Equivalence | ( e_1 \approx e_2 ) iff for all contexts ( C[,] ), ( C[e_1] \Downarrow v ) iff ( C[e_2] \Downarrow v ). | | | Canonical Forms | If ( v

The 15312 course, "Foundations of Programming Languages," is designed to provide students with a deep understanding of the principles and concepts that underlie programming languages. The course covers the fundamental topics of programming language design, including syntax, semantics, type systems, and functional programming. Students learn about the different programming paradigms, such as imperative, object-oriented, and functional programming, and explore the trade-offs and advantages of each approach.

However, the students who survive 15-312 report a "red pill" moment. They stop seeing Python as "easy" and C++ as "fast." They see them as specific instantiations of binding, scope, evaluation order, and type constraints.

In 15-312, data is not just "objects" or "structs"; it is defined by sums (choices) and products (pairs). Students learn to define a system by enumerating its possibilities. This enforces a style of "correctness by construction." If you define a type that handles every possible variant of a piece of data, the compiler ensures you handle every case. The "billion-dollar mistake" (null pointer exceptions) becomes impossible because the type system forces the programmer to explicitly handle the absence of data.

15312 foundations of programming languages