Talk:ALGOL 68

Discussion of Algol 68 wikipedia content/style
I propose to shorten the article considerably. In the present form it has a too defensive character. For my feeling, the references to Perl, Scheme, ML are not really helpful. Some criticisms don't need to be mentioned (operator priority discussion). --Glasreiniger 13:24, 26 Feb 2005 (UTC)


 * I'm not sure I agree the article needs to be shorter. In many ways it should be longer. But it could certainly be improved. It has that common problem that it has been added to in pieces by many people with new information, and has lost any unity and structure it might have had.
 * My thoughts are
 * Rename "Overview" (which it isn't) as "Notable language features". Make sure everything there is notable, and make sure it makes sense to someone who never saw the language before.
 * Rework "some vanitas" into "Notable language features" or lose it.

Hmm. Iff the article is shortened, this is a good candidate, too. Note the "iff". In the present state of the article it may expalin some of the shortcomings.
 * Criticisms should not be based on new insights; new insights don't belong.

Why not?
 * Comparisons with other languages may have a place, but are they original research? In any case the comparison with C++ is not factually accurate (e.g. C++ has formatted transput, surely, with printf/scanf) and may not add much to the article.

printf is not part of the language, contrasting to A68. Ethouris
 * --- This does not change anything. The language together with its standard library is something the user has on start. So this whole set should be considered, if you want to compare. You would also say that Tcl does not provide Object-Oriented features, not even mentioning that it has several libraries that provide it. Please, try not highlighting in comparisons things that are "not supported in the core language" because for a particular language user this does not mean anything; such a user would like to know if he can just do some thing requiring this feature or not. Not only has C++ printf-s derived from C's standard library, but there is also provided Boost::format with richer facilities. Should you have it in a language, you can say that the feature is available, no matter how. I would be rather interrested with facilities, which MUST be done in the core language and, for example, C++ does not have it and it is hard to emulate it.


 * Variants needs to mention the important ALGOL 68C and ALGOL 68R. The first part of that section belongs under notable language features or nowhere. Proceduring is notable, I think, but must be defined.

Proceduring is *the* part of the language where the non-revised language failed, and it was noted. Proceduring, as defined in the in the non-revised language didn't work correctly. But removing proceduring was a really bad cure for that. It is easy to see, that a usable description could have been found, by the simple fact that adding some parentheses and "PROC BOOL:" in the source make the magic work (correctly!).
 * I'd like to see more on history and especially on discussions of the reason for its failure. http://www.cs.ru.nl/~kees/home/papers/psi96.pdf is a very interesting reference. "[The revised report] resulted in an exemplarily clear, precise and consistent description of anelegant and orthogonal language that was at its appearance already classical but dead.

Agreed.
 * An original insight that could be included if someone else published it: why would the commercial world implement a language from academia in the form of a report, which also included a minority report definining a different language? Suicide!

Notinasnaid 12:10, 28 Feb 2005 (UTC)

Let me comment on the last item: It wasn't suicide. --Glasreiniger 21:24, 28 Feb 2005 (UTC)

Let us try to make a good article, at least. If nobody complains, I am going to start making the article more concise, trying to use your hints.


 * New insights? At one time I found this rule as an adjunct to "no original research", i.e. "no original insights". I can't find it now!


 * The issue with proceduring is that it is not defined before it is discussed. I know what it is, but I don't think anyone who didn't would be left any the wiser. It is quite an interesting and unusual idea, and worthy of discussion.


 * Anyway, to follow another Wikipedia rule: "Be bold!" Notinasnaid 21:54, 28 Feb 2005 (UTC)

Implementation of Algol68
Concerning Algol68 being an academic language and already dead-at-birth: at Control Data Corporation we've built an almost complete implementation (only 1 or 2 items missing), commercially published around 1978 for use on 6000 and Cyber series mainframes. The resulting code was quite efficient, notwithstanding the often called "complexity" of the language.

Operators
Is the elem operator the same as the ⌷ operator, or was/is the "¤" from EBCDIC used?

Also: I kinda recall "somewhere" that in place of := and =: one could use ← and →. Am I getting mixed up with APL?

NevilleDNZ 02:01, 24 August 2005 (UTC)


 * The rectangle is called "window symbol" in the RR, it is used as elem operation symbol, yes (RR10.2.3.9b). The report does not define how the symbols are encoded. A different document (Hansen, Boom: The Report on the Standard Representation for ALGOL 68) tries to clarify how the symbols are represented in ISO646 and EBCDIC. This document discourages the use of most symbols not in the intersection of these symbol sets.

(C.5 Other characters: A portable program should be written entirely in worthy characters, becasue only these characters are available in all implementations). The digraph <- is not allowed in a68 as operator symbol, as in S-plus, e.g. because x < -1 and x <- 1 would easily be confounded. ->, though, could be used. Extensive use of exotic symbols is not typical for programs written in A68. --85.22.19.171 19:26, 26 August 2005 (UTC)
 * Have been skimming throught the Draft Final Report you pointed out online.... It seems that there is a whole pile of operators in the Draft Final Report I never even knew about. Check Pages 109...  The FR allows .. as well as :, → in place of " of ".  Did this "I am guessing that this online version isn't the "Final Final Report".  Looks like I have a bit more reading to do.  (Ironically a similar -> made it into C/C++)
 * But it looks as if the semantics were inverse. Personally, I prefer C++ in this respect. You call the document "draft": AFAICS my prionted version of thsi is the final published report, but before revision. I never got in acquaintance with A68 before revision. So I cannot comment mcuh on this, except that I had preferred that proceduring (not as coercion) ahd survived.

--Glasreiniger 20:02, 26 September 2005 (UTC)
 * The American Standards Association (ASA, later to become ANSI) first published ASCII as a standard in 1963. ASCII-1963 lacked the lowercase letters, and had an up-arrow (&#8593;) instead of the caret (^) and a left-arrow (&#8592;) instead of the underscore (_).
 * "1968 President Johnson issues order adopting the (newer) American Standard Code for Information Exchange (ASCII-1967) as a federal standard".
 * Hence Algol68 was straddles both ASCII-1963 and ASCII-1967 standards.
 * Ironically the ¢ (cents) symbol got dropped from the Amercian ASCII standard, but became part of the European Algol 68 standard.
 * NevilleDNZ 16:56, 25 November 2005 (UTC)
 * I also found the A*10**B symbols were 10 AND "\". And some strange operators I havn't figured out yet..., i.e. lws, ups , ctb , btb , ::, ct , ctab etc, with related APL characters...
 * ¢ NevilleDNZ 17:23, 26 September 2005 (UTC) ¢

Hardware character sets and representation

 * I had look into unicode internals for this case. It looks as if the "base ten" symbol was the only machine written symbol of computer age which didn't make it into unicode. This should be changed. But, personally, I don't like unicode enough to feel engaged. It seems that, if anybody wants to make this into unicode, has to be prepared very well. Of course, the representation using two subscripts is sufficient to publish documents containing. But for this, Unicode subscript were superfluous as well. The origin of this symbol seems from British teletype code as variant to the backslash, and it has been used in the German TR440 computer central code ZC1 at position 141. --Glasreiniger 20:02, 26 September 2005 (UTC)

I used Algol68C on EBCDIC of IBM VM/CMS and ASCII of DEC10. There were no "exotic characters", but fortunately there were upper and lower case, otherwise Algol68 code would have looked worse the COBOL code. Clearly there was no Unicode back in 1968, so did the "exotic characters" only ever exist on paper, or were they sourced from some other pecular computer system? Also, if I recall right, a semicolon was also regarded a exotic to some character sets, hence Algol-W used a comma-dot, instead of a semicolon at the end of statements. (And hence maybe the : used in todays array slices x[1:3], possibly originated from x[1..3] which appears to be more natural)


 * CHA Koster tells in his memories about the making of ALGOL 68, that the writers of the Report had much fun in finding new symbols on the typewriter wheels, which were state of the art at that time.


 * The IBM 2741 Terminal (c. 1965), this must have been what Adriaan van Wijngaarden had been using before the Aug 68 meeting. (Then in 1975 for $20,000 you could get a IBM 5100 ). Maybe it was the IBM Code page was being used in the IBM 2741 alternatly Code page 293, or Code page 371.


 * Another Algol68 superset totally missing from wikipedia is Algol68+ But I suspect that was not often used outside of The Netherlands.  It would be interesting to lists its character set as Adriaan van Wijngaarden had a particular interest here.
 * ¢ NevilleDNZ 02:07, 24 September 2005 (UTC) ¢

The ¬ clearly entered via EBCDIC. I am kind of surprised the the ¢ was so extensively used in the actual RR, it is in EBCDIC, but not ASCII. But certainly any typewritter can do it with a C^H/.

Language semantics
On an aside, in fortran a declaration of "REAL REAL REAL" is legal, I am guessing Algol68 was trying to mimic this in its declaration syntax, eg by allowing " real real real;", (which contains spaces in variables, and reuse of "reserved" words/tokens). If this true?


 * In case of FORTRAN IV, spaces are not significant in any position except in H formats. Position is, though. That spaces in identifiers are allowed, is heritage from Algol60.

And on another aside, why did Algol68 have the IF .. FI, DO .. OD and CASE .. ESAC. But spoil every thing by using CO .. CO, and PR .. PR, no CO .. OC and PR .. RP?


 * Probably an oversight. Comments do not contain interesting stuff. But TNEMMOC would look rather strange. NIGEB, too. When I program A68, I don't use IF..FI very often. I prefer the short symbols ( | | ), anyway. But for DO..OD there are no short symbols. --Glasreiniger 17:19, 27 August 2005 (UTC)
 * TNEMMOC & TAMGARP probably wouldn't translate into Dutch very well either. ¢ NevilleDNZ 06:32, 28 August 2005 (UTC) ¢
 * It is little known, that the ALGOL68 Reports have been translated into German and Russian, possibly other languages, too. The termini technici like MOID have been translated also in the unrevised report, in case of MOID the German translation was MÖSCH, which is a contraction of MODUS and LÖSCH. For the RR only the text was translated. --Glasreiniger

(BTW: Every time I do a "do .. done" loop in borne shell I cannot help but think of someone (long long ago) shooting themself in the foot with the unix "/bin/od" command)

NevilleDNZ 20:03, 26 August 2005 (UTC)

On the CDC 63- and 64-character sets, where ":" was problematic or missing, ".." was a representation substitute. This may have given rise to the use of ".." in Pascal, which was also first developed for the CDC mainframe series. Notinasnaid 22:06, 26 August 2005 (UTC)


 * The Control Data computers with their 6bit characters are, of course, very restricted. The standard hardware representation for A68 declares 60 characters worthy. --Glasreiniger 17:19, 27 August 2005 (UTC)

Operators vs "Syntatic elements"
I noticed some laxness in the operator list. In Algol 68 "IS","ISNT" and their shorter forms :=: :/=: are not operators but special syntactical symbols like :=. I am not sure whether correcting this would go to much into technical details. For now I just move the short forms from the implementation column to the original language column, where they belong. --Glasreiniger 11:27, 23 September 2005 (UTC)

I have found an argument, why it must be corrected: The priorities are wrong. These constructs don't have PRIO 4,. Effectively their priority is less than that of any opreator. Maybe putting them in a row with PRIO 0 and a comment is a good solution. --Glasreiniger 18:34, 23 September 2005 (UTC)

If I remember right :=: and :/=: were not part of the standard. BTW I dug the is and isnt op erator pri rities from the Revised Report, so the prio  is = 4, isnt = 4; should be OK.


 * Sorry to disagree. But the is symbol is not an operator, it just loooks like one. The :=: was present in in unrevised report already. For the negated equal sign, two possibilities are provided in the RR: either the mathematical unequal sign or the digraph from slash and equal sign for operator and identity relation symbol. The not symbol is only used to construct operators. --Glasreiniger 18:07, 24 September 2005 (UTC)
 * Not a problem. I checked the RR that you put online, and you are right.  So, I have effectively moved the :~=: "syntactic" elements to priority 0.  I left the plusto, but removed the other timesto operators as I could not find them in the RR.  I wish I had a copy of the Algol68C manual to see if the timesto were implemented there.
 * I have a copy of the Algol68C manual. If this is not available on the net already, I could perhaps make scans available. But, with no compiler for this implementation, this is not too interesting. Algol68C does not define or allow to define operators with assignation. These are automatically available for all operators where these are applicable. So, Algol68C has timesto and similar. I am not sure that the authors really thought much about the displace-formulas, how they call these, after looking this up. --Glasreiniger 15:57, 25 September 2005 (UTC)
 * Do you know the "official" priority of the uniary operators? esp not, as typically (in other languages) its priority is lower then that of arithmetic diadic operators.
 * In A68, all monadic operators have prio 10. The most likely troublespot is -1^n . Of course, it would be more natural to have all boolean operators at a lower priority than arithmetic.
 * I guess my interest in the article is not to create a reference, but to answer some of the questions on the origins of Algol68 of the kind a learner may ponder, Why this? why that? etc.  And keep the reading relatively "light".  Kind of a "extra lite Algol68" version of "The Annontated C++ reference manual".  So feel to interject if anything I add is too heavy.

LALR parsers

 * BTW: did anyone ever write a parser (like YACC) for the language of the Revised Report eg. "REF to MODE NEST destination{a} : soft REF to MODE NEST TERTIARY"?

¢ NevilleDNZ 01:55, 25 September 2005 (UTC) ¢
 * Algol68 cannot be parsed by LALR parsers because the natural grammar is not LR1. One of the big troublemakers is, that a comma is allowed between declarations; so a variable declaration may follow a mode declaration; so you don't know whether a mode indicant at this place is a defining or applying one before seeing the equals sign. At least you need to know the priority before use, if you want to parse operator precedence in one run. The Algol68C restriction is sufficient for this case. I have written a YACC parser for Algol68 for the full language with this restriction myself. I cannot really claim that this is a faithful parser, because some of the syntactic restrictions are not enforced. They have to be honored in the sematic routines. --Glasreiniger 14:52, 25 September 2005 (UTC)
 * I seem to remember (and this is from a very long time ago, when I was thinking about writing a compiler), that one of the most challening constructs to encounter starts

op == ( mode... where you don't know yet how to parse the ==. Is this a typed operator declaration for ==, or an untyped declaration for =? This may be misremembered, but something like this annoyed me for a long time. Notinasnaid 16:04, 25 September 2005 (UTC)
 * This is not the actual trouble spot, because in the typed op declaration the declared symbol comes after the modes: OP (INT,INT)BOOL == SKIP . IMHO it is allowed to restrict usage of = as defines-symbol not to be adjacent to operator symbols it can combine with.
 * But if you have MODE FOO = STRUCT(...), BAR = ..., you need to 2 tokens look-ahead to see the equal sign, before you can decide that the mode declaration continues; otherwise BAR could start a variable or identity definition. In my lexer this leads to the restriction, that after a boldtag in defining context only one blank is allowed. The comment in my Flex lexer calls this a quirk. A hand-written lexer could avoid this.
 * Note that the keyword MODE is nearly useless, because a parser powerful enough to cope with this is also able to know that FOO = STRUCT ... must be the begin of a mode declaration, anyway. --Glasreiniger 16:42, 25 September 2005 (UTC)

As an aside, Charles Lindsey, one of the editors of the Revised Report, lectured to me in the Manchester Department of Computer Science on Algol 68 around 1970. He worked on one of the early compilers and I seem to remember him saying that they considered parsing the language in reverse, i.e. starting with the last token. This is clearly possible, but I'm not sure if it was ever done nor what the complexity of the reversed grammar might be.

Online reports
I am not a member of ACM, here is the revised report, do you know if this PDF is produced from scanning paper, or from original electronic text/input (Maybe EBCDIC)?


 * The ACM version is just the image from scanning. I happen to be the one who has made the (first) revised report available online. http://vestein.arb-phys.uni-dortmund.de/~wb/RR/rr.pdf e.g.. There are also TeX, .html and .dvi versions. Karl Kleine has published the MR176 paper. I am quite sure that the symbols in my version are the correct ones for the report. Charles Lindsey himself has done some proofreading of my text. --Glasreiniger 17:44, 24 September 2005 (UTC)
 * One nice thing you could do (from the html), is imbed a URL pointing to the original scanned paper original. That way others can help spot OCR/scanner errors and email you fixes.

¢ NevilleDNZ 01:55, 25 September 2005 (UTC) ¢
 * I shall follow this hint. But the accessibility of an ACM document is seriously difficult. Though, there is an authentic machine readable RR available now, from Dick Grune in []. The unrevised report is at []--Glasreiniger 17:06, 25 September 2005 (UTC)
 * I mostly converted the RR to html (with a python script) today. ¢ NevilleDNZ 17:23, 26 September 2005 (UTC) ¢

If one looks, there are getting to be a lot of Algol68 resources on the internet.
 * http://directory.google.com/Top/Computers/Programming/Languages/Algol_68
 * [mangled because triggering spam filter]http://www.~o~r~k~u~t.com/Community.aspx?cmm=1692610 :-)

¢ NevilleDNZ 02:07, 24 September 2005 (UTC) ¢

Algol68 Final Report special characters
i.e. The ∨, ∧, ¬(?), ≠, ≤, ≥, ×, ÷, ⌷, ↑, ↓, ⌊, ⌈ and ⊥ characters. APL2 keyboard stickers are available from IBM part number SC33-0604. They cost about $13 for a set of two.

¢ NevilleDNZ 16:58, 24 September 2005 (UTC) ¢

Just curious: The number of atoms in 0.012 kilogram of carbon 12 is known as Avogadro's number. It is approximately 6.0221415×10↑23 (2002 CODATA value). Does the RR still allow me to define this constant as follows: ⑽, ⒑, ⑩ do exist in unicode... something to do with the British wanting to support 12 pennys in a shilling. But the subscript 10 needs two characters.
 * real n = 6.0221415₁₀23;

Maybe we need to get the Working Group 2.1 on ALGOL68 to revise the RR to include/loby Unicode for 2005?? :-)

¢ NevilleDNZ 15:44, 25 September 2005 (UTC) ¢


 * IMHO there are enough reasons to do a formal proposal to unicode.org to include this symbol. It has been included in a German norm (DIN66006 IIRC), it has been discussed in ACM: comm.ACM 7 No 7(424,447), there called "subscript 10". Personally, I don't like Unicode enough to be engaged in this. A nice web page about codes includes it: ALCOR. But a better place to show this stuff should sougth, because it distracts from the programming language. And it is heritage from ALGOL58. --Glasreiniger 08:33, 28 September 2005 (UTC)


 * I kinda agree with you...  for example, even without significant support for the official APL character set, the APL developers continued programming in APL using "other characters".  After all character sets don't make a language. Beside if we want to add to wiki all the details of the language (including the 10), then we might as well replace the wiki-page with the Revised Report!!  (I am allowed to be harsh as it was my suggestion)
 * The now realise that the 10 characterm appears in several standards.  ALCOR of [ACM] (became DIN 66006 in Germany), GOST 10859 7 bit Cyrillic & Latin.
 * In GOST 10859/Cyrillic there appears to be various characters subsets giving greater text compression:
 * 4 bits - numeric data
 * 5 bits - numeric + operators
 * 6 bits - numeric + operators + Cyrillic Cyrillic worthy characters
 * 7 bits - numeric + operators + Cyrillic + Latin + Algol graphics Cyrillic base characters
 * BTW: Why was the word "worthy" used... was it a pun?
 * ⍧ NevilleDNZ 04:55, 21 October 2005 (UTC) ⍧
 * Ironically the APL keyboard that appears to be the defacto keyboard for Algol68/FR, can still be obtained from IBM even today.

I can see another mine-field just with Working Group 2.1 adopting a unicode version of Algol68. After all which asterix is the official Algol68 asterix, there are dozens in Unicode. Not to mention many ways of writting the number 10.

BTW: ThanX for telling me where the 10 came from. Needless to say I used Algol68 in ascii, and didn't even realise it existed until I read the whole RR.

⍧ NevilleDNZ 17:37, 28 September 2005 (UTC) ⍧


 * If you look VERY carefully into this part of the report, you may be be able to notice, that the label symbol is a slanted colon, in contrast to the routine symbol and the colon used in slicing. The alternative EXIT symbol should be a fat point. -- Glasreiniger 07:15, 29 September 2005 (UTC)


 * I did notice in the machine readable document that the label colon had been given a special name "lbl". I wondered if this was just a "throw back" the document formating softawre used.  (BTW: does this document foram have a name?).
 * I also noted that there is something called a "thin". eg in RR at section 3.3 between [ & ] is a "thin":
 * thinspace, \, in TeX.

[ ] INT q = (1, 4, 9, 16, 25); STRUCT (INT price, STRING category) bike := (150, "sport").


 * My gut feeling was so that [] didn't look too much like a window character ⎕.

Here us a rough match of the RR name, and the unicode equiv that I found. I gave priority to the APL keyboard.
 * LWS and UPS are the lower/upper state operators from the Algol681/FR.


 * BTW: Look at ALL these unicode characters for asterick: "✢✣✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋". Now you know why I priotised first the APL characters.  ☺.   Me thinks that asking for just 1 "subscript ten"=₁₀ from the unicode guys would be a good idea to counter balance all the astericks!


 * I had totally forgotten about the "nil" symbol "○" (It is not in Algol68C ascii/ebcdic).


 * Unicode also has several logical and/or symbols... I guess usage of other codes (eg now Unicode) was seen as site specific.   Making Algol68 Unicode Ready. ☺


 * Can you point me to a scanned/online version of the RR. AND Was SKIP officially a "~", or a "?"?

⍧ NevilleDNZ 09:32, 29 September 2005 (UTC) ⍧
 * The original is very bad; and AFAIK there are no real good prints at all. The report has been published photomechanically from bad sources. Even the microfiche version is not better. The combination of Dick Grune's version and my re-edition (the .dvi or .pdf, not .html) do a much better job. IIRC, the question mark is Algol68C for skip. --Glasreiniger 11:52, 29 September 2005 (UTC)


 * I could not access the document, a html permission problem. I know Victoria University has the paper Algol Bulletin, maybe they have an original RR.  I can search the local universities.  Actually the cheif reason I want to look is to check to see what the "strange" characters look like in print.  I had to laugh, Algol_60 (http://eli-project.sourceforge.net/a60_html/a60.html) has "subscript 10" also, but they gave up and simply called it "E".  As you suggest, somewhere in Europe subscript 10 was important... in the 1960s.
 * BTW: I tried emailing you, but got no reply.
 * Sorry. The permission is fixed now. --Glasreiniger 11:01, 21 October 2005 (UTC)
 * ⍧ NevilleDNZ 09:39, 5 October 2005 (UTC) ⍧

Re structuring this document
So far, I have added a tiny section on the transput, and a tiny bit to the section on operators, and some code for parallel processing. They seem to fit in OK. There is not much mention about bits and bytes and such representations. FR vs RR and Extensions etc

Already we have reached the 32k recommended article size. Is it time for a revision/pruning? What have we missed that is notable? Having said that it looks basically OK to me so far.

One book I read years ago on A68 could have its sections read "horizontally and vertically" out of a grid. This highlights that A68 was designed to be orthogonal. Do U know the Author/Title of this book? Could we structure an article like this?

⍧ NevilleDNZ 17:37, 28 September 2005 (UTC) ⍧

The book is Lindsay and van der Meulen's Informal Introduction to Algol 68. It would be interesting to structure the article that way, though I'm not sure where one would fit some of the political aspects of the language's history in that structure.

One thing that is definitely missing from the article is a discussion of "triple ref technique" which is possible only because the language allows references to non-heap objects. A Rosetta Stone-style listing of linked list manipulation in ALGOL 68, Pascal, and C might be the way to show the technique's advantages.


 * A discussion of the triple REF technique is needed, indeed. IMHO this hasn't do too much with heap vs. non-heap, as Algol-68 can easily be implemented without LOC at all (just make all allocations on heap). I have prepared some variations on the theme in []. The file queuea.a68 is due to Andy Walker (discussion in news:comp.lang.misc) except for the complaint in the commentary, of course. queueb.a68 changes the original file by lifting the REF up to mode LIST. queuee.a68 makes the algorithm parallel-safe, hopefully. I like queuef.a68, because it uses operators instead of functions. In queueg.a68 I modified the program to avoid triple REFs. Yes, this is easy: Just wrap one of the levels into a STRUCT. For syntactical reasons, a second field dummy in this STRUCT is needed. --Glasreiniger 13:57, 14 February 2006 (UTC)


 * Ack, you're absolutely right. The point is that unlike Pascal, which only allows pointers to records, Algol 68 allows references to things of any mode, including ref ref amode (i.e. variables of type ref amode, in particular those where references to heads of lists or roots of trees are stored), hence the name. My mistake.

Just a quotation ...
I came across the following, years ago. (I won't vouch for its precision, though.) I don't agree with it, but, here it is anyway:

"If PL/1 is a fatal disease, then is not Algol 68 just _capital punishment_?"

12.216.178.59 00:06, 20 February 2006

This quote might be a pun on case-stropping where the published form " begin real pi=4*atan(1)  end " would be written as case-stropped " ". I remember that case-stropping (changing case for "Syntatic elements", MODEs and OPerators) was a pain on keyboards that had only caps-lock (ansi) and but useful on shift-Lock keyboards (IBM). I finally discovered a keyboard that had both manufactured by Tandem-Computers.

NevilleDNZ 11:48, 10 July 2006 (UTC)

wiki2wirthy.py - convert html4 markup and unicode to Algol68 "Wirthy" 7-bit characters
My apologies to compiler writers (and python unicode experts) for this terribly crude parser... For wot is it wirth... I declare the above code to be GPL.

NevilleDNZ 13:07, 13 June 2007 (UTC) revised for html4

ALGOL 68 definitely not the ancestor of C, C++, sh or bash
99. On the other hand, both SIMULA-67 and CPL draw heavily on ALGOL 60. ALGOL 60 is the ancestor. ALGOL 68 is, as far as I can tell, more of an evolutionary dead end. -Dmh 19:01, 29 January 2007 (UTC)
 * 1) C++ was originally a front end built on top of C and drawing heavily on SIMULA-67 (which obviously predates ALGOL 68).
 * 2) C was a successor to B, itself a trimmed-down version of BCPL, itself a trimmed-down version of CPL, which again predates ALGOL 68
 * 3) sh and bash have nothing at all to do with ALGOL 68 apart from being procedural langauges.
 * C, sh and bash are weakly typed.

re: Is ALGOL 68 an ancestor of C, C++, sh or bash?
1. re: C++
 * "Stroustrup borrowed successful features from other older languages. As a result, C++ incorporates the concepts of classes and virtual functions from Simula67. C++ borrows the idea of operator overloading from Algol 68. These features are an important part of the support that C++ provides for object-oriented programming."

2. Re: C Steve talked Dennis into adding void as a type in C. It saved the instruction loading register for return value. Also when Steve got to the lab C types were like PL/1 namely offsets from any base you liked. They changed to A68 types but be the specific reason for this change is now lost. A few other A68isms ended up in C. (Subsequently these A68isms made their way into C++).
 * 1) * "C does not descend from Algol 68 is true, yet..." - Dennis Ritchie.

3. Re: Bourne Shell
 * The - Bourne shell source telling an interesting story of Algol68's influence on the Bourne shell. Bourne reused portions of ALGOL 68's " ", " " and " " clauses in the common Unix Bourne shell syntax. Moreover - although the v7 shell is written in C - Bourne took advantage of some macros to give the C source code an ALGOL 68 flavor.

I would suspect (but I cannot back it up with a quote) that the parallelism in the Bourne shell was a direct result of the PAR clause in Algol68. eg However Algol68 didn't get pipes until arriving on Unix, and the pipe behavior is not part of the standard.
 * Shell:  (sleep 10 ; date ) & ( sleep 20; date) & (sleep 30; date)
 * Algol68: PAR ( (sleep(10); date ), ( sleep(20); date) , (sleep(30); date) )

Shell and Algol68 are unusual in that both are early examples of concurrency which is mostly absent from other standard languages of the time. (PL/I had/has the TASK keyword)

4. Re: C, sh and bash are weakly typed.
 * True. Algol68 and python are the only two languages I know that have strong dynamic typing.  I don't know how this happened and looking for hints.  Check out struct, union & [:]: Structures, unions and arrays for the " mode  node =" example.

5. Re: ADA Influences
 * Extract from: http://archive.adaic.com/pol-hist/history/holwg-93/2.htm (source: portal.acm.org/ft_gateway.cfm?id=1057816&type=pdf)
 * Without exception, the following languages were found by the evaluators to be inappropriate to serve as base languages for a development of the common language: FORTRAN, COBOL, TACPOL, CMS-2, JOVIAL J-73, JOVIAL J-3B, SIMULA 67, ALGOL 60, and CORAL 66.
 * Proposals should be solicited from appropriate language designers for modification efforts using any of the languages, Pascal, PL/I, or ALGOL 68 as a base language from which to start. These efforts should be directed toward the production of a language that satisfied the DoD set of language requirements for embedded computer applications.
 * Ada - DoD HOLWG, Col Wm Whitaker, 1993

I don't know what the complete list of functionality originally from ALGOL 68 is. Maybe concurrency, operators, overloading & strong typing. These were mostly missing from ALGOL 60.

So I can say with certainty that Algol68 influenced C, to quote "there was influence, much of it so subtle that it is hard to recover even when I think hard." -Dennis Ritchie, 18 June 1988

99. re: Evolutionary Dead end. ALGOL 68 was the first (and possibly one of the last) major language for which a full formal definition was made before it was implemented.
 * IMHO: Algol68 was an experiment in both language design, and in collaborating in language design. Both of these disiplines were in their early stages of evolution.
 * Certainly the prominent compiler writers for ALGOL 60 were prominent in the ALGOL Bulletin "mailing list", but strangely none of them were on the actual core ALGOL 68 team. Maybe this caused C99's ratification to be delayed 31 years? :-)

NevilleDNZ 23:36, 7 February 2007 (UTC)

a 2nd re: to dmh
IMHO you are right in A68 being a dead end. Now we know that it was a mistake to introduce pointers into a HLL. But AFAIK till the advent of Java this has not been corrected in the more successful languages.


 * Algol 68 is a language with precise garbage collection and type-safe access to memory so, like Java, it has references, not pointers. A reference is something that can be made to refer to another value. References are needed for recursive structures such as trees and linked lists, and for modifying variables. Since all values in Algol 68 are immutable, references are how Algol 68 implements mutability. There is no pointer arithmetic or pointer casting in Algol 68, since that would violate its type system and memory model. — Preceding unsigned comment added by 72.196.148.37 (talk) 00:10, 14 May 2012 (UTC)

Sh is not comparable to a programming language. But the facts, which Neville reports, are correct, at least in the main parts. One exception is the parallelism. The & Operator has been in use in V6 Unix, but not the if - fi bracketing construct, which is due to Bourne, who has been one of the first A68 compiler writers.


 * Agreed, postfix "&" would appear to predate A68's influence on the Bourne shell in v7.  A coincidence only! :-( The "&" is certainly unique in both it's simplicity and similarity. It would be interesting to know what the inspiration for the v6 "&" was. NevilleDNZ 19:35, 8 February 2007 (UTC)


 * Another clear influence is the lack of distinction between statements and expressions in /bin/sh. Rp (talk) 09:45, 14 August 2010 (UTC)

It is simply a misunderstanding of the article text, if you read the wording heritage as being ancestor. --Glasreiniger 14:16, 8 February 2007 (UTC)

What the heck does that mean?
The opening paragraph...what in the heck does any of that mean to the average reader? Is there someone who can translate all that into layman-ese? 64.186.231.74 (talk) 00:57, 27 March 2011 (UTC)
 * It all seems pretty clear to me, but ALGOL 68 was my first programming language. Can you please explain what isn't clear to you and what, in this context, you consider to be a layman?  Someone who has some idea of what a computer is?  Someone who can read English?  Without more specific questions it's very difficult to guess what sort of improvement you're looking for. Rp (talk) 22:27, 27 March 2011 (UTC)

Proceduring
This Text:

As defined in ALGOL 68, it did not work as expected, for example in the code:

if false andf ( print ("Should not be executed"); true) then ...

against the programmers naïve expectations the print would be executed as it is the result of the enclosed-clause after andf that was procedured.

fails to explain that

if false andf proc bool: ( print ("Should not be executed"); true) then ...

would have worked. So the fault is not proceduring, but the wrong description in the unrevised report which fails. --Glasreiniger (talk) 06:47, 12 April 2011 (UTC)
 * Uh ... no. The goal of proceduring was to be able to write the former to mean the latter, so if it didn't achieve that, it was broken. 15:41, 27 February 2017 (UTC)

Use of 'DECIMAL EXPONENT SYMBOL' (U+23E8)
Is this correct? If so, why is there no glyph for it? Attys (talk) 00:51, 9 June 2011 (UTC)

'DECIMAL EXPONENT SYMBOL' is part of "The Unicode Standard 6.0"
 * http://unicode.org/charts/PDF/U2300.pdf
 * http://www.fileformat.info/info/unicode/char/23e8/index.htm

I am not sure which OSes use Unicode6.0.0, it could be that you need to upgrade, or download DecimalExponent.ttf and install:
 * Install and configure Unicode TrueType fonts in Linux
 * Vijay Kumar's Blog: How to install TTF/OTF fonts in linux

NJoy NevilleDNZ (talk) 04:18, 15 July 2011 (UTC)

syntaxhighlight tag changes by user:Boshomi
Yow. What is the point of replacing this:

int n = 2; co n is a fixed constant of 2.co int m := 3; co m is a newly created local variable whose value is initially set to 3. This is short for ref int m = loc int := 3; co real avogadro = 6.0221415⏨23; co Avogadro's number co long long real pi = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510; compl square root of minus one = 0 ⊥ 1

Which looks like Algol68 by this:

int n = 2; co n is a fixed constant of 2.co int m := 3; co m is a newly created local variable whose value is initially set to 3. This is short for ref int m = loc int := 3; co real avogadro = 6.0221415⏨23; co Avogadro's number co long long real pi = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510; compl square root of minus one = 0 ⊥ 1

Which looks like nothing on earth. HughesJohn (talk) 09:54, 28 September 2011 (UTC)

Well, it turns out that GeSHi can do a half-assed job if the source is UPPER stropped:

INT n = 2; CO n is a fixed constant of 2.CO INT m := 3; CO m is a newly created local variable whose value is initially set to 3. This is short for REF INT m = LOC INT := 3; CO REAL avogadro = 6.0221415⏨23; CO Avogadro's number CO LONG LONG REAL pi = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510; COMPL square root of minus one = 0 ⊥ 1

But it's still not very pretty. (multi-line comments are not handled for example) HughesJohn (talk) 10:18, 28 September 2011 (UTC)


 * You are right! it's still not very pretty. The colours are ugly. I like blue colour for keywords and green vor comments.

So i will stop my work at this page. I think a reformating would be nice, when we get a better highlighting form the wikimedia project.

i have found the algol68.php file, used by mediawiki for source and syntaxhighlight tag: http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi This file should be replaced by a better one. This file is not too complicat:

folder: /Syntaxhighlight_GeSHi/geshi/geshi/ filename: algol68 --Boshomi (talk) 19:50, 28 September 2011 (UTC) Hi... I agree with the comments about highlight ugliness... I'll chat to BenBE about adding the common "stropping regimes". Maybe we can have:


 * URL: https://en.wikipedia.org/wiki/Template:Algol_strict/styles.css

As yet the standard extension (formerly known as SyntaxHighlight_GeSHi) does not otherwise support Algol 68's formal stropping.

The programmer who writes executable code does not always have an option of bold typeface or underlining in the code as this may depend on hardware and cultural issues. Different methods to denote these identifiers have been devised. This is called a stropping regime. For example, all or some of the following may be available programming representations:

int a real int = 3; # the strict language # 'INT'A REAL INT = 3; # QUOTE stropping style # .INT A REAL INT = 3; # POINT stropping style # INT a real int = 3; # UPPER stropping style # int a_real_int = 3; # RES stropping style, there are 61 accepted reserved words #

All implementations must recognize at least POINT, UPPER and RES inside PRAGMAT sections. Of these, POINT and UPPER stropping are quite common, while RES stropping is a contradiction to the specification (as there are no reserved words). QUOTE (single apostrophe quoting) was the original recommendation, while matched apostrophe quoting, common in ALGOL 60, is not used much in ALGOL 68.

The following characters were recommended for portability, and termed "worthy characters" in the Report on the Standard Hardware Representation of Algol 68 :

This reflected a problem in the 1960s where some hardware didn't support lower-case, nor some other non-ASCII characters, indeed in the 1973 report it was written: "Four worthy characters — "|", "_", "[", and "]" — are often coded differently, even at installations which nominally use the same character set."
 * Worthy Characters: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "#$%'*+,-./:;<=>@[ ]_|
 * Base characters: "Worthy characters" are a subset of "base characters".

par: Parallel processing - with BOLD stropping example
Code appears as BOLDED lowercase, but a physical cut and pastes of code produces uppercase.

ALGOL 68 supports programming of parallel processing. Using the keyword PAR, a collateral clause is converted to a parallel clause, where the synchronisation of actions is controlled using semaphores. In A68G the parallel actions are mapped to threads when available on the hosting operating system. In A68S a different paradigm of parallel processing was implemented (see below).

PROC eat = VOID: ( muffins-:=1; print(("Yum!",new line))), speak = VOID: ( words-:=1; print(("Yuk...",new line))); INT muffins := 4, words := 8; SEMA mouth = LEVEL 1; PAR BEGIN WHILE muffins > 0 DO DOWN mouth; eat; UP mouth OD, WHILE words > 0 DO DOWN mouth; speak; UP mouth OD

END

Example of different program representations
ALGOL 68 allows for every natural language to define its own set of keywords Algol-68. As a result, programmers are able to write programs using keywords from their native language. Below is an example of a simple procedure that calculates "the day following", the code is in two languages: English and German.