Programming Language Critiques

( Always Under Construction, but due to many helpful comments from readers of this page, a number of the more glaring errors have been corrected. Thanks! sdm7g )

The first incarnation of this page was started by John W.F. McClain at MIT. He took it with him when he moved to Loral, but was unable to update and maintain it there, so I offered to take it over.

In John's original page, he said:

Computer programmers create new languages all the time (often without even realizing it.) My hope is this collection of critiques will help raise the general quality of computer language design.

New or Under Construction:

Last modified: April 4, 1996

( A few new additions, mostly links updated. An overhaul is in the works! )

C and Pascal

The Development of the C Language Dennis M. Richie.
The evolution of the language from BCPL to B to C to ANSI C, and a critique.

Why Pascal is Not My Favorite Programming Language. Brian W. Kernighan, Computing Science Technical Report No. 100, AT&T; Bell Laboratories, April 2,1981.

Copies of the above articles, as well as articles on B and BCPL, and other notes on the C language are available on

The Case Against C., P. J. Moylam, Technical Report EE9240, Department of Electrical and Computer Engineering, The University of Newcastle, July 1992.

A Critique of the Programming Language C* by Walter F. Tichy, Phil Hatcher and Michale Philippsen, appeared in CACM June 1992. ( Included here by permission of one of the authors. ) C* ( C-star ) is a data parallel version of C.

Style guides for various languages can be considered as an implicit language critique, as they usually have tips on the problem areas in a language to avoid. A good one is Recommended C Style and Coding Standards By L. W. Cannon, R. A. Elliott, L. W. Kirchhoff, J. H. Miller, J. M. Milner, R. W. Mitze, E. P. Schan, N. O. Whittington, Henry Spencer, David Keppel and Mark Brader.

Also, the "traps and pitfalls" literature ( as in: Andrew Koenig's "C traps and pitfalls", a good example of the genre ) is another form of implicit critique. See Dave Dyer's top ten ways to be screwed by c

And, as an April 1st special, resurecting a 1991 article from COMPUTERWORLD - CREATORS ADMIT UNIX, C HOAX.

C++ and Ada

The darker side of C++ revisited. Markku Sakkinen, Dept. of Computer Science and Information Systems. Univ. of Jyvaskyla, Finland.

CONTRASTS: Ada 9X and C++. Edmond Schonberg, NYUAda 9X Project, New York University, April 22, 1992. (Note: the link for this paper has been updated to point to the Ada Information Clearinghouse archives. where there are other related articles.)

C++??, A Critique of C++ . 2nd Edition, Ian Joyner, Unisys - ACUS, November 1992.

There are two good books recently out on the evolution of C++:


The Evolution of Lisp Guy L. Steele, Jr & Richard P. Gabriel. from ACM SIGPLAN HOPL-II

Lisp: Good News, Bad News, How to Win Big. Richard P. Gabriel.
Gabriel's analysis of why Lisp has failed in the marketplace - contains his contrast of "MIT" vs "NJ" design approach.

Henry Baker's Critique of DIN Kernel Lisp Definition, although nominally about a European proposal for a standard Lisp, talks about Lisp capabilities in general.

ML and Haskell

A Critique of Standard ML. Andrew W. Appel, CS-TR-364-92, Princeton University, December 1991. Appeared in Journal of Functional Programming 3 (4) 391-430, 1993. Journal of Functional Programming 3 (4) 1993. * also available from: http://www.cs.Princeton.EDU:80/faculty/appel/papers/

Reflections on Standard ML David B. MacQueen. AT&T; Bell Laboratories.

Two project reports from the FOX Project at CMU discuss the requirements for systems programming in an advanced higher-level language, and how SML and some other languages compare. The more recent of the two:
Advanced Languages for Systems Software: The Fox Project in 1994,
Robert Harper and Peter Lee, CMU-CS-FOX-94-01
has some notes about language design, compiler technology, and the planned successor to SML, dubbed "ML2000" or "Millenium".

Haskell vs. Ada vs. C++ vs. Awk vs. ... An Experiment in Software Prototyping Productivity Paul Hudak and Mark P. Jones. Yale University Department of Computer Science. July 4, 1994.
The results of a APRA/Navy "bakeoff" competition, and an attempt to explain why Haskell did so much better than most of the competition. File: jfp.{dvi,ps}

FP + OOP = Haskell Emery Berger. Department of Computer Science. University of Texas at Austin. December 12, 1992.

Subject: a note on the Haskerl extension to Haskell [long] How to have your lazy evaluation, referential transparency, polymorphism and type checking AND regexp's and FWIM (figure-out-what-I-mean) syntax TOO! (In case you can't guess, this is another April 1 posting!)

Other functional languages

Robin Popplestone's Design of an Interactive Functional Language and his Early Development of POP

O-O Languages

A Comparison of Object-Oriented Programming in Four Modern Languages Robert Henderson and Benjamin Zorn. Department of Computer Science, University of Colorado, Boulder, Colorado Technical Report CU-CS-641-93
The paper evaluates Oberon, Modula-3, Sather, and Self in the context of object-oriented programming.

CLOS, Eiffel and Sather: A Comparison. Heinz W. Schmidt and Stephen M. Omohundro International Computer Science Institute TR-91-047 September, 1991.
There may be more material on the Sather home page, but I have not had time to pull them out yet.

Smalltalk, C++ and OO-Cobol: the Good, the Bad and the Ugly by Jeff Sutherland from Object Magazine.

Eiffel vs C++ by Bertrand Meyer.

The long lost Dylan Competitive Analysis paper is now available on the Dylan Technology Release CD-ROM!

Design Issues

TR 93-045: Sather Iters: Object-Oriented Iteration Abstraction

Sather iters are a powerful new way to encapsulate iteration. We argue that such iteration abstractions belong in a class' interface on an equal footing with its routines. Sather iters were derived from CLU iterators but are much more flexible and better suited for object-oriented programming. We motivate and describe the construct along with several simple examples. We compare it with iteration based on CLU iterators, cursors, riders, streams, series, generators, coroutines, blocks, closures, and lambda expressions. Finally, we describe how to implement them in terms of coroutines and then show how to transform this implementation into efficient code.

Then, on the other hand ...

Iterator.html (WWW hypertext) (9 pages) "Iterators: Signs of Weakness in Object-Oriented Languages". ACM OOPS Messenger 4, 3 (July 1993), 18-25. If your language requires iterators in order to get anything done, your language's control structures are grossly deficient.

[ Many other good papers in Henry Baker's Archive of Research Papers. Netcom is sometimes difficult to reach - you might have to make several attempts. ]

Miscellaneous Flame Bait! . . .

Java, The Illusion.

Tom Christiansen's classic FAQ:

Adam Sah, Richard Stallman, and others on: Why You Should Not Use Tcl and John Ousterhout's reply.

Relational Databases Considered Harmful, and other letters from Henry Baker.

Odds and Ends

While I think it's a very rough and imperfect metric, Capers Jones' Language Level is an attempt to compare languages by how many lines of code are required, on average, to code one Function Point. ( I hope to add a critique of this metric, but for now, I'll merely note that many of the data points appear to have been estimated ( or more exactly, inherited from the estimate of a more generic prototype ) rather than measured. )

A .bib file of the critiques appearing here and additional ones not available over the WWW. [ Note: This is John McClain's original bib file - I have not yet updated it with the new material I have added, nor mined it for other possible URL's. ]


Other resources . . .

As practiced by computer science, the study of programming is an unholy mixture of mathematics, literary criticism, and folklore. - B. A. Sheil, 1981

Comments ? Contributions ?
Mail to: sdm7g@Virginia.EDU
Steven D. Majewski