Local Reasoning for Global Properties
The article discusses how programming language type systems and static analysis can enforce global properties (like memory safety or data race freedom) through local reasoning techniques, allowing developers to verify complex invariants without needing to understand the entire codebase at once.
Background
- Laurie Tratt is a professor of programming language design and implementation at King's College London, known for work on language engineering, parsing, and the Converge programming language.
- The article is about a deep problem in software engineering: local reasoning (understanding a piece of code in isolation) vs. global properties (behaviors that emerge from the whole system). Modern programming increasingly makes it hard to reason locally because features like async/await, concurrency, and distributed systems introduce implicit dependencies.
- Tratt argues that much of programming language design is an attempt to make local reasoning capture more global properties — but there are fundamental limits, and when those limits are hit, programmers must rely on documentation, testing, or formal methods instead.
- The piece is aimed at practicing programmers and language designers, not complete beginners, though its core insight is widely accessible.