15312 Foundations Of Programming Languages |top|
Feature: Type Inference with Parametric Polymorphism
- Inductive definitions:
nat = Z | S nat. - Recursive functions: Using the
fixcombinator or structural recursion. - Termination proofs: Ensuring recursion always hits a base case.
In the world of software development, programming languages are often viewed as mere tools—interchangeable hammers used to build applications. However, the study of the "foundations" of these languages (as epitomized by the 15-312 curriculum) treats them as sophisticated mathematical objects. Rather than focusing on syntax or "how to code," the discipline explores the intrinsic logic that governs computation, seeking to answer a fundamental question: How can we prove that a program will behave exactly as intended? The Formal Framework: Syntax and Semantics
End of story.
: An insightful blog post by a former teaching assistant that breaks down the unique challenges of the course, including the implementation of homework problems using Standard ML. Hacker News Core Concepts & Supplementary Materials
While specific distributions may vary by semester, a typical breakdown includes: 15312 foundations of programming languages
Once you understand the "foundations," you stop seeing languages like Python, Rust, or Haskell as collections of syntax. Instead, you see them as combinations of specific features (e.g., "This is just Hindley-Milner type inference with affine logic"). Verification Skills:
Programming Language Used: Most implementation work (interpreters and language dynamics) is done in Standard ML (SML). Feature: Type Inference with Parametric Polymorphism
The journey begins by moving away from "concrete syntax" (the curly braces and semicolons) and toward Abstract Syntax Trees (ASTs). You learn that a program is a structured mathematical object, not just a string of characters. 2. Statics: Type Systems
