Core Arguments
- What is Systems Programming and what are its Requirements:
- Memory Constraints: Systems code operates with severe memory limitations, meaning they are strongly driven by bulk I/O performance
- Performance Sensitivity: Even small inefficiencies in critical paths (additional cache misses) can dramatically impact performance
- Direct Hardware Control: Systems code needs precise control over data representation, alignment, and memory binding
- Stateful Design: Systems programs maintain large amounts of long-lived state, making automatic storage reclamation challenging
- Fallacies in Programming Language Design:
- “Small performance factors don’t matter”: In data centers, a 2x performance difference costs $50,000 per square foot in cooling alone
- “Boxed representation can be optimized away”: Experimental ML networking code achieved only 0.00007x the performance of C
- “Optimizers can fix it”: Systems code relies on data-dependent branching and application-specific invariants that optimizers cannot discover
- “Legacy code makes change impossible”: Many successful systems (Windows, Linux) started from scratch
- What Systems Programmers Need:
- Transparency: Code that creates a clear, direct mental model of what happens at the machine level
- Representation Control: Direct control over data structure layout and alignment
- Idiomatic Manual Storage: Systems use manual memory management in structured, verifiable patterns
- Application Constraint Checking: Ways to express and verify system-wide invariants
- The BitC Project:
- Shapiro’s attempt to create a language with C’s directness but with modern type systems and verification capabilities
- Focuses on engineering practicality rather than theoretical novelty
- Aims to support verification while preserving state, manual storage, and low-level control
- Simply redoing in Functional with Monads seems impractical
Key Insights
- The gap between programming language research and systems programming comes from different priorities - theory/abstraction vs. engineering/practicality
- Modern language advances have typically come with prohibitive abstraction costs for systems programmers
- The Singularity project demonstrates that language-based protection could potentially replace hardware-based isolation, opening new research directions
- Programming language designers have forgotten pragmatics and usability in pursuit of type theory and semantics
The paper concludes that systems programmers will adopt new languages only if they provide greater ability to understand and maintain complex systems without sacrificing the transparency and control that C provides.