Path: utzoo!attcan!uunet!lll-winken!lll-tis!mordor!joyce!sri-unix!quintus!ok From: ok@quintus.UUCP (Richard A. O'Keefe) Newsgroups: comp.lang.misc Subject: Re: Algol 60 vs Algol 68 (was "stack machines (Burroughs)") Message-ID: <125@quintus.UUCP> Date: 17 Jun 88 20:40:14 GMT References: <1521@pt.cs.cmu.edu> <1532@pt.cs.cmu.edu> <476@pcrat.UUCP> <2868@louie.udel.EDU> <370@dlscg1.UUCP> <3147@polyslo.UUCP> <10064@tekecs.TEK.COM> <1988Jun11.200757.12285@light.uucp> <492@ruuinf.UUCP> Reply-To: ok@quintus.UUCP (Richard A. O'Keefe) Organization: Quintus Computer Systems, Inc. Lines: 28 In article <492@ruuinf.UUCP> piet@ruuinf.UUCP (Piet van Oostrum) writes: >I wrote major parts of both an Algol 68 and an Algol 60 compiler, so I >assume I know a bit of the difficulties. Regarding ALGOL 68 and C, I think >there are a lot of ideas from Algol 68 in C, but -- as in Pascal -- C left >out a lot of the hard things. The syntax of C is much closer to Algol 68 >than Pascal. I do not understand why people claim a relationship between C and Algol 68. C is BCPL + Pascal types. The only thing that C's "struct"s have in common with Algol 68 is the name, the _semantics_ is Pascalish. C's "unions" are not Algol 68's secure unions (e.g. there is no discrimination case statement) but semantically identical to Pascal's variant records with no tag variable. The set of operations in C is exactly the BCPL set. I think we can explain the function headings by C's descent from BCPL, when types were added to C, it would have been easiest to add new lines to programs than to change old lines. Compare still_legal_c(i, j) LET BCPL_VERSION(I, J) BE { $( return i+j; RESULTIS I+J } $) Even alloca() has a BCPL equivalent (VECTOR N) rather than an Algol 68 one. Just about the only thing in C which I can find in Algol 68 but not in BCPL or Pascal is "long int" and "short int". (Algol 68 uses "long real" and "real", not "double" and "float".) Examples could be multiplied: C's "switch" statement comes from BCPL and has very little in common with Algol 68's "case" statement, C's scoping comes from BCPL, not Algol 68, &c &c &c. It's not that C left anything out from Algol 68, it's that the languages C really is descended from never had them.