Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
ALGOL 68
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Revisions== Except where noted (with a <sup>superscript</sup>), the language described above is that of the "Revised Report<sup>(r1)</sup>". ===The language of the unrevised report=== The original language (As per the "Final Report"<sup>[[#The language of the unrevised report|r0]]</sup>) differs in syntax of the ''mode cast'', and it had the feature of ''proceduring'', i.e. coercing the value of a term into a procedure which evaluates the term. Proceduring would be intended to make evaluations ''lazy''. The most useful application could have been the short-circuited evaluation of Boolean operators. In: '''OP''' '''ANDF''' = ('''BOOL''' a,'''PROC''' '''BOOL''' b)'''BOOL''':(a | b | '''FALSE'''); '''OP''' '''ORF''' = ('''BOOL''' a,'''PROC''' '''BOOL''' b)'''BOOL''':(a | '''TRUE''' | b); ''b'' is only evaluated if ''a'' is true. As defined in ALGOL 68, it did not work as expected, for example in the code: '''IF''' '''FALSE''' '''ANDF''' '''CO''' proc bool: '''CO''' ( print ("Should not be executed"); '''TRUE''') '''THEN''' ... against the programmers naïve expectations the print ''would'' be executed as it is only the ''value'' of the elaborated enclosed-clause after '''ANDF''' that was procedured. Textual insertion of the commented-out '''PROC''' '''BOOL''': makes it work. Some implementations emulate the expected behaviour for this special case by extension of the language. Before revision, the programmer could decide to have the arguments of a procedure evaluated serially instead of collaterally by using semicolons instead of commas (''[https://groups.google.com/group/comp.lang.misc/msg/03af5063e1662d4d gomma]''s). For example in: '''PROC''' test = ('''REAL''' a; '''REAL''' b) :... ... test (x '''PLUS''' 1, x); The first argument to test is guaranteed to be evaluated before the second, but in the usual: '''PROC''' test = ('''REAL''' a, b) :... ... test (x '''PLUS''' 1, x); then the compiler could evaluate the arguments in whatever order it felt like. ===Extension proposals from IFIP WG 2.1=== After the revision of the report, some extensions to the language have been proposed to widen the applicability: * ''partial parametrisation'' (aka [[Currying#Motivation|Currying]]): creation of functions (with fewer parameters) by specification of some, but not all parameters for a call, e.g. a function logarithm of two parameters, base and argument, could be specialised to natural, binary or decadic log,<ref>{{cite journal |title=Partial Parametrization |url=https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A37/P42.HTM |journal=ALGOL Bulletin |date=July 1974 |first1=C. H. |last1=Lindsey |issue=37 |pages=24–26 |access-date=2022-09-19}}</ref> * ''module extension'': for support of external linkage, two mechanisms were proposed, bottom-up ''definition modules'', a more powerful version of the facilities from [[ALGOL 68-R]] and top-down ''holes'', similar to the <code>ENVIRON</code> and <code>USING</code> clauses from [[ALGOL 68C]]<ref name="modules">{{cite journal |title=A Modules and Separate Compilation facility for ALGOL 68 |journal=ALGOL Bulletin |date=December 1978 |first1=C. H. |last1=Lindsey |last2=Boom |first2=H. J. |issue=43 |pages=19–53 |url=https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A43/P32.HTM|access-date=2020-01-29 |doi=}} [https://dl.acm.org/doi/10.5555/1061751.1061757 Comments] [https://dl.acm.org/doi/10.5555/1061760.1061764 errata]</ref> * ''mode parameters'': for implementation of limited parametrical polymorphism (most operations on data structures like lists, trees or other data containers can be specified without touching the pay load).<ref>{{cite journal |title=Modals |url=https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A37/P43.HTM |journal=ALGOL Bulletin |date=July 1974 |first1=C. H. |last1=Lindsey |issue=37 |pages=26–29 |access-date=2022-09-19}}</ref> So far, only partial parametrisation has been implemented, in Algol 68 Genie. ===True ALGOL 68s specification and implementation timeline=== {|class="wikitable sortable" |- style="background:#ccc;" ! Name || Year || Purpose || State || Description || Target CPU || Licensing || Implementation language |- |[[Generalized ALGOL]] || 1962 || Scientific || {{flag|NLD}} || ALGOL for generalised grammars || || || |- |[[ALGOL Y]]<sup>Y</sup> || 1966 || Draft proposal || Intl || First version of Algol 68 || Specification || [[Association for Computing Machinery|ACM]] || |- |ALGOL 68<sup>DR</sup> || 1968 || Draft proposal || Intl || IFIP WG 2.1 Draft Report || Specification – March || ACM || |- |ALGOL 68<sup>[[#The language of the unrevised report|r0]]</sup> || 1968 || Standard || Intl || IFIP WG 2.1 Final Report || Specification – August || ACM || |- |[[ALGOL 68-R]]<sup>R</sup> || 1970 || Military || {{flag|UK}} || || [[ICT 1900 series|ICL 1900]] || || ALGOL 60 |- |[[EPOS ALGOL]]<sup>E</sup> || 1971 || Scientific || || || || || |- |[[ALGOL 68RS]]<sup>RS</sup> || 1972 || Military || {{flag|UK}} || Portable compiler system || ICL 2900/Series 39, Multics, VMS & {{nowrap|C generator (1993)}} || [[Crown Copyright]] || ALGOL 68RS |- |Algol 68 with areas || 1972 || Experimental & other || {{flag|UK}} || Addition of areas to Algol 68 || || || |- |Mini ALGOL 68 || 1973 || Research || {{flag|NLD}} || Interpreter for ALGOL 68 subset<ref>{{cite web |url=http://oai.cwi.nl/oai/asset/9494/9494A.pdf |title=An interpreter for simple Algol 68 Programs |archive-url=https://web.archive.org/web/20110718172314/http://oai.cwi.nl/oai/asset/9494/9494A.pdf |archive-date=2011-07-18 |url-status=dead}}</ref> || Portable interpreter || [[Mathematisch Centrum]] || [[ALGOL 60]] |- |[[OREGANO]] || 1973 || Research || {{flag|US}} || "The importance of implementation models." || || [[UCLA]] || |- |[[ALGOL 68C]]<sup>C</sup> || 1975 || Scientific || {{flag|UK}} || Cambridge Algol 68 || [[International Computers Limited|ICL]], IBM 360, PDP-10 & Unix, [[Telefunken]], TESLA 200,<ref>{{cite journal |url=https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A42/P21.HTM |title=AB42.2.1 Implementation on TESLA 200 |first=J. |last=Nadrchal |journal=Algol Bulletin |issue=42 |date=May 1978}}</ref> [[Z80]] (1980)<ref>{{cite journal|url=http://www.80bus.co.uk/publications/magazines/LSG3.pdf |title=ALGOL68C on the Z80 |first=Raymond |last=Anderson |pages=52-57 |journal=Liverpool Software Gazette |edition=Third |date=March 1980 |access-date=2010-03-20 |url-status=dead |archive-url=https://web.archive.org/web/20100415194813/http://www.80bus.co.uk/publications/magazines/LSG3.pdf |archive-date=2010-04-15}}</ref> || Cambridge || ALGOL 68C |- |'''ALGOL 68 Revised Report'''<sup>[[#Revisions|r1]]</sup> || 1975 || Standard || Intl || IFIP WG 2.1 Revised Report || Specification || ACM || |- |[[Algol H]]<sup>H</sup> || 1975 || Experimental & other || {{flag|UK}} || Proposed extensions to the mode system of Algol 68 || Specification || || [[ALGOL W]] |- |[[Odra (computer)|Odra]] Algol 68 || 1976 || practical uses || {{flag|USSR}}/{{flag|Poland}} || || Odra 1204/IL || [[Copyright law of the Soviet Union|Soviet]] || [[ALGOL 60]] |- |Oklahoma ALGOL 68 || 1976 || programming instruction || {{flag|USA}} || [[Oklahoma State University]] implementation<ref>{{cite conference |last1=Hedrick |first1=G.E. |last2=Robertson |first2=Alan |title=The Oklahoma State ALGOL 68 Subset Compiler |conference=1975 International Conference on ALGOL 68 |location=Stillwater, OK |date=June 10–12, 1975}}</ref><ref>{{cite journal |last=Hedrick |first=G.E. |doi=10.1145/382175.803425 |title=ALGOL68 instruction at Oklahoma State University |journal=ACM SIGCSE Bulletin – Special Issue Eighth Technical Symposium on Computer Science Education |volume=9 |issue=3 |date=August 1977 |pages=16–20 |publisher=ACM |location=New York, NY, USA}}</ref> || [[IBM 1130]] and [[System/370]]/158 || {{Unknown|Unknown}} || ANSI [[Fortran 66]]. |- |Berlin ALGOL 68 || 1977 || Research || {{flag|DE}} || Portable compiler for System/370, Siemens S4004, and [[PDP-11]]<ref>{{cite journal |doi=10.1145/872738.807149 |title=The Berlin ALGOL 68 implementation |journal=ACM SIGPLAN Notices |volume=12 |issue=6 |pages=102-108 |first1=Wilfried |last1=Koch |first2=Christoph |last2=Oeters}}</ref><ref>{{cite conference |doi=10.1007/3-540-07410-4_665 |title=An abstract ALGOL 68 machine and its application in a machine independent compiler |conference=GI — 5. Jahrestagung |series=Lecture Notes in Computer Science |volume=34 |date=1975 |pages=642-653 |first1=W. |last1=Koch |first2=C. |last2=Oeters |editor-last=Mülbacher |editor-first=J. |publisher=Springer |location=Berlin, Heidelberg}}</ref> || Machine-independent compiler || [[Technische Universität Berlin]] || [[Compiler Description Language|CDL 2]] |- |[[FLACC]]<sup>F</sup> || 1977 || Multi-purpose || {{flag|CAN}} || Revised Report complete implementation with debug features || System/370 || lease, Chion Corporation || Assembler |- |[[ALGOL 68-RT]]<sup>RT</sup> || 1979 || Scientific || {{flag|UK}} || Parallel ALGOL 68-R || || || |- |[[RS Algol]]<sup>rs</sup> || 1979 || Scientific || {{flag|UK}} || || || || |- |ALGOL 68+ || 1980 || Scientific || {{flag|NLD}} || Proposed superlanguage of ALGOL 68<ref>{{cite web |url=http://hopl.murdoch.edu.au/showlanguage2.prx?exp%3D4351 |title=The Encyclopedia of Computer Languages |access-date=2010-03-20 |url-status=dead |archive-url=https://web.archive.org/web/20110310110439/http://hopl.murdoch.edu.au/showlanguage2.prx?exp=4351 |archive-date=2011-03-10}}</ref> || || || |- |[[M-220]] ALGOL 68 || || || {{flag|USSR}} || || M-220 || [[Copyright law of the Soviet Union|Soviet]] || EPSILON |- |[[Leningrad ALGOL 68]]<sup>L</sup> || 1980 || Telecommunications || {{flag|USSR}} || Full language + modules || IBM, DEC, CAMCOH, PS 1001 & PC || [[Copyright law of the Soviet Union|Soviet]] || |- |[[Interactive ALGOL 68]]<sup>I</sup> || 1983 || || {{flag|UK}} || [[Incremental compilation]] || PC || Noncommercial [[shareware]] ||| |- |[[ALGOL 68S]]<sup>S</sup> || 1985 || Scientific || Intl || Sun version of ALGOL 68 || [[Sun-3]], Sun [[SPARC]] (under [[SunOS]] 4.1 & [[Solaris (operating system)|Solaris]] 2), [[Atari]] ST (under [[Atari ST|GEMDOS]]), [[Acorn Archimedes]] (under [[RISC OS]]), [[VAX-11]] under [[Ultrix-32]] || || |- | Algol68toC<ref>[[SourceForge:projects/algol68/files/|Open source Algol 68 implementations – Browse Files at]]. Sourceforge.net. Retrieved on 2013-07-21.</ref> (ctrans) || 1985 || Electronics || {{flag|UK}} || ctrans from [[ELLA (programming language)|ELLA]] [[ALGOL 68RS]] || Portable C generator | {{Open source|[[Open-source software]]}} (1995) || ALGOL 68RS |- |MK2 [[Interactive ALGOL 68]] || 1992 || || {{flag|UK}} || [[Incremental compilation]] || PC || Noncommercial shareware<ref>{{cite web |url=http://www.nunan.fsnet.co.uk/algol68/a68mk2.zip |title=ZIP archive of MK2.1 release |archive-url=https://web.archive.org/web/20060829235643/http://www.nunan.fsnet.co.uk/algol68/a68mk2.zip |archive-date=2006-08-29 |url-status=dead}}</ref>|| |- |Algol 68 Genie<sup>G</sup> || 2001 || Full language || {{flag|NLD}} || Includes standard collateral clause || Portable interpreter | {{Open source|[[GPL]]}} | [[C (programming language)|C]] |- |Algol 68 Genie version 2.0.0 || 2010 || Full language || {{flag|NLD}} || || Portable interpreter; optional compilation of selected units | {{Open source|[[GPL]]}} | [[C (programming language)|C]] |- |[[GNU Compiler Collection|GCC]] (ga68) || 2025 || Full language || {{flag|ESP}} || GCC Front-End || Portable compiler | {{Open source|[[GPL]]}} | [[C (programming language)|C]] |} The [[S3 (programming language)|S3 language]] that was used to write the [[ICL VME]] operating system and much other system software on the [[ICL 2900 Series]] was a direct derivative of Algol 68. However, it omitted many of the more complex features, and replaced the basic modes with a set of data types that mapped directly to the 2900 Series hardware architecture. ===Implementation specific extensions=== ALGOL 68R from [[Royal Radar Establishment|RRE]] was the first ALGOL 68 subset implementation, running on the [[ICT 1900 series|ICL 1900]]. Based on the original language, the main subset restrictions were ''definition before use'' and no parallel processing. This compiler was popular in [[United Kingdom|UK]] universities in the 1970s, where many [[computer science]] students learnt ALGOL 68 as their first programming language; the compiler was renowned for good error messages. ALGOL 68RS<sup>(RS)</sup> from [[Royal Signals and Radar Establishment|RSRE]] was a portable compiler system written in ALGOL 68RS (bootstrapped from ALGOL 68R), and implemented on a variety of systems including the [[ICL 2900 Series|ICL 2900]]/[[ICL Series 39|Series 39]], [[Multics]] and [[VAX|DEC VAX/VMS]]. The language was based on the Revised Report, but with similar subset restrictions to ALGOL 68R. This compiler survives in the form of an Algol68-to-C compiler. In ALGOL 68S<sup>(S)</sup> from [[Carnegie Mellon University]] the power of parallel processing was improved by adding an orthogonal extension, ''eventing''. Any variable declaration containing keyword '''EVENT''' made assignments to this variable eligible for parallel evaluation, i.e. the right hand side was made into a procedure which was moved to one of the processors of the [[C.mmp]] multiprocessor system. Accesses to such variables were delayed after termination of the assignment. [[University of Cambridge|Cambridge]] [[ALGOL 68C]]<sup>(C)</sup> was a portable compiler that implemented a subset of ALGOL 68, restricting operator definitions and omitting garbage collection, flexible rows and formatted transput. Algol 68 Genie<sup>(G)</sup> by M. van der Veer is an ALGOL 68 implementation for today's computers and operating systems. "Despite good intentions, a programmer may violate portability by inadvertently employing a local extension. To guard against this, each implementation should provide a PORTCHECK pragmat option. While this option is in force, the compiler prints a message for each construct that it recognizes as violating some portability constraint."<ref>{{Cite web |url=http://www.fh-jena.de/~kleine/history/languages/Algol68-RR-HardwareRepresentation.pdf |title=The Report on the Standard Hardware Representation for Algol 68 |first1=Wilfred J. |last1=Hansen |first2=Hendrik |last2=Boom |access-date=2005-08-27 |archive-date=2014-01-02 |archive-url=https://web.archive.org/web/20140102201013/http://www.fh-jena.de/~kleine/history/languages/Algol68-RR-HardwareRepresentation.pdf |url-status=dead }}</ref>
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)