Programming Languages, Type Theory, and Semantics
Meaning, Types, and Soundness
Research Focus
Programming languages research studies how syntax becomes meaning, how types prevent bugs, and how compilers preserve semantics. At a higher level, type systems can express capabilities, effects, ownership, and invariants that support safe abstraction and mechanical verification.
Semantics and Types
Why Types Matter
Types are not just checking tools; in advanced systems they also serve as specifications, proof carriers, and optimization guides.
Static vs Dynamic Enforcement
Static typing
- Catches many errors before execution
- Can enable stronger compiler optimizations
Dynamic typing
- Checks at runtime
- Can increase flexibility and rapid prototyping
What does type soundness aim to guarantee?
Soundness links static typing to runtime safety properties.
Correct answer: Well-typed programs obey the intended semantics and do not encounter certain runtime type errors
What is parametricity in simple terms?
Because the function cannot inspect the specific type argument, its behavior is constrained.
Correct answer: Polymorphic functions must behave uniformly across types
Verified Compilation and Correctness
A major research goal is proving that compiler transformations preserve source-level meaning. This includes correctness of optimization passes, preservation of security properties, and end-to-end verified toolchains.
Which semantics style most directly models execution as step-by-step state changes?
Operational semantics describes program execution by transitions between states.
Correct answer: Operational semantics
Why are effect systems useful in modern language design?
Effect systems refine type checking by describing non-pure behaviors.
Correct answer: They track side effects such as mutation, I/O, exceptions, or concurrency in a structured way