The Big OOPs
Anatomy of a Thirty-five-year Mistake – Casey Muratori (BSC 2025) / HN
The most treacherous metaphors are the ones that seem to work for a time, because they can keep more powerful insights from bubbling up. - Alan Kay (1984)
Unified function call: The notational distinction between x.f(y) and f(x,y) comes from the flawed OO notion that there always is a single most important object for an operation. I made a mistake adopting that. It was a shallow understanding at the time (but extremely fashionable). Even then, I pointed to sqrt(2) and x+y as examples of problems caused by that view. - bjarne
Entity Component System (ECS)
Looking Glass (1998)
- the opposite of a fat-struct
- Architecture care about encapsulation boundaries
- where you make it difficult to access things
- vs where you make it easy
- Encapsulation boundaries around the system vs Boundaries accross the objects
- don’t make the domain model be in the code.
- compile-time hierarchy of encapsulation that matches the domain model => Are not that good (and may be counterproductive).
OOP
- oop was just about passing message - (Alan Kay)
- inheritance hierarchy was told early (since 1980s)
- C++ does not force to do it that way (even if it promoted it a lot)
- Stroustrup 1994 (Design of Evolution of C++) - C++ on simula -> didn’t scale
- Simula build was very long / incremental build suck
- Simula runtime was very slow (because of the GC even when no work was needed)
- about large Teams (were hierarchy and encapsulation should strive) => didn’t work even on 1 people team
- inheritance used mainly for code-reuse
- INSPECT from simula was explicitly not ported to C++ - forcing latter usage of virtual function (vs discriminated union)
- Team Fat Struct Founded 1960
- Dougals T. Ross (struct(plex) + vtable)
- Ivan Sutherland’s SketchPad (1963) - probably the most significant thesis ever done - Alan Kay (1987)
- ring structured designed to rapid constraint satisfaction - chicken - a link in the linked list that point to the sentinel (hen)
- the virtual function was the least interessting part of this (because it was possible because draw was very simple) - the constraint solver was omniscient (ECS model)
- CSG on Spheres (1997) - NegaMan (Negative Metaball)
- Mixin vs Pattern
- Fat struct vs ECS - Ultima underworld used Fatstruct for entity
- how to compact memory and avoid overlap (handle fuel & damage)?
- avoid fragmentation
- arbitrary sized properties
- types at run time
- how fast is the fastest case
see also
Written on September 12, 2025, Last update on
fastware
OOP
ECS
architecture
c++
quote