Reversing Abstractions: An Existential Crisis
This article explores the philosophical and technical concepts of abstraction in computer science, specifically focusing on how developers choose to hide or expose implementation details. It contrasts the 'existential' approach of hiding internal logic with public conventions like ABIs and debuggers.
Why it matters
Understanding the trade-offs between abstraction and transparency is critical for software architecture, interoperability, and long-term system maintainability.
Diverting trains of thought, wasting precious time
Computer science in general, and language implementation in particular, are founded on the idea of realising abstractions in a way I'll call "forwards" and also "existential". This post is about how these aren't the only way to think about programming infrastructure and abstractions.
The theory goes that you pick some desired abstraction - it could be a programming language, maybe an abstract data type, or something else. Then you figure out the realisation. In the case of a programming language, this could be memory layouts, calling conventions and a compiler that generates object code modelling these. For abstract data types, it's some specific concrete data structure and the mapping from abstract to concrete operations.
Get smarter about the news
Sign up free for a feed built around what you actually care about, Dive Deeper research on any story, and the full text of every article.
Create free accountAlready have an account? Sign in