And it seems others were thinking the same way: 'After you won the Turing Award, a comment appeared online saying, “Why did she get this award? She didn’t do anything that we didn’t already know.”'
This is not only distasteful but false.
First, modules in Modula were primarily about scope not abstraction.
Liskov pioneered a core aspect of abstraction which, among other things, allows modules to rely on abstract interfaces rather than their implementations (or a type or class rather than its subtypes or subclasses).
Abstraction only works reliably if any provably true property of a type is also provably true about its subtype.
Want to learn more? You’ll find it referenced in the literature as the Liskov Substitution Principle.
When did ML gain its module feature (which does enable the equivalent to data abstraction)? From a very casual search, the earliest references I can find to it are from the early 1980s, so well after CLU - but the very first versions of ML itself were being worked on around the same time.
That’s a good question, I don’t know the history well enough to comment on that.
Much more important than CLU itself — groundbreaking as it was — was Liskov’s formalization of substitutability as a rigorous principle one can use to reason about the quality or correctness of an arbitrary abstraction (or model thereof).
I'm pretty sure this was around 1983/1984 See the papers
"Modules for standard ML" 84, by Dave Macqueen,
MacQueen had previously written a paper Modules for Hope (81) which likely influenced it.
Unfortunately the SML-Family doesn't have links to these in it's history section afaict. But ML languages didn't get modules until the standardization effort that produced standard ML.
This is not only distasteful but false.
First, modules in Modula were primarily about scope not abstraction.
Liskov pioneered a core aspect of abstraction which, among other things, allows modules to rely on abstract interfaces rather than their implementations (or a type or class rather than its subtypes or subclasses).
Abstraction only works reliably if any provably true property of a type is also provably true about its subtype.
Want to learn more? You’ll find it referenced in the literature as the Liskov Substitution Principle.
https://dl.acm.org/citation.cfm?doid=197320.197383