According to this paper by Barbara Liskov, CLU was "The first implemented programming language to provide direct linguistic support for data abstraction".

She then defines "data abstraction" as "A set of objects and operations", and gives as an example a "set of integers" with an associate's set of operations.

Without digging terribly deeply into the dates, according to Wikipedia, CLU "first appeared" in 1975, whereas ML "first appeared" in 1973. Furthermore, ML modules seem to fit Liskov's definition of "data abstraction" perfectly.

Thus, isn't this claim at least a little inaccurate, if not disingenuous? (Liskov notes later that she is aware of at least of some of the work done with ML, though was not made aware of it until the late 70's).

It seems to me that it would be better to say that CLU was among the first languages to support data abstraction. Or am I missing something here either with the exact dates, or exactly what Liskov means by "data abstraction"?

  • $\begingroup$ I don't know for sure, but it's possible that Liskov was not aware of ML. ML was originally the "meta-language" of a logical framework, and it wasn't until later that they saw the potential for general purpose programming. Even if Liskov was aware of ML, she may not have considered it to be a "programming language". $\endgroup$
    – jmite
    Sep 18 '21 at 3:26

Development of ML began circa 1973, but I can't find a published description of it earlier than POPL'78. As far as I can tell, it didn't have modules at that time. It did have abstype, which it likens to "SIMULA classes, CLU clusters, and ALPHARD forms", which "are by now well-known".

CLU wasn't the first language to have any form of data abstraction, but it's possible that it's the first one that meets Liskov's stringent criteria. In particular, she requires enforced access controls, and I think that rules out Simula.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.