One of the most mind-bending papers on this topic is William Cook’s On Understanding Data Abstraction, Revisited
https://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf
“Object interfaces are essentially higher-order types, in the same sense that passing functions as values is higher-order. Any time an object is passed as a value, or returned as a value, the object-oriented program is passing functions as values and returning functions as values. The fact that the functions are collected into records and called methods is irrelevant. As a result, the typical object-oriented program makes far more use of higher-order values than many functional programs.“
trealira|1 year ago
[0]: https://www.haskellforall.com/2021/01/the-visitor-pattern-is...
[1]: https://news.ycombinator.com/item?id=26034790
[2]: https://news.ycombinator.com/item?id=26024600
trealira|1 year ago
bruce343434|1 year ago
abecedarius|1 year ago
Teaser: the first OO language was Church's lambda calculus.
voidhorse|1 year ago
At the end of the day, all languages that are turing complete are the same language and the only differences lie in the kind of front end we provide. Unfortunately, we basically still have a single frontend, called C and every subsequent programming language has essentially just taken the C frontend and restricted or expanded it in small ways. We still ultimately work in terms of records, contiguous arrays and pointers. You can think of basically any more "advanced" construct in terms of pointers and it will make perfect sense nearly every time.