ALGOL 68 (short for ''Algorithmic Language 1968'') is an
imperative programming language
A programming language is a system of notation for writing computer programs.
Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
member of the
ALGOL
ALGOL (; short for "Algorithmic Language") is a family of imperative computer programming languages originally developed in 1958. ALGOL heavily influenced many other languages and was the standard method for algorithm description used by the ...
family that was conceived as a successor to the
ALGOL 60
ALGOL 60 (short for ''Algorithmic Language 1960'') is a member of the ALGOL family of computer programming languages. It followed on from ALGOL 58 which had introduced code blocks and the begin and end pairs for delimiting them, representing a ...
language, designed with the goal of a much wider scope of application and more rigorously defined
syntax
In linguistics, syntax ( ) is the study of how words and morphemes combine to form larger units such as phrases and sentences. Central concerns of syntax include word order, grammatical relations, hierarchical sentence structure (constituenc ...
and semantics.
The complexity of the language's definition, which runs to several hundred pages filled with non-standard terminology, made
compiler
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primaril ...
implementation difficult and it was said it had "no implementations and no users". This was only partly true; ALGOL 68 did find use in several niche markets, notably in the
United Kingdom
The United Kingdom of Great Britain and Northern Ireland, commonly known as the United Kingdom (UK) or Britain, is a country in Northwestern Europe, off the coast of European mainland, the continental mainland. It comprises England, Scotlan ...
where it was popular on
International Computers Limited
International Computers Limited (ICL) was a British computer hardware, computer software and computer services company that operated from 1968 until 2002. It was formed through a merger of International Computers and Tabulators (ICT), English Ele ...
(ICL) machines, and in teaching roles. Outside these fields, use was relatively limited.
Nevertheless, the contributions of ALGOL 68 to the field of
computer science
Computer science is the study of computation, information, and automation. Computer science spans Theoretical computer science, theoretical disciplines (such as algorithms, theory of computation, and information theory) to Applied science, ...
have been deep, wide-ranging and enduring, although many of these contributions were only publicly identified when they had reappeared in subsequently developed programming languages. Many languages were developed specifically as a response to the perceived complexity of the language, the most notable being
Pascal, or were reimplementations for specific roles, like
Ada.
Many languages of the 1970s trace their design specifically to ALGOL 68, selecting some features while abandoning others that were considered too complex or out-of-scope for given roles. Among these is the language
C, which was directly influenced by ALGOL 68, especially by its
strong typing
In computer programming, one of the many ways that programming languages are colloquially classified is whether the language's type system makes it strongly typed or weakly typed (loosely typed). However, there is no precise technical definition o ...
and structures. Most modern languages trace at least some of their syntax to either C or Pascal, and thus directly or indirectly to ALGOL 68.
Overview
ALGOL 68 features include expression-based syntax, user-declared types and structures/tagged-unions, a reference model of variables and reference parameters, string, array and matrix slicing, and concurrency.
ALGOL 68 was designed by the
International Federation for Information Processing
The International Federation for Information Processing (IFIP) is a global organisation for researchers and professionals working in the field of computing to conduct research, develop standards and promote information sharing.
Established in 19 ...
(IFIP)
IFIP Working Group 2.1 on Algorithmic Languages and Calculi. On 20 December 1968, the language was formally adopted by the group, and then approved for publication by the General Assembly of IFIP.
ALGOL 68 was defined using a
formalism, a two-level
formal grammar
A formal grammar is a set of Terminal and nonterminal symbols, symbols and the Production (computer science), production rules for rewriting some of them into every possible string of a formal language over an Alphabet (formal languages), alphabe ...
, invented by
Adriaan van Wijngaarden.
Van Wijngaarden grammars use a
context-free grammar
In formal language theory, a context-free grammar (CFG) is a formal grammar whose production rules
can be applied to a nonterminal symbol regardless of its context.
In particular, in a context-free grammar, each production rule is of the fo ...
to generate an infinite set of productions that will recognize a particular ALGOL 68 program; notably, they are able to express the kind of requirements that in many other programming language
technical standard
A technical standard is an established Social norm, norm or requirement for a repeatable technical task which is applied to a common and repeated use of rules, conditions, guidelines or characteristics for products or related processes and producti ...
s are labelled ''semantics'', and must be expressed in ambiguity-prone natural language prose, and then implemented in compilers as ''ad hoc'' code attached to the formal language parser.
The main aims and principles of design of ALGOL 68 are:
# Completeness and clarity of description
#
Orthogonality
In mathematics, orthogonality is the generalization of the geometric notion of '' perpendicularity''. Although many authors use the two terms ''perpendicular'' and ''orthogonal'' interchangeably, the term ''perpendicular'' is more specifically ...
of design
# Security
# Efficiency:
#* Static mode checking
#* Mode-independent parsing
#* Independent compiling
#* Loop optimizing
#* Representations – in minimal & larger
character sets
Character encoding is the process of assigning numbers to graphical character (computing), characters, especially the written characters of human language, allowing them to be stored, transmitted, and transformed using computers. The numerical v ...
ALGOL 68 has been criticized, most prominently by some members of its design committee such as
C. A. R. Hoare and
Edsger Dijkstra
Edsger Wybe Dijkstra ( ; ; 11 May 1930 – 6 August 2002) was a Dutch computer scientist, programmer, software engineer, mathematician, and science essayist.
Born in Rotterdam in the Netherlands, Dijkstra studied mathematics and physics and the ...
, for abandoning the simplicity of
ALGOL 60
ALGOL 60 (short for ''Algorithmic Language 1960'') is a member of the ALGOL family of computer programming languages. It followed on from ALGOL 58 which had introduced code blocks and the begin and end pairs for delimiting them, representing a ...
, becoming a vehicle for complex or overly general ideas, and doing little to make the
compiler
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primaril ...
writer's task easier, in contrast to deliberately simple contemporaries (and competitors) such as
C,
S-algol and
Pascal.
In 1970,
ALGOL 68-R
ALGOL 68-R was the first implementation of the Algorithmic Language ALGOL 68.
In December 1968, the report on the Algorithmic Language ALGOL 68 was published. On 20–24 July 1970 a working conference was arranged by the International Federati ...
became the first working compiler for ALGOL 68.
In the 1973 revision, certain features — such as
proceduring, gommas and
formal bounds — were omitted.
[Revised Report on the Algorithmic Language Algol 68](_blank)
. jmvdveer.home.xs4all.nl (1968-12-20). Retrieved on 2013-07-21. Cf.
The language of the unrevised report.r0
Though European defence agencies (in Britain
Royal Signals and Radar Establishment
The Royal Signals and Radar Establishment (RSRE) was a scientific research establishment within the Ministry of Defence (MoD) of the United Kingdom. It was located primarily at Malvern in Worcestershire, England. The RSRE motto was ''Ubique ...
(RSRE)) promoted the use of ALGOL 68 for its expected security advantages, the American side of the NATO alliance decided to develop a different project, the language
Ada, making its use obligatory for US defense contracts.
ALGOL 68 also had a notable influence in the
Soviet Union
The Union of Soviet Socialist Republics. (USSR), commonly known as the Soviet Union, was a List of former transcontinental countries#Since 1700, transcontinental country that spanned much of Eurasia from 1922 until Dissolution of the Soviet ...
, details of which can be found in
Andrey Terekhov
Andrey Nikolaevich Terekhov (; 3 September 1949) is a Russian mathematician and programmer.
Education
Terekhov studied Computer Science at Leningrad State University, graduating with Honors student, Honors. He has a Doctorate in Physical Mathemat ...
's 2014 paper: "ALGOL 68 and Its Impact on the USSR and Russian Programming", and "Алгол 68 и его влияние на программирование в СССР и России".
Steve Bourne, who was on the ALGOL 68 revision committee, took some of its ideas to his
Bourne shell
The Bourne shell (sh) is a shell command-line interpreter for computer operating systems. It first appeared on Version 7 Unix, as its default shell. Unix-like systems continue to have /bin/sh—which will be the Bourne shell, or a symbolic lin ...
(and thereby, to descendant
Unix shell
A Unix shell is a Command-line_interface#Command-line_interpreter, command-line interpreter or shell (computing), shell that provides a command line user interface for Unix-like operating systems. The shell is both an interactive command languag ...
s such as
Bash) and to
C (and thereby to descendants such as
C++).
The complete history of the project can be found in
C. H. Lindsey's "A History of ALGOL 68".
[
Also in Includes a comprehensive bibliography of the meetings and discussions before, during and after development of ALGOL 68.
]
For a full-length treatment of the language, see "Programming ALGOL 68 Made Easy" by Dr. Sian Mountbatten, or "Learning ALGOL 68 Genie" by Marcel van der Veer which includes the Revised Report.
History
Origins
ALGOL 68, as the name implies, is a follow-on to the
ALGOL
ALGOL (; short for "Algorithmic Language") is a family of imperative computer programming languages originally developed in 1958. ALGOL heavily influenced many other languages and was the standard method for algorithm description used by the ...
language that was first formalized in 1960. That same year the
International Federation for Information Processing
The International Federation for Information Processing (IFIP) is a global organisation for researchers and professionals working in the field of computing to conduct research, develop standards and promote information sharing.
Established in 19 ...
(IFIP) formed and started the Working Group on ALGOL, or WG2.1. This group released an updated ALGOL 60 specification in Rome in April 1962. At a follow-up meeting in March 1964, it was agreed that the group should begin work on two follow-on standards, ALGOL X, which would be a redefinition of the language with some additions, and
ALGOL Y, which would have the ability to modify its own programs in the style of the language
LISP
Lisp (historically LISP, an abbreviation of "list processing") is a family of programming languages with a long history and a distinctive, fully parenthesized Polish notation#Explanation, prefix notation.
Originally specified in the late 1950s, ...
.
Definition process
The first meeting of the ALGOL X group was held in
Princeton University
Princeton University is a private university, private Ivy League research university in Princeton, New Jersey, United States. Founded in 1746 in Elizabeth, New Jersey, Elizabeth as the College of New Jersey, Princeton is the List of Colonial ...
in May 1965. A report of the meeting noted two broadly supported themes, the introduction of
strong typing
In computer programming, one of the many ways that programming languages are colloquially classified is whether the language's type system makes it strongly typed or weakly typed (loosely typed). However, there is no precise technical definition o ...
and interest in
Euler's concepts of 'trees' or 'lists' for handling collections. Although intended as a "short-term solution to existing difficulties", ALGOL X got as far as having a compiler made for it. This compiler was written by
Douglas T. Ross
Douglas Taylor "Doug" Ross (21 December 1929 – 31 January 2007) was an American computer scientist pioneer, and chairman of SofTech, Inc. He is most famous for originating the term CAD for computer-aided design, and is considered to be the fat ...
of the
Massachusetts Institute of Technology
The Massachusetts Institute of Technology (MIT) is a Private university, private research university in Cambridge, Massachusetts, United States. Established in 1861, MIT has played a significant role in the development of many areas of moder ...
(MIT) with the ''Automated Engineering Design'' (AED-0) system, also termed ''ALGOL Extended for Design''.
At the second meeting in October in France, three formal proposals were presented,
Niklaus Wirth
Niklaus Emil Wirth ( IPA: ) (15 February 1934 – 1 January 2024) was a Swiss computer scientist. He designed several programming languages, including Pascal, and pioneered several classic topics in software engineering. In 1984, he won the Tu ...
's
ALGOL W
ALGOL W is a programming language. It is based on a proposal for ALGOL X by Niklaus Wirth and Tony Hoare as a successor to ALGOL 60. ALGOL W is a relatively simple upgrade of the original ALGOL 60, adding string, bitstring, complex number a ...
along with comments about record structures by
C.A.R. (Tony) Hoare, a similar language by Gerhard Seegmüller, and a paper by
Adriaan van Wijngaarden on "Orthogonal design and description of a formal language". The latter, written in almost indecipherable "W-Grammar", proved to be a decisive shift in the evolution of the language. The meeting closed with an agreement that van Wijngaarden would re-write the Wirth/Hoare submission using his W-Grammar.
This seemingly simple task ultimately proved more difficult than expected, and the follow-up meeting had to be delayed six months. When it met in April 1966 in
Kootwijk, van Wijngaarden's draft remained incomplete and Wirth and Hoare presented a version using more traditional descriptions. It was generally agreed that their paper was "the right language in the wrong formalism". As these approaches were explored, it became clear there was a difference in the way parameters were described that would have real-world effects, and while Wirth and Hoare protested that further delays might become endless, the committee decided to wait for van Wijngaarden's version. Wirth then implemented their current definition as ALGOL W.
At the next meeting in
Warsaw
Warsaw, officially the Capital City of Warsaw, is the capital and List of cities and towns in Poland, largest city of Poland. The metropolis stands on the Vistula, River Vistula in east-central Poland. Its population is officially estimated at ...
in October 1966, there was an initial report from the I/O Subcommittee who had met at the
Oak Ridge National Laboratory
Oak Ridge National Laboratory (ORNL) is a federally funded research and development centers, federally funded research and development center in Oak Ridge, Tennessee, United States. Founded in 1943, the laboratory is sponsored by the United Sta ...
and the
University of Illinois
The University of Illinois Urbana-Champaign (UIUC, U of I, Illinois, or University of Illinois) is a public university, public land-grant university, land-grant research university in the Champaign–Urbana metropolitan area, Illinois, United ...
but had not yet made much progress. The two proposals from the previous meeting were again explored, and this time a new debate emerged about the use of
pointers
Pointer may refer to:
People with the name
* Pointer (surname), a surname (including a list of people with the name)
* Pointer Williams (born 1974), American former basketball player
Arts, entertainment, and media
* ''Pointer'' (journal), the ...
; ALGOL W used them only to refer to records, while van Wijngaarden's version could point to any object. To add confusion,
John McCarthy presented a new proposal for
operator overloading
In computer programming, operator overloading, sometimes termed ''operator ad hoc polymorphism'', is a specific case of polymorphism, where different operators have different implementations depending on their arguments. Operator overloading ...
and the ability to string together ''and'' and ''or'' constructs, and
Klaus Samelson
Klaus Samelson (21 December 1918 – 25 May 1980) was a German mathematician, physicist, and computer pioneer in the area of programming language translation and push-pop stack algorithms for sequential formula translation on computers.
Early ...
wanted to allow
anonymous function
In computer programming, an anonymous function (function literal, expression or block) is a function definition that is not bound to an identifier. Anonymous functions are often arguments being passed to higher-order functions or used for const ...
s. In the resulting confusion, there was some discussion of abandoning the entire effort. The confusion continued through what was supposed to be the ALGOL Y meeting in
Zandvoort
Zandvoort () is a municipality in the province of North Holland, Netherlands. It is one of the major beach resorts of the Netherlands; it has a long sandy beach. It is bordered by coastal dunes of Zuid-Kennemerland National Park and the Amsterdam ...
in May 1967.
Publication
A draft report was finally published in February 1968. This was met by "shock, horror and dissent", mostly due to the hundreds of pages of unreadable grammar and odd terminology.
Charles H. Lindsey attempted to figure out what "language was hidden inside of it", a process that took six man-weeks of effort. The resulting paper, "ALGOL 68 with fewer tears", was widely circulated. At a wider information processing meeting in
Zürich
Zurich (; ) is the list of cities in Switzerland, largest city in Switzerland and the capital of the canton of Zurich. It is in north-central Switzerland, at the northwestern tip of Lake Zurich. , the municipality had 448,664 inhabitants. The ...
in May 1968, attendees complained that the language was being forced upon them and that IFIP was "the true villain of this unreasonable situation" as the meetings were mostly closed and there was no formal feedback mechanism. Wirth and
Peter Naur
Peter Naur (25 October 1928 – 3 January 2016) was a Danish computer science pioneer and 2005 Turing Award winner. He is best remembered as a contributor, with John Backus, to the Backus–Naur form (BNF) notation used in describing the syntax ...
formally resigned their authorship positions in WG2.1 at that time.
The next WG2.1 meeting took place in
Tirrenia in June 1968. It was supposed to discuss the release of compilers and other issues, but instead devolved into a discussion on the language. van Wijngaarden responded by saying (or threatening) that he would release only one more version of the report. By this point Naur, Hoare, and Wirth had left the effort, and several more were threatening to do so. Several more meetings followed,
North Berwick
North Berwick (; ) is a seaside resort, seaside town and former royal burgh in East Lothian, Scotland. It is situated on the south shore of the Firth of Forth, approximately east-northeast of Edinburgh. North Berwick became a fashionable holi ...
in August 1968, Munich in December which produced the release of the official Report in January 1969 but also resulted in a contentious Minority Report being written. Finally, at
Banff, Alberta
Banff is a resort town in Banff National Park, Alberta, Canada, in Alberta's Rockies along the Trans-Canada Highway, west of Calgary, east of Lake Louise, Alberta, Lake Louise, and above
Banff was the first municipality to incorporate within ...
in September 1969, the project was generally considered complete and the discussion was primarily on errata and a greatly expanded Introduction to the Report.
The effort took five years, burned out many of the greatest names in
computer science
Computer science is the study of computation, information, and automation. Computer science spans Theoretical computer science, theoretical disciplines (such as algorithms, theory of computation, and information theory) to Applied science, ...
, and on several occasions became deadlocked over issues both in the definition and the group as a whole. Hoare released a "Critique of ALGOL 68" almost immediately,
which has been widely referenced in many works. Wirth went on to further develop the ALGOL W concept and released this as Pascal in 1970.
Implementations
ALGOL 68-R
The first implementation of the standard, based on the late-1968 draft Report, was introduced by the
Royal Radar Establishment
The Royal Radar Establishment was a research centre in Malvern, Worcestershire in the United Kingdom. It was formed in 1953 as the Radar Research Establishment by the merger of the Air Ministry's Telecommunications Research Establishment (TRE ...
in the UK as
ALGOL 68-R
ALGOL 68-R was the first implementation of the Algorithmic Language ALGOL 68.
In December 1968, the report on the Algorithmic Language ALGOL 68 was published. On 20–24 July 1970 a working conference was arranged by the International Federati ...
in July 1970. This was, however, a subset of the full language, and
Barry Mailloux, the final editor of the Report, joked that "It is a question of morality. We have a Bible and you are sinning!"
This version nevertheless became very popular on the
ICL machines, and became a widely-used language in military coding, especially in the UK.
Among the changes in 68-R was the requirement for all variables to be declared before their first use. This had a significant advantage that it allowed the compiler to be one-pass, as space for the variables in the
activation record
In computer science, a call stack is a stack data structure that stores information about the active subroutines and inline blocks of a computer program. This type of stack is also known as an execution stack, program stack, control stack, run- ...
was set aside before it was used. However, this change also had the side-effect of demanding the PROCs be declared twice, once as a declaration of the types, and then again as the body of code. Another change was to eliminate the assumed VOID mode, an expression that returns no value (named a ''statement'' in other languages) and demanding the word VOID be added where it would have been assumed. Further, 68-R eliminated the explicit
parallel processing commands based on PAR.
[
]
Others
The first full implementation of the language was introduced in 1974 by CDC Netherlands for the Control Data
Control Data Corporation (CDC) was a mainframe and supercomputer company that in the 1960s was one of the nine major U.S. computer
A computer is a machine that can be Computer programming, programmed to automatically Execution (computing), ...
mainframe series. This saw limited use, mostly teaching in Germany and the Netherlands.
A version similar to 68-R was introduced from Carnegie Mellon University
Carnegie Mellon University (CMU) is a private research university in Pittsburgh, Pennsylvania, United States. The institution was established in 1900 by Andrew Carnegie as the Carnegie Technical Schools. In 1912, it became the Carnegie Institu ...
in 1976 as 68S, and was again a one-pass compiler based on various simplifications of the original and intended for use on smaller machines like the DEC PDP-11. It too was used mostly for teaching purposes.
A version for IBM
International Business Machines Corporation (using the trademark IBM), nicknamed Big Blue, is an American Multinational corporation, multinational technology company headquartered in Armonk, New York, and present in over 175 countries. It is ...
mainframes did not become available until 1978, when one was released from Cambridge University
The University of Cambridge is a Public university, public collegiate university, collegiate research university in Cambridge, England. Founded in 1209, the University of Cambridge is the List of oldest universities in continuous operation, wo ...
. This was "nearly complete". Lindsey released a version for small machines including the IBM PC
The IBM Personal Computer (model 5150, commonly known as the IBM PC) is the first microcomputer released in the List of IBM Personal Computer models, IBM PC model line and the basis for the IBM PC compatible ''de facto'' standard. Released on ...
in 1984.
Three open source Algol 68 implementations are known:
* a68g, GPLv3
The GNU General Public Licenses (GNU GPL or simply GPL) are a series of widely used free software licenses, or ''copyleft'' licenses, that guarantee end users the freedom to run, study, share, or modify the software. The GPL was the first ...
, written by Marcel van der Veer.
* algol68toc, an open-source software
Open-source software (OSS) is Software, computer software that is released under a Open-source license, license in which the copyright holder grants users the rights to use, study, change, and Software distribution, distribute the software an ...
port of ALGOL 68RS
ALGOL 68RS is the second ALGOL 68 compiler written by I. F. Currie and J. D. Morrison, at the Royal Signals and Radar Establishment (RSRE).
Unlike the earlier ALGOL 68-R, it was designed to be portable, and implemented the language of the Revised ...
.
* experimental Algol68 frontend for GCC, written by Jose E. Marchesi.
Timeline
"A Shorter History of Algol 68"
ALGOL 68 – 3rd generation ALGOL
The Algorithmic Language ALGOL 68 Reports and Working Group members
* March 1968: Draft Report on the Algorithmic Language ALGOL 68 – Edited by: Adriaan van Wijngaarden, Barry J. Mailloux, John Peck and Cornelis H. A. Koster.
* October 1968: Penultimate Draft Report on the Algorithmic Language ALGOL 68 — Chapters 1-9 Chapters 10-12 — Edited by: A. van Wijngaarden, B.J. Mailloux, J. E. L. Peck and C. H. A. Koster.
* December 1968: Report on the Algorithmic Language ALGOL 68 — Offprint from Numerische Mathematik, 14, 79-218 (1969); Springer-Verlag. — Edited by: A. van Wijngaarden, B. J. Mailloux, J. E. L. Peck and C. H. A. Koster.
* March 1970: Minority report, ALGOL Bulletin AB31.1.1 — signed by Edsger Dijkstra
Edsger Wybe Dijkstra ( ; ; 11 May 1930 – 6 August 2002) was a Dutch computer scientist, programmer, software engineer, mathematician, and science essayist.
Born in Rotterdam in the Netherlands, Dijkstra studied mathematics and physics and the ...
, Fraser Duncan, Jan Garwick, Tony Hoare
Sir Charles Antony Richard Hoare (; born 11 January 1934), also known as C. A. R. Hoare, is a British computer scientist who has made foundational contributions to programming languages, algorithms, operating systems, formal verification, and ...
, Brian Randell
Brian Randell (born 1936) is a British computer scientist, and emeritus professor at the School of Computing, Newcastle University, United Kingdom. He specialises in research into software fault tolerance and dependability, and is a noted ...
, Gerhard Seegmüller, Wlad Turski, and Mike Woodger.
* September 1973: Revised Report on the Algorithmic Language Algol 68 — Springer-Verlag 1976 — Edited by: A. van Wijngaarden, B. Mailloux, J. Peck, K. Koster, Michel Sintzoff, Charles H. Lindsey, Lambert Meertens and Richard G. Fisker.
* other WG 2.1 members active in ALGOL 68 design: Friedrich L. Bauer
Friedrich Ludwig "Fritz" Bauer (10 June 1924 – 26 March 2015) was a German pioneer of computer science and professor at the Technical University of Munich.
Life
Bauer earned his Abitur in 1942 and served in the Wehrmacht during World War ...
• Hans Bekic • Gerhard Goos • Peter Zilahy Ingerman • Peter Landin
Peter John Landin (5 June 1930 – 3 June 2009) was a British computer scientist. He was one of the first to realise that the lambda calculus could be used to model a programming language, an insight that is essential to the development of both ...
• John McCarthy • Jack Merner • Peter Naur
Peter Naur (25 October 1928 – 3 January 2016) was a Danish computer science pioneer and 2005 Turing Award winner. He is best remembered as a contributor, with John Backus, to the Backus–Naur form (BNF) notation used in describing the syntax ...
• Manfred Paul • Willem van der Poel • Doug Ross • Klaus Samelson
Klaus Samelson (21 December 1918 – 25 May 1980) was a German mathematician, physicist, and computer pioneer in the area of programming language translation and push-pop stack algorithms for sequential formula translation on computers.
Early ...
• Niklaus Wirth
Niklaus Emil Wirth ( IPA: ) (15 February 1934 – 1 January 2024) was a Swiss computer scientist. He designed several programming languages, including Pascal, and pioneered several classic topics in software engineering. In 1984, he won the Tu ...
• Nobuo Yoneda.
Timeline of standardization
1968: On 20 December 1968, the "Final Report" (MR 101) was adopted by the Working Group, then subsequently approved by the General Assembly of UNESCO
The United Nations Educational, Scientific and Cultural Organization (UNESCO ) is a List of specialized agencies of the United Nations, specialized agency of the United Nations (UN) with the aim of promoting world peace and International secur ...
's IFIP for publication. Translations of the standard were made for Russian
Russian(s) may refer to:
*Russians (), an ethnic group of the East Slavic peoples, primarily living in Russia and neighboring countries
*A citizen of Russia
*Russian language, the most widely spoken of the Slavic languages
*''The Russians'', a b ...
, German
German(s) may refer to:
* Germany, the country of the Germans and German things
**Germania (Roman era)
* Germans, citizens of Germany, people of German ancestry, or native speakers of the German language
** For citizenship in Germany, see also Ge ...
, French and Bulgarian, and then later Japanese and Chinese. The standard was also made available in Braille
Braille ( , ) is a Tactile alphabet, tactile writing system used by blindness, blind or visually impaired people. It can be read either on embossed paper or by using refreshable braille displays that connect to computers and smartphone device ...
.
1984: TC 97 considered ALGOL 68 for standardisation as "New Work Item" TC97/N164
http://std.dkuug.dk/JTC1/sc22/sc22arc1.txt]. West Germany, Belgium, Netherlands, USSR and Czechoslovakia willing to participate in preparing the standard but the USSR and Czechoslovakia "were not the right kinds of member of the right ISO committee
and Algol 68's ISO standardisation stalle
1988: Subsequently ALGOL 68 became one of the GOST
GOST () refers to a set of international technical standards maintained by the Euro-Asian Council for Standardization, Metrology and Certification (EASC), a regional standards organization operating under the auspices of the Commonwealth of I ...
standards in Russia.
* GOST 27974-88 Programming language ALGOL 68 — Язык программирования АЛГОЛ 68
* GOST 27975-88 Programming language ALGOL 68 extended — Язык программирования АЛГОЛ 68 расширенный
Notable language elements
Bold symbols and reserved words
The standard language contains about sixty reserved words, typically bolded in print, and some with "brief symbol" equivalents:
MODE, OP, PRIO, PROC,
FLEX, HEAP, LOC, LONG, REF, SHORT,
BITS, BOOL, BYTES, CHAR, COMPL, INT, REAL, SEMA, STRING, VOID,
CHANNEL, FILE, FORMAT, STRUCT, UNION,
AT "@", EITHER r0, IS ":=:", ISNT IS NOT r0 ":/=:" ":≠:", OF "→" r0, TRUE, FALSE, EMPTY, NIL "○", SKIP "~",
CO "¢", COMMENT "¢", PR, PRAGMAT,
CASE ~ IN ~ OUSE ~ IN ~ OUT ~ ESAC "( ~ , ~ , : ~ , ~ , ~ )",
FOR ~ FROM ~ TO ~ BY ~ WHILE ~ DO ~ OD,
IF ~ THEN ~ ELIF ~ THEN ~ ELSE ~ FI "( ~ , ~ , : ~ , ~ , ~ )",
PAR BEGIN ~ END "( ~ )", GO TO, GOTO, EXIT "□" r0.
Units: Expressions
The basic language construct is the ''unit''. A unit may be a ''formula'', an ''enclosed clause'', a ''routine text'' or one of several technically needed constructs (assignation, jump, skip, nihil). The technical term ''enclosed clause'' unifies some of the inherently bracketing constructs known as ''block'', ''do statement'', ''switch statement'' in other contemporary languages. When keywords are used, generally the reversed character sequence of the introducing keyword is used for terminating the enclosure, e.g. ( IF ~ THEN ~ ELSE ~ FI, CASE ~ IN ~ OUT ~ ESAC, FOR ~ WHILE ~ DO ~ OD ). This Guarded Command syntax was reused by Stephen Bourne in the common Unix
Unix (, ; trademarked as UNIX) is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, a ...
Bourne shell
The Bourne shell (sh) is a shell command-line interpreter for computer operating systems. It first appeared on Version 7 Unix, as its default shell. Unix-like systems continue to have /bin/sh—which will be the Bourne shell, or a symbolic lin ...
. An expression may also yield a ''multiple value'', which is constructed from other values by a ''collateral clause''. This construct just looks like the parameter pack of a procedure call.
mode: Declarations
The basic data type
In computer science and computer programming, a data type (or simply type) is a collection or grouping of data values, usually specified by a set of possible values, a set of allowed operations on these values, and/or a representation of these ...
s (called mode
s in Algol 68 parlance) are real
, int
, compl
(complex number
In mathematics, a complex number is an element of a number system that extends the real numbers with a specific element denoted , called the imaginary unit and satisfying the equation i^= -1; every complex number can be expressed in the for ...
), bool
, char
, bits
and bytes
. For example:
INT n = 2;
CO n is fixed as a constant of 2. CO
INT m := 3;
CO m is a newly created local ''variable'' whose value is initially set to 3. CO
CO This is short for ref int m = loc int := 3; CO
REAL avogadro = 6.0221415⏨23; CO Avogadro number CO
long long real long long pi = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510;
COMPL square root of minus one = 0 ⊥ 1;
However, the declaration REAL x;
is just syntactic sugar
In computer science, syntactic sugar is syntax within a programming language that is designed to make things easier to read or to express. It makes the language "sweeter" for human use: things can be expressed more clearly, more concisely, or in an ...
for REF REAL x = LOC REAL;
. That is, x
is really the ''constant identifier'' for a ''reference to'' a newly generated local REAL variable.
Furthermore, instead of defining both float
and double
, or int
and long
and short
, etc., ALGOL 68 provides ''modifiers'', so that the presently common double
would be written as LONG REAL or LONG LONG REAL instead, for example. The ''prelude constants'' max real
and min long int
are provided to adapt programs to different implementations.
All variables need to be declared, but declaration does not have to precede the first use.
primitive-declarer: INT, REAL, COMPL, COMPLEXG, BOOL, CHAR, STRING, BITS, BYTES, FORMAT, FILE, PIPEG, CHANNEL, SEMA
* BITS – a "packed vector" of BOOL.
* BYTES – a "packed vector" of CHAR.
* STRING – a FLEXible array of CHAR.
* SEMA – a SEMAphore which can be initialised with the OPerator LEVEL.
Complex types can be created from simpler ones using various type constructors:
* REF ''mode'' – a reference to a value of type ''mode'', similar to & in C/C++ and REF in Pascal
* STRUCT – used to build structures, like STRUCT in C/C++ and RECORD in Pascal
* UNION – used to build unions, like in C/C++ and Pascal
* PROC – used to specify procedures, like functions in C/C++ and procedures/functions in Pascal
Other declaration symbols include: FLEX, HEAP, LOC, REF, LONG, SHORT, EVENTS
* FLEX – declare the array to be flexible, i.e. it can grow in length on demand.
* HEAP – allocate variable some free space from the global heap.
* LOC – allocate variable some free space of the local stack.
* LONG – declare an INT, REAL or COMPL to be of a LONGer size.
* SHORT – declare an INT, REAL or COMPL to be of a SHORTer size.
A name for a mode (type) can be declared using a MODE declaration,
which is similar to TYPEDEF in C/C++ and TYPE in Pascal:
INT max=99;
MODE NEWMODE = :90:max]STRUCT (
LONG REAL a, b, c, SHORT INT i, j, k, REF REAL r
);
This is similar to the following C code:
const int max=99;
typedef struct newmode +1max+1];
For ALGOL 68, only the NEWMODE mode-indication appears to the left of the equals symbol, and most notably the construction is made, and can be read, from left to right without regard to priorities. Also, the lower bound of Algol 68 arrays is one by default, but can be any integer from -''max int'' to ''max int''.
Mode declarations allow types to be Recursive data type, recursive: defined directly or indirectly in terms of themselves.
This is subject to some restrictions – for instance, these declarations are illegal:
MODE A = REF A
MODE A = STRUCT (A a, B b)
MODE A = PROC (A a) A
while these are valid:
MODE A = STRUCT (REF A a, B b)
MODE A = PROC (REF A a) REF A
Coercions: casting
The coercions produce a coercee from a coercend according to three criteria: the a priori mode of the coercend before the application of any coercion, the a posteriori mode of the coercee required after those coercions, and the syntactic position or "sort" of the coercee. Coercions may be cascaded.
The six possible coercions are termed ''deproceduring'', ''dereferencing'', ''uniting'', ''widening'', ''rowing'', and ''voiding''. Each coercion, except for ''uniting'', prescribes a corresponding dynamic effect on the associated values. Hence, many primitive actions can be programmed implicitly by coercions.
Context strength – allowed coercions:
* soft – deproceduring
* weak – dereferencing or deproceduring, yielding a name
* meek – dereferencing or deproceduring
* firm – meek, followed by uniting
* strong – firm, followed by widening, rowing or voiding
Coercion hierarchy with examples
ALGOL 68 has a hierarchy of contexts which determine the kind of coercions available at a particular point in the program. These contexts are:
For more details about Primaries, Secondaries, Tertiary & Quaternaries refer to Operator precedence
In mathematics and computer programming, the order of operations is a collection of rules that reflect conventions about which operations to perform first in order to evaluate a given mathematical expression.
These rules are formalized with a ...
.
pr & co: Pragmats and Comments
Pragmats are directives in the program, typically hints to the compiler; in newer languages these are called "pragmas" (no 't'). e.g.
PRAGMAT heap=32 PRAGMAT
PR heap=32 PR
Comments can be inserted in a variety of ways:
¢ The original way of adding your 2 cents worth to a program ¢
COMMENT "bold" comment COMMENT
CO Style i comment CO
# Style ii comment #
£ This is a hash/pound comment for a UK keyboard £
Normally, comments cannot be nested in ALGOL 68. This restriction can be circumvented by using different comment delimiters (e.g. use hash only for temporary code deletions).
Expressions and compound statements
ALGOL 68 being an expression-oriented programming language
An expression-oriented programming language is a programming language in which every (or nearly every) construction is an expression and thus yields a value. The typical exceptions are macro definitions, preprocessor commands, and declarations ...
, the value returned by an assignment statement is a reference to the destination. Thus, the following is valid ALGOL 68 code:
REAL half pi, one pi; one pi := 2 * ( half pi := 2 * arc tan(1) )
This notion is present in C and Perl
Perl is a high-level, general-purpose, interpreted, dynamic programming language. Though Perl is not officially an acronym, there are various backronyms in use, including "Practical Extraction and Reporting Language".
Perl was developed ...
, among others. Note that as in earlier languages such as Algol 60
ALGOL 60 (short for ''Algorithmic Language 1960'') is a member of the ALGOL family of computer programming languages. It followed on from ALGOL 58 which had introduced code blocks and the begin and end pairs for delimiting them, representing a ...
and FORTRAN, spaces are allowed in identifiers, so that half pi
is a ''single'' identifier (thus avoiding the ''underscores'' versus ''camel case
The writing format camel case (sometimes stylized autological, autologically as camelCase or CamelCase, also known as camel caps or more formally as medial capitals) is the practice of writing phrases without spaces or punctuation and with cap ...
'' versus ''all lower-case'' issues).
As another example, to express the mathematical idea of a ''sum'' of f(i)
from i=1 to n, the following ALGOL 68 ''integer expression'' suffices:
(INT sum := 0; FOR i TO n DO sum +:= f(i) OD; sum)
Note that, being an integer expression, the former block of code can be used in ''any context where an integer value can be used''. A block of code returns the value of the last expression it evaluated; this idea is present in Lisp
Lisp (historically LISP, an abbreviation of "list processing") is a family of programming languages with a long history and a distinctive, fully parenthesized Polish notation#Explanation, prefix notation.
Originally specified in the late 1950s, ...
, among other languages.
Compound statements are all terminated by distinctive closing brackets:
*IF choice clauses:
IF condition THEN statements ELSE statements FI
"brief" form: ( condition , statements , statements )
IF condition1 THEN statements ELIF condition2 THEN statements ELSE statements FI
"brief" form: ( condition1 , statements , : condition2 , statements , statements )
This scheme not only avoids the dangling else
The dangling else is a problem in programming of parser generators in which an optional else clause in an if–then(–else) statement can make nested conditional statements ambiguous. Formally, the reference context-free grammar of the language ...
problem but also avoids having to use BEGIN
and END
in embedded statement
Statement or statements may refer to: Common uses
*Statement (computer science), the smallest standalone element of an imperative programming language
*Statement (logic and semantics), declarative sentence that is either true or false
*Statement, ...
sequences.
*CASE choice clauses:
CASE switch IN statements, statements,... OUT statements ESAC
"brief" form: ( switch , statements,statements,... , statements )
CASE switch1 IN statements, statements,... OUSE switch2 IN statements, statements,... OUT statements ESAC
"brief" form of CASE statement: ( switch1 , statements,statements,... , : switch2 , statements,statements,... , statements )
Choice clause example with ''Brief'' symbols:
PROC days in month = (INT year, month)INT:
(month,
31,
(year÷×4=0 ∧ year÷×100≠0 ∨ year÷×400=0 , 29 , 28 ),
31, 30, 31, 30, 31, 31, 30, 31, 30, 31
);
Choice clause example with ''Bold'' symbols:
PROC days in month = (INT year, month)INT:
CASE month IN
31,
IF year MOD 4 EQ 0 AND year MOD 100 NE 0 OR year MOD 400 EQ 0 THEN 29 ELSE 28 FI,
31, 30, 31, 30, 31, 31, 30, 31, 30, 31
ESAC;
Choice clause example mixing ''Bold'' and ''Brief'' symbols:
PROC days in month = (INT year, month)INT:
CASE month IN
¢Jan¢ 31,
¢Feb¢ ( year MOD 4 = 0 AND year MOD 100 ≠ 0 OR year MOD 400 = 0 , 29 , 28 ),
¢Mar¢ 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ¢ to Dec. ¢
ESAC;
Algol68 allowed the switch to be of either type INT ''or'' (uniquely) UNION. The latter allows the enforcing strong typing
In computer programming, one of the many ways that programming languages are colloquially classified is whether the language's type system makes it strongly typed or weakly typed (loosely typed). However, there is no precise technical definition o ...
onto UNION variables. cf. union below for example.
* do loop clause:
FOR index FROM first BY increment TO last WHILE condition DO statements OD
The minimum form of a "loop clause" is thus: DO statements OD
This was considered ''the'' "universal" loop, the full syntax is:
FOR i FROM 1 BY -22 TO -333 WHILE i×i≠4444 DO ~ OD
The construct have several unusual aspects:
* only the ''DO ~ OD'' portion was compulsory, in which case the loop will iterate indefinitely.
* thus the clause ''TO 100 DO ~ OD'', will iterate only 100 times.
* the WHILE "syntactic element" allowed a programmer to break from a FOR loop early. e.g.
INT sum sq:=0;
FOR i
WHILE
print(("So far:",i,newline));
sum sq≠70↑2
DO
sum sq+:=i↑2
OD
Subsequent "extensions" to the standard Algol68 allowed the TO syntactic element to be replaced with UPTO and DOWNTO to achieve a small optimisation. The same compilers also incorporated:
* UNTIL(C) – for late loop termination.
* FOREACH(S) – for working on arrays in parallel.
Further examples can be found in the code examples below.
struct, union & : Structures, unions and arrays
ALGOL 68 supports arrays
An array is a systematic arrangement of similar objects, usually in rows and columns.
Things called an array include:
{{TOC right
Music
* In twelve-tone and serial composition, the presentation of simultaneous twelve-tone sets such that the ...
with any number of dimensions, and it allows for the ''slicing'' of whole or partial rows or columns.
MODE VECTOR = :3 REAL; ''# vector MODE declaration (typedef) #''
MODE MATRIX = :3,1:3''REAL; ''# matrix MODE declaration (typedef) #''
VECTOR v1 := (1,2,3); ''# array variable initially (1,2,3) #''
[]REAL v2 = (4,5,6); ''# constant array, type equivalent to VECTOR, bounds are implied #''
OP + = (VECTOR a,b) VECTOR: ''# binary OPerator definition #''
(VECTOR out; FOR i FROM ⌊a TO ⌈a DO out := a b OD; out);
MATRIX m := (v1, v2, v1+v2);
print ((m 2:); ''# a slice of the 2nd and 3rd columns #''
Matrices can be sliced either way, e.g.:
REF VECTOR row = m , ''# define a REF (pointer) to the 2nd row #''
REF VECTOR col = m 2 ''# define a REF (pointer) to the 2nd column #''
ALGOL 68 supports multiple field structures (STRUCT) and united modes. Reference variables may point to any MODE including array slices and structure fields.
For an example of all this, here is the traditional linked list declaration:
MODE NODE = UNION (VOID, REAL, INT, COMPL, STRING),
LIST = STRUCT (NODE val, REF LIST next);
Usage example for UNION CASE of ''NODE'':
proc: Procedures
Procedure (PROC) declarations require type specifications for both the parameters and the result (VOID if none):
PROC max of real = (REAL a, b) REAL:
IF a > b THEN a ELSE b FI;
or, using the "brief" form of the conditional statement:
PROC max of real = (REAL a, b) REAL: (a>b , a , b);
The return value of a proc
is the value of the last expression evaluated in the procedure. References to procedures (ref proc) are also permitted. Call-by-reference parameters are provided by specifying references (such as ref real
) in the formal argument list. The following example defines a procedure that applies a function (specified as a parameter) to each element of an array:
PROC apply = (REF [] REAL a, PROC (REAL) REAL f):
FOR i FROM LWB a TO UPB a DO a := f(a OD
This simplicity of code was unachievable in ALGOL 68's predecessor ALGOL 60
ALGOL 60 (short for ''Algorithmic Language 1960'') is a member of the ALGOL family of computer programming languages. It followed on from ALGOL 58 which had introduced code blocks and the begin and end pairs for delimiting them, representing a ...
.
op: Operators
The programmer may define new operators
Operator may refer to:
Mathematics
* A symbol indicating a mathematical operation
* Logical operator or logical connective in mathematical logic
* Operator (mathematics), mapping that acts on elements of a space to produce elements of another ...
and ''both'' those and the pre-defined ones may be overloaded and their priorities may be changed by the coder. The following example defines operator MAX
with both dyadic and monadic versions (scanning across the elements of an array).
PRIO MAX = 9;
OP MAX = (INT a,b) INT: ( a>b , a , b );
OP MAX = (REAL a,b) REAL: ( a>b , a , b );
OP MAX = (COMPL a,b) COMPL: ( ABS a > ABS b , a , b );
OP MAX = ([]REAL a) REAL:
(REAL out := a[LWB a];
FOR i FROM LWB a + 1 TO UPB a DO ( a[i]>out , out:=a ) OD;
out)
Array, Procedure, Dereference and coercion operations
These are technically not operators, rather they are considered
units associated with names
Monadic operators
Dyadic operators with associated priorities
Specific details:
* Tertiaries include names NIL and ○.
* LWS: In Algol68 r0 the operators LWS and ⎩ ... both return TRUE if the ''lower state'' of the dimension of an array is fixed.
* The UPS and ⎧ operators are similar on the ''upper state''.
* The LWB and UPB operators are automatically available on UNIONs of different orders (and MODEs) of arrays. eg. UPB of
Assignation and identity relations, etc.
These are technically not operators, rather they are considered
units associated with names
Note: Quaternaries include names SKIP and ~.
(alternatively ) tests if two pointers are equal; (alternatively ) tests if they are unequal.
=Why and are needed
=
Consider trying to compare two pointer values, such as the following variables, declared as pointers-to-integer:
: REF INT ip, jp
Now consider how to decide whether these two are pointing to the same location, or whether one of them is pointing to NIL. The following expression
: ip = jp
will dereference both pointers down to values of type , and compare those, since the operator is defined for , but not . It is ''not legal'' to define for operands of type and at the same time, because then calls become ambiguous, due to the implicit coercions that can be applied: should the operands be left as and that version of the operator called? Or should they be dereferenced further to and that version used instead? Therefore the following expression can never be made legal:
: ip = NIL
Hence the need for separate constructs not subject to the normal coercion rules for operands to operators. But there is a gotcha. The following expressions:
: ip :=: jp
: ip :=: NIL
while legal, will probably not do what might be expected. They will always return , because they are comparing the ''actual addresses of the variables ''ip
'' and ''jp
'', rather than what they point to''. To achieve the right effect, one would have to write
: ip :=: REF INT(jp)
: ip :=: REF INT(NIL)
Special characters
:
Most of Algol's "special" characters (⊂, ≡, ␣, ×, ÷, ≤, ≥, ≠, ¬, ⊃, ≡, ∨, ∧, →, ↓, ↑, ⌊, ⌈, ⎩, ⎧, ⊥, ⏨, ¢, ○ and □) can be found on the IBM 2741 keyboard with the APL "golf-ball" print head inserted; these became available in the mid-1960s while ALGOL 68 was being drafted. These characters are also part of the Unicode
Unicode or ''The Unicode Standard'' or TUS is a character encoding standard maintained by the Unicode Consortium designed to support the use of text in all of the world's writing systems that can be digitized. Version 16.0 defines 154,998 Char ...
standard and most of them are available in several popular font
In metal typesetting, a font is a particular size, weight and style of a ''typeface'', defined as the set of fonts that share an overall design.
For instance, the typeface Bauer Bodoni (shown in the figure) includes fonts " Roman" (or "regul ...
s.
transput: Input and output
Transput is the term used to refer to ALGOL 68's input and output facilities. It includes pre-defined procedures for unformatted, formatted and binary transput. Files and other transput devices are handled in a consistent and machine-independent manner. The following example prints out some unformatted output to the standard output device:
print ((newpage, "Title", newline, "Value of i is ",
i, "and x is ", x newline))
Note the predefined procedures newpage
and newline
passed as arguments.
Books, channels and files
The TRANSPUT is considered to be of BOOKS, CHANNELS and FILES:
* Books are made up of pages, lines and characters, and may be backed up by files.
** A specific book can be located by name with a call to match
.
* CHANNELs correspond to physical devices. e.g. card punches and printers.
** Three standard channels are distinguished: ''stand in'' channel, ''stand out'' channel, ''stand back'' channel.
* A FILE is a means of communicating between a program and a book that has been opened via some channel.
** The MOOD of a file may be read, write, char, bin, and opened.
** transput procedures include: establish, create, open, associate, lock, close, scratch
.
** position enquires: char number, line number, page number
.
** layout routines include:
***space
, backspace
, newline
, newpage
.
***get good line, get good page, get good book
, and PROC set=(REF FILE f, INT page,line,char)VOID:
** A file has event routines. e.g. on logical file end, on physical file end, on page end, on line end, on format end, on value error, on char error
.
formatted transput
"Formatted transput" in ALGOL 68's transput has its own syntax and patterns (functions), with FORMATs embedded between two $ characters.
Examples:
printf (($2l"The sum is:"x, g(0)$, m + n)); ¢ prints the same as: ¢
print ((new line, new line, "The sum is:", space, whole (m + n, 0))
par: Parallel processing
''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 semaphore
Semaphore (; ) is the use of an apparatus to create a visual signal transmitted over distance. A semaphore can be performed with devices including: fire, lights, flags, sunlight, and moving arms. Semaphores can be used for telegraphy when arra ...
s. In A68G the parallel actions are mapped to threads when available on the hosting operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
. 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(("Yak...",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
Miscellaneous
For its technical intricacies, ALGOL 68 needs a cornucopia of methods to deny the existence of something:
SKIP, "~" or "?"C – an undefined value always syntactically valid,
EMPTY – the only value admissible to VOID, needed for selecting VOID in a UNION,
VOID – syntactically like a MODE, but not one,
NIL or "○" – a name not denoting anything, of an unspecified reference mode,
() or specifically :0''INT – a ''vacuum'' is an empty array (here specifically of MODE []INT).
''undefined'' – a standards reports procedure raising an exception in the runtime system.
ℵ – Used in the standards report to inhibit type introspection, introspection of certain types. e.g. SEMA
The term NIL IS ''var'' always evaluates to TRUE for any variable (but see above for correct use of IS :/=:), whereas it is not known to which value a comparison ''x'' < SKIP evaluates for any integer ''x''.
ALGOL 68 leaves intentionally undefined what happens in case of integer overflow
In computer programming, an integer overflow occurs when an arithmetic operation on integers attempts to create a numeric value that is outside of the range that can be represented with a given number of digits – either higher than the maximu ...
, the integer bit representation, and the degree of numerical accuracy for floating point.
Both official reports included some advanced features that were not part of the standard language. These were indicated with an ℵ and considered effectively private. Examples include "≮" and "≯" for templates, the OUTTYPE/INTYPE for crude duck typing
In computer programming, duck typing is an application of the duck test—"If it walks like a duck and it quacks like a duck, then it must be a duck"—to determine whether an object can be used for a particular purpose. With nominative ...
, and the STRAIGHTOUT and STRAIGHTIN operators for "straightening" nested arrays and structures
Examples of use
Code sample
This sample program implements the Sieve of Eratosthenes
In mathematics, the sieve of Eratosthenes is an ancient algorithm for finding all prime numbers up to any given limit.
It does so by iteratively marking as composite number, composite (i.e., not prime) the multiples of each prime, starting with ...
to find all the prime number
A prime number (or a prime) is a natural number greater than 1 that is not a Product (mathematics), product of two smaller natural numbers. A natural number greater than 1 that is not prime is called a composite number. For example, 5 is prime ...
s that are less than 100. NIL is the ALGOL 68 analogue of the ''null pointer'' in other languages. The notation ''x'' OF ''y'' accesses a member ''x'' of a STRUCT ''y''.
BEGIN # Algol-68 prime number sieve, functional style #
PROC error = (STRING s) VOID:
(print(( newline, " error: ", s, newline)); GOTO stop);
PROC one to = (INT n) LIST:
(PROC f = (INT m,n) LIST: (m>n , NIL , cons(m, f(m+1,n))); f(1,n));
MODE LIST = REF NODE;
MODE NODE = STRUCT (INT h, LIST t);
PROC cons = (INT n, LIST l) LIST: HEAP NODE := (n,l);
PROC hd = (LIST l) INT: ( l IS NIL , error("hd NIL"); SKIP , h OF l );
PROC tl = (LIST l) LIST: ( l IS NIL , error("tl NIL"); SKIP , t OF l );
PROC show = (LIST l) VOID: ( l ISNT NIL , print((" ",whole(hd(l),0))); show(tl(l)));
PROC filter = (PROC (INT) BOOL p, LIST l) LIST:
IF l IS NIL THEN NIL
ELIF p(hd(l)) THEN cons(hd(l), filter(p,tl(l)))
ELSE filter(p, tl(l))
FI;
PROC sieve = (LIST l) LIST:
IF l IS NIL THEN NIL
ELSE
PROC not multiple = (INT n) BOOL: n MOD hd(l) ~= 0;
cons(hd(l), sieve( filter( not multiple, tl(l) )))
FI;
PROC primes = (INT n) LIST: sieve( tl( one to(n) ));
show( primes(100) )
END
Operating systems written in ALGOL 68
* Cambridge CAP computer – All procedures constituting the operating system were written in ALGOL 68C
ALGOL 68C is an imperative computer programming language, a dialect of ALGOL 68, that was developed by Stephen R. Bourne and Michael Guy to program the Cambridge Algebra System (CAMAL). The initial compiler was written in the Princeton Synta ...
, although several other closely associated protected procedures, such as a paginator, are written in BCPL
BCPL ("Basic Combined Programming Language") is a procedural, imperative, and structured programming language. Originally intended for writing compilers for other languages, BCPL is no longer in common use. However, its influence is still f ...
.
* Eldon 3 – Developed at Leeds University
The University of Leeds is a public research university in Leeds, West Yorkshire, England. It was established in 1874 as the Yorkshire College of Science. In 1884, it merged with the Leeds School of Medicine (established 1831) and was renamed ...
for the ICL 1900
ICT 1900 was a family of mainframe computers released by International Computers and Tabulators (ICT) and later International Computers Limited (ICL) during the 1960s and 1970s. The 1900 series was notable for being one of the few non-American ...
was written in ALGOL 68-R
ALGOL 68-R was the first implementation of the Algorithmic Language ALGOL 68.
In December 1968, the report on the Algorithmic Language ALGOL 68 was published. On 20–24 July 1970 a working conference was arranged by the International Federati ...
.
* Flex machine
The Flex Computer System was developed by Michael Foster and Ian Currie of Royal Signals and Radar Establishment (RSRE) in Malvern, England, during the late 1970s and 1980s. It used a tagged storage scheme to implement a capability architect ...
– The hardware was custom and microprogrammable, with an operating system, (modular) compiler, editor, garbage collector and filing system all written in ALGOL 68RS
ALGOL 68RS is the second ALGOL 68 compiler written by I. F. Currie and J. D. Morrison, at the Royal Signals and Radar Establishment (RSRE).
Unlike the earlier ALGOL 68-R, it was designed to be portable, and implemented the language of the Revised ...
. The command shell Curt was designed to access typed data similar to Algol-68 modes.
* VME – S3 was the implementation language of the operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
VME. S3 was based on ALGOL 68 but with data types and operators aligned to those offered by the ICL 2900 Series
The ICL 2900 Series was a range of mainframe computer systems announced by the British manufacturer International Computers Limited on 9 October 1974. The company had started development under the name "New Range" immediately on its formation ...
.
Note: The Soviet Era computers Эльбрус-1 (Elbrus-1) and Эльбрус-2 were created using high-level language Эль-76 (AL-76), rather than the traditional assembly. Эль-76 resembles Algol-68, The main difference is the dynamic binding types in Эль-76 supported at the hardware level. Эль-76 is used for application, job control, system programming.
Applications
Both ALGOL 68C
ALGOL 68C is an imperative computer programming language, a dialect of ALGOL 68, that was developed by Stephen R. Bourne and Michael Guy to program the Cambridge Algebra System (CAMAL). The initial compiler was written in the Princeton Synta ...
and ALGOL 68-R
ALGOL 68-R was the first implementation of the Algorithmic Language ALGOL 68.
In December 1968, the report on the Algorithmic Language ALGOL 68 was published. On 20–24 July 1970 a working conference was arranged by the International Federati ...
are written in ALGOL 68, effectively making ALGOL 68 an application of itself. Other applications include:
* ELLA – a hardware description language and support toolset. Developed by the Royal Signals and Radar Establishment
The Royal Signals and Radar Establishment (RSRE) was a scientific research establishment within the Ministry of Defence (MoD) of the United Kingdom. It was located primarily at Malvern in Worcestershire, England. The RSRE motto was ''Ubique ...
during the 1980s and 1990s.
* RAF Strike Command
The Royal Air Force's Strike Command was the military formation which controlled the majority of the United Kingdom's bomber and fighter aircraft from 1968 until 2007 when it merged with Personnel and Training Command to form the single Air ...
System – "... 400K of error-free ALGOL 68-RT code was produced with three man-years of work. ..."
Libraries and APIs
* NAG Numerical Libraries
The NAG Numerical Library is a commercial software product developed and sold by The Numerical Algorithms Group Ltd. It is a software library of numerical-analysis routines, containing more than 1,900 mathematical and statistical algorithms. Are ...
– a software library
In computing, a library is a collection of resources that can be leveraged during software development to implement a computer program. Commonly, a library consists of executable code such as compiled functions and classes, or a library can ...
of numerical analysis
Numerical analysis is the study of algorithms that use numerical approximation (as opposed to symbolic computation, symbolic manipulations) for the problems of mathematical analysis (as distinguished from discrete mathematics). It is the study of ...
routines. Supplied in ALGOL 68 during the 1980s.
* TORRIX – a programming system for operations on vectors and matrices over arbitrary fields and of variable size by S. G. van der Meulen and M. Veldhorst.[Applications, libraries, and test suites — Software Preservation Group](_blank)
Softwarepreservation.org. Retrieved 21 July 2013.
Program representation
A feature of ALGOL 68, inherited from the ALGOL
ALGOL (; short for "Algorithmic Language") is a family of imperative computer programming languages originally developed in 1958. ALGOL heavily influenced many other languages and was the standard method for algorithm description used by the ...
tradition, is its different representations. Programs in the ''strict language'' (which is rigorously defined in the Report) denote production trees in the form of a sequence of grammar symbols, and should be represented using some ''representation language'', of which there are many and tailored to different purposes.
* Representation languages that are intended to describe algorithms in printed works are known as ''publication languages'' and typically make use of rich typography to denote bold words and operator indications.
* Representation languages that are intended to be used in compiler input, what we would call ''programming languages'', are limited by the restrictions imposed by input methods and character sets and have to resort to ''stropping regimes'' to distinguish between bold and non bold letters and digits.
* Representation languages that are intended to be both produced and consumed by computers, known as ''hardware languages'', would typically use a binary compact representation.
The Revised Report defines a ''reference language'' and it is recommended for representation languages that are intended to be read by humans to be close enough to the reference language so symbols can be distinguished "without further elucidation". These representation languages are called ''implementations of the reference language''.
For example, the construct in the strict language bold-begin-symbol could be represented as begin in a publication language, as in a programming language or as the bytes 0xC000 in some hardware language. Similarly, the strict language differs from symbol could be represented as ≠ or as /=.
ALGOL 68's reserved words are effectively in a different namespace
In computing, a namespace is a set of signs (''names'') that are used to identify and refer to objects of various kinds. A namespace ensures that all of a given set of objects have unique names so that they can be easily identified.
Namespaces ...
from identifiers, and spaces are allowed in identifiers in most stropping regimes, so this next fragment is legal:
INT a real int = 3 ;
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; # 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. QUOTE (single apostrophe quoting) was the original recommendation.
It may seem that RES stropping is a contradiction to the specification, as there are no reserved words in Algol 68. This is not so. In RES stropping the representation of the bold word (or keyword) begin is , and the representation of the identifier ''begin'' is . Note that the underscore character is just a representation artifact and not part of the represented identifier. In contrast, in non-stropped languages with reserved words, like for example C, it is not possible to represent an identifier , since the representation represents the identifier , not .
The following characters were recommended for portability, and termed "worthy characters" in th
Report on the Standard Hardware Representation of Algol 68
:
* Worthy Characters: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "#$%'()*+,-./:;<=>@ ,
This reflected a problem in the 1960s where some hardware didn't support lower-case, nor some other non-ASCII
ASCII ( ), an acronym for American Standard Code for Information Interchange, is a character encoding standard for representing a particular set of 95 (English language focused) printable character, printable and 33 control character, control c ...
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."
* Base characters: "Worthy characters" are a subset of "base characters".
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.
# Next day date - English variant #
MODE DATE = STRUCT(INT day, STRING month, INT year);
PROC the day following = (DATE x) DATE:
IF day OF x < length of month (month OF x, year OF x)
THEN (day OF x + 1, month OF x, year OF x)
ELIF month OF x = "December"
THEN (1, "January", year OF x + 1)
ELSE (1, successor of month (month OF x), year OF x)
FI;
# Nachfolgetag - Deutsche Variante #
MENGE DATUM = TUPEL(GANZ tag, WORT monat, GANZ jahr);
FUNKTION naechster tag nach = (DATUM x) DATUM:
WENN tag VON x < monatslaenge(monat VON x, jahr VON x)
DANN (tag VON x + 1, monat VON x, jahr VON x)
WENNABER monat VON x = "Dezember"
DANN (1, "Januar", jahr VON x + 1)
ANSONSTEN (1, nachfolgemonat(monat VON x), jahr VON x)
ENDEWENN;
''Russian/Soviet example:''
In English Algol68's case statement reads CASE ~ IN ~ OUT ~ ESAC, in Cyrillic
The Cyrillic script ( ) is a writing system used for various languages across Eurasia. It is the designated national script in various Slavic, Turkic, Mongolic, Uralic, Caucasian and Iranic-speaking countries in Southeastern Europe, Ea ...
this reads выб ~ в ~ либо ~ быв.
Revisions
Except where noted (with a superscript), the language described above is that of the "Revised Report(r1)".
The language of the unrevised report
The original language (As per the "Final Report" r0) 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 (
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
In mathematics and computer science, currying is the technique of translating a function that takes multiple arguments into a sequence of families of functions, each taking a single argument.
In the prototypical example, one begins with a functi ...
): 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,
* ''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
ALGOL 68-R was the first implementation of the Algorithmic Language ALGOL 68.
In December 1968, the report on the Algorithmic Language ALGOL 68 was published. On 20–24 July 1970 a working conference was arranged by the International Federati ...
and top-down ''holes'', similar to the ENVIRON
and USING
clauses from ALGOL 68C
ALGOL 68C is an imperative computer programming language, a dialect of ALGOL 68, that was developed by Stephen R. Bourne and Michael Guy to program the Cambridge Algebra System (CAMAL). The initial compiler was written in the Princeton Synta ...
[Commentserrata]
/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).
So far, only partial parametrisation has been implemented, in Algol 68 Genie.
True ALGOL 68s specification and implementation timeline
The S3 language that was used to write the ICL VME
VME (''Virtual Machine Environment'') is a mainframe operating system developed by the UK company International Computers Limited (ICL, now part of the Fujitsu group). Originally developed in the 1970s (as VME/B, later VME 2900) to drive ICL's ...
operating system and much other system software on the ICL 2900 Series
The ICL 2900 Series was a range of mainframe computer systems announced by the British manufacturer International Computers Limited on 9 October 1974. The company had started development under the name "New Range" immediately on its formation ...
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 RRE was the first ALGOL 68 subset implementation, running on the ICL 1900
ICT 1900 was a family of mainframe computers released by International Computers and Tabulators (ICT) and later International Computers Limited (ICL) during the 1960s and 1970s. The 1900 series was notable for being one of the few non-American ...
. Based on the original language, the main subset restrictions were ''definition before use'' and no parallel processing. This compiler was popular in UK universities in the 1970s, where many computer science
Computer science is the study of computation, information, and automation. Computer science spans Theoretical computer science, theoretical disciplines (such as algorithms, theory of computation, and information theory) to Applied science, ...
students learnt ALGOL 68 as their first programming language; the compiler was renowned for good error messages.
ALGOL 68RS(RS) from 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 39, Multics
Multics ("MULTiplexed Information and Computing Service") is an influential early time-sharing operating system based on the concept of a single-level memory.Dennis M. Ritchie, "The Evolution of the Unix Time-sharing System", Communications of t ...
and 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(S) from Carnegie Mellon University
Carnegie Mellon University (CMU) is a private research university in Pittsburgh, Pennsylvania, United States. The institution was established in 1900 by Andrew Carnegie as the Carnegie Technical Schools. In 1912, it became the Carnegie Institu ...
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.
Cambridge
Cambridge ( ) is a List of cities in the United Kingdom, city and non-metropolitan district in the county of Cambridgeshire, England. It is the county town of Cambridgeshire and is located on the River Cam, north of London. As of the 2021 Unit ...
ALGOL 68C
ALGOL 68C is an imperative computer programming language, a dialect of ALGOL 68, that was developed by Stephen R. Bourne and Michael Guy to program the Cambridge Algebra System (CAMAL). The initial compiler was written in the Princeton Synta ...
(C) 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(G) 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."
Quotes
*''... The scheme of type composition adopted by C owes considerable debt to Algol 68, although it did not, perhaps, emerge in a form that Algol's adherents would approve of. The central notion I captured from Algol was a type structure based on atomic types (including structures), composed into arrays, pointers (references), and functions (procedures). Algol 68's concept of unions and casts also had an influence that appeared later.'' Dennis Ritchie
Dennis MacAlistair Ritchie (September 9, 1941 – October 12, 2011) was an American computer scientist. He created the C programming language and the Unix operating system and B language with long-time colleague Ken Thompson. Ritchie and Thomp ...
Apr 1993.
* ''... C does not descend from Algol 68 is true, yet there was influence, much of it so subtle that it is hard to recover even when I think hard. In particular, the union type (a late addition to C) does owe to A68, not in any details, but in the idea of having such a type at all. More deeply, the type structure in general and even, in some strange way, the declaration syntax (the type-constructor part) was inspired by A68. And yes, of course, "long".'' Dennis Ritchie
Dennis MacAlistair Ritchie (September 9, 1941 – October 12, 2011) was an American computer scientist. He created the C programming language and the Unix operating system and B language with long-time colleague Ken Thompson. Ritchie and Thomp ...
, 18 June 1988
*"Congratulations, your Master has done it" – Niklaus Wirth
Niklaus Emil Wirth ( IPA: ) (15 February 1934 – 1 January 2024) was a Swiss computer scientist. He designed several programming languages, including Pascal, and pioneered several classic topics in software engineering. In 1984, he won the Tu ...
*''The more I see of it, the more unhappy I become'' – E. W. Dijkstra, 1968
* '' ..it was said that A68's popularity was inversely proportional to ..the distance from Amsterdam'' – Guido van Rossum
Guido van Rossum (; born 31 January 1956) is a Dutch programmer. He is the creator of the Python programming language, for which he was the " benevolent dictator for life" (BDFL) until he stepped down from the position on 12 July 2018. He ...
* '' ..The best we could do was to send with it a minority report, stating our considered view that, "... as a tool for the reliable creation of sophisticated programs, the language was a failure." ..'' – C. A. R. Hoare in his Oct 1980 Turing Award
The ACM A. M. Turing Award is an annual prize given by the Association for Computing Machinery (ACM) for contributions of lasting and major technical importance to computer science. It is generally recognized as the highest distinction in the fi ...
Lecture
* ''" ..More than ever it will be required from an adequate programming tool that it assists, by structure, the programmer in the most difficult aspects of his job, viz. in the reliable creation of sophisticated programs. In this respect we fail to see how the language proposed here is a significant step forward: on the contrary, we feel that its implicit view of the programmer's task is very much the same as, say, ten years ago. This forces upon us the conclusion that, regarded as a programming tool, the language must be regarded as obsolete. ..'' 1968 Working Group minority report on 23 December 1968.
See also
* ALGOL 60
ALGOL 60 (short for ''Algorithmic Language 1960'') is a member of the ALGOL family of computer programming languages. It followed on from ALGOL 58 which had introduced code blocks and the begin and end pairs for delimiting them, representing a ...
* ALGOL Y
* ALGOL N
* ALGOL 68C
ALGOL 68C is an imperative computer programming language, a dialect of ALGOL 68, that was developed by Stephen R. Bourne and Michael Guy to program the Cambridge Algebra System (CAMAL). The initial compiler was written in the Princeton Synta ...
* C (programming language)
C (''pronounced'' '' – like the letter c'') is a general-purpose programming language. It was created in the 1970s by Dennis Ritchie and remains very widely used and influential. By design, C's features cleanly reflect the capabilities of ...
* C++
* Bourne shell
The Bourne shell (sh) is a shell command-line interpreter for computer operating systems. It first appeared on Version 7 Unix, as its default shell. Unix-like systems continue to have /bin/sh—which will be the Bourne shell, or a symbolic lin ...
* Bash (Unix shell)
In computing, Bash (short for "''Bourne Again SHell''") is an interactive command interpreter and command programming language developed for UNIX-like operating systems. Created in 1989 by Brian Fox for the GNU Project, it is supported by the F ...
* Steelman language requirements
Ada is a structured, statically typed, imperative, and object-oriented high-level programming language, inspired by Pascal and other languages. It has built-in language support for ''design by contract'' (DbC), extremely strong typing, explicit ...
* Ada (programming language)
Ada is a structured, statically typed, imperative, and object-oriented high-level programming language, inspired by Pascal and other languages. It has built-in language support for '' design by contract'' (DbC), extremely strong typing, exp ...
* Python (programming language)
Python is a high-level programming language, high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation.
Python is type system#DYNAMIC, dynamically type-checked a ...
References
Citations
Works cited
* Brailsford, D. F. and Walker, A. N., ''Introductory ALGOL 68 Programming'', Ellis Horwood/Wiley, 1979
* Lindsey, C. H. and van der Meulen, S. G., ''Informal Introduction to ALGOL 68'', North-Holland, 1971
*
* McGettrick, A. D., ''ALGOL 68, A First and Second Course'', Cambridge Univ. Press, 1978
* Peck, J. E. L., ''An ALGOL 68 Companion'', Univ. of British Columbia, October 1971
* Tanenbaum, A. S., ''A Tutorial on ALGOL 68'', Computing Surveys 8, 155-190, June 1976 and 9, 255-256, September 1977
* Woodward, P. M. and Bond, S. G., ''ALGOL 68-R Userssic
The Latin adverb ''sic'' (; ''thus'', ''so'', and ''in this manner'') inserted after a quotation indicates that the quoted matter has been transcribed or translated as found in the source text, including erroneous, archaic, or unusual spelling ...
Guide'', London, Her Majesty's Stationery Office, 1972
External links
Revised Report on the Algorithmic Language ALGOL 68
The official reference for users and implementors of the language (large pdf file, scanned from Algol Bulletin)
Hyperlinked HTML version of the Revised Report
''A Tutorial on Algol 68''
by Andrew S. Tanenbaum, in ''Computing Surveys'', Vol. 8, No. 2, June 1976, wit
Corrigenda
(Vol. 9, No. 3, September 1977)
Open source ALGOL 68 implementations, on SourceForge
Algol68 Standard Hardware representation (.pdf)
* ttp://www.computer-museum.ru/english/algol68.htm Algol 68 – 25 Years in the USSR
Система программ динамической поддержки для транслятора с Алгол 68
* McJones, Paul
"Algol 68 implementations and dialects"
''Software Preservation Group'', Computer History Museum
The Computer History Museum (CHM) is a computer museum in Mountain View, California. The museum presents stories and artifacts of Silicon Valley and the Information Age, and explores the Digital Revolution, computing revolution and its impact ...
, 2011-07-05
Web enabled ALGOL 68 compiler for small experiments
{{DEFAULTSORT:Algol 68
Algol programming language family
Academic programming languages
Articles with example ALGOL 68 code
Computer-related introductions in 1968
Procedural programming languages
Programming languages created in 1968
Systems programming languages
Programming languages