Last year I started reading or rereading some of the classical texts in computer science. The first one was the CLU Reference Manual by Prof. Liskov et al.
The book and the language were conceived in the seventies. CLU is object based the central concept being the abstract data type essentially encapsulated objects without inheritance. It does however support parametric polymorphism AKA generics. There is also a really nice exception mechanism. Also there is the notion of iterators that support yield return, just in case you thought MS invented that. Also there is a small amount of really effective syntactic sugar. The syntax to call “methods” is a bit queer, but on the whole it’s a very interesting language.
The book is very terse. Beautiful. There is not only advice on how to do exception handling (if only I had that kind of instruction when I learnt java), but also on avoiding singletons. Prof. Waldschmidt once mentioned to us that CLU rather than java should be used to teach programming. I think he was spot on. My java didn’t take off until I understood how to use delegation and composition. If you don’t have inheritance you might learn that lesson faster.
It’s a shame that CLU has been abandoned. Imagine a world, where C hadn’t been used for systems programming…