text:
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  and   pairs for delimiting them, representing a key advance in the rise of structured programming. ALGOL 60 was one of the first languages implementing function definitions (that could be invoked recursively). ALGOL 60 function definitions could be nested within one another (which was first introduced by any programming language), with lexical scope. It gave rise to many other languages, including CPL, PL/I, Simula, BCPL, B, Pascal, and C. Practically every computer of the era had a systems programming language based on ALGOL 60 concepts.

Niklaus Wirth based his own ALGOL W on ALGOL 60 before moving to develop Pascal. Algol-W was intended to be the next generation ALGOL but the ALGOL 68 committee decided on a design that was more complex and advanced rather than a cleaned simplified ALGOL 60. The official ALGOL versions are named after the year they were first published. ALGOL 68 is substantially different from ALGOL 60 and was criticised partially for being so, so that in general "ALGOL" refers to dialects of ALGOL 60.

Standardization
ALGOL 60 – with COBOL – were the first languages to seek standardization.
 * ISO 1538:1984 Programming languages – ALGOL 60 (stabilized)
 * ISO/TR 1672:1977 Hardware representation of ALGOL basic symbols ... (now withdrawn)

History
ALGOL 60 was used mostly by research computer scientists in the United States and in Europe. Its use in commercial applications was hindered by the absence of standard input/output facilities in its description and the lack of interest in the language by large computer vendors. ALGOL 60 did however become the standard for the publication of algorithms and had a profound effect on future language development.

John Backus developed the Backus normal form method of describing programming languages specifically for ALGOL 58. It was revised and expanded by Peter Naur for ALGOL 60, and at Donald Knuth's suggestion renamed Backus–Naur form.

Peter Naur: "As editor of the ALGOL Bulletin I was drawn into the international discussions of the language and was selected to be member of the European language design group in November 1959. In this capacity I was the editor of the ALGOL 60 report, produced as the result of the ALGOL 60 meeting in Paris in January 1960."

The following people attended the meeting in Paris (from January 11 to 16): Alan Perlis gave a vivid description of the meeting: "The meetings were exhausting, interminable, and exhilarating. One became aggravated when one's good ideas were discarded along with the bad ones of others. Nevertheless, diligence persisted during the entire period. The chemistry of the 13 was excellent."
 * Friedrich Ludwig Bauer, Peter Naur, Heinz Rutishauser, Klaus Samelson, Bernard Vauquois, Adriaan van Wijngaarden, and Michael Woodger (from Europe)
 * John Warner Backus, Julien Green, Charles Katz, John McCarthy, Alan Jay Perlis, and Joseph Henry Wegstein (from the USA).

The language originally did not include recursion. It was inserted into the specification at the last minute, against the wishes of some of the committee.

ALGOL 60 inspired many languages that followed it. Tony Hoare remarked: "Here is a language so far ahead of its time that it was not only an improvement on its predecessors but also on nearly all its successors."

ALGOL 60 implementations timeline
To date there have been at least 70 augmentations, extensions, derivations and sublanguages of ALGOL 60.

The Burroughs dialects included special system programming dialects such as ESPOL and NEWP.

Properties
ALGOL 60 as officially defined had no I/O facilities; implementations defined their own in ways that were rarely compatible with each other. In contrast, ALGOL 68 offered an extensive library of transput (ALGOL 68 parlance for input/output) facilities.

ALGOL 60 provided two evaluation strategies for parameter passing: the common call-by-value, and call-by-name. The procedure declaration specified, for each formal parameter, which was to be used: value specified for call-by-value, and omitted for call-by-name. Call-by-name has certain effects in contrast to call-by-reference. For example, without specifying the parameters as value or reference, it is impossible to develop a procedure that will swap the values of two parameters if the actual parameters that are passed in are an integer variable and an array that is indexed by that same integer variable. Think of passing a pointer to swap(i, A[i]) in to a function. Now that every time swap is referenced, it's reevaluated. Say i := 1 and A[i] := 2, so every time swap is referenced it'll return the other combination of the values ([1,2], [2,1], [1,2] and so on). A similar situation occurs with a random function passed as actual argument.

Call-by-name is known by many compiler designers for the interesting "thunks" that are used to implement it. Donald Knuth devised the "man or boy test" to separate compilers that correctly implemented "recursion and non-local references." This test contains an example of call-by-name.

ALGOL 60 Reserved words and restricted identifiers
There are 35 such reserved words in the standard Burroughs Large Systems sub-language:

There are 71 such restricted identifiers in the standard Burroughs Large Systems sub-language:

and also the names of all the intrinsic functions.

ALGOL 60
procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; comment The absolute greatest element of the matrix a, of size n by m,    is copied to y, and the subscripts of this element to i and k; begin integer p, q;    y := 0; i := k := 1; for p := 1 step 1 until n do for q := 1 step 1 until m do if abs(a[p, q]) > y then begin y := abs(a[p, q]); i := p; k := q                end end Absmax

Implementations differ in how the text in bold must be written. The word 'INTEGER', including the quotation marks, must be used in some implementations in place of integer, above, thereby designating it as a special keyword.

Following is an example of how to produce a table using Elliott 803 ALGOL:

FLOATING POINT ALGOL TEST' BEGIN REAL A,B,C,D' READ D' FOR A:= 0.0 STEP D UNTIL 6.3 DO  BEGIN PRINT PUNCH(3),££L??' B := SIN(A)' C := COS(A)' PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C' END' END'

ALGOL 60 family
Since ALGOL 60 had no I/O facilities, there is no portable hello world program in ALGOL. The following program could (and still will) compile and run on an ALGOL implementation for a Unisys A-Series mainframe, and is a straightforward simplification of code taken from The Language Guide at the University of Michigan-Dearborn Computer and Information Science Department Hello world! ALGOL Example Program page.

BEGIN FILE F(KIND=REMOTE); EBCDIC ARRAY E[0:11]; REPLACE E BY "HELLO WORLD!"; WRITE(F, *, E); END.

Where * etc. represented a format specification as used in FORTRAN, e.g.

A simpler program using an inline format:

An even simpler program using the Display statement:

An alternative example, using Elliott Algol I/O is as follows. Elliott Algol used different characters for "open-string-quote" and "close-string-quote", represented here by and.

Here's a version for the Elliott 803 Algol (A104) The standard Elliott 803 used 5-hole paper tape and thus only had upper case. The code lacked any quote characters so £ (pound sign) was used for open quote and ? (question mark) for close quote. Special sequences were placed in double quotes (e.g., £L?? produced a new line on the teleprinter).

HIFOLKS' BEGIN PRINT £HELLO WORLD£L??' END'

The ICT 1900 series Algol I/O version allowed input from paper tape or punched card. Paper tape 'full' mode allowed lower case. Output was to a line printer. Note use of '(', ')', and %. 'PROGRAM' (HELLO) 'BEGIN' 'COMMENT' OPEN QUOTE IS '(', CLOSE IS ')', PRINTABLE SPACE HAS TO               BE WRITTEN AS % BECAUSE SPACES ARE IGNORED; WRITE TEXT('('HELLO%WORLD')'); 'END' 'FINISH'

LEAP
LEAP is an extension to the ALGOL 60 programming language which provides an associative memory of triples. The three items in a triple denote the association that an Attribute of an Object has a specific Value. LEAP was created by Jerome Feldman (University of California Berkeley) and Paul Rovner (MIT Lincoln Lab) in 1967. LEAP was also implemented in SAIL.

title: ALGOL 60


text:
ALGOL 68

ALGOL 68 (short for Algorithmic Language 1968) is an imperative programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and more rigorously defined syntax and semantics.

The complexity of the language's definition, which runs to several hundred pages filled with non-standard terminology, made compiler 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 where it was popular on International Computers Limited (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 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 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 (IFIP) IFIP Working Group 2.1 on Algorithmic Languages and Calculi. On December 20, 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, invented by Adriaan van Wijngaarden. Van Wijngaarden grammars use a context-free grammar 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 standards 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:

 * 1) Completeness and clarity of description
 * 2) Orthogonality of design
 * 3) Security
 * 4) Efficiency:
 * 5) * Static mode checking
 * 6) * Mode-independent parsing
 * 7) * Independent compiling
 * 8) * Loop optimizing
 * 9) * Representations – in minimal & larger character sets

ALGOL 68 has been criticized, most prominently by some members of its design committee such as C. A. R. Hoare and Edsger Dijkstra, for abandoning the simplicity of ALGOL 60, becoming a vehicle for complex or overly general ideas, and doing little to make the compiler writer's task easier, in contrast to deliberately simple contemporaries (and competitors) such as C, S-algol and Pascal.

In 1970, ALGOL 68-R became the first working compiler for ALGOL 68.

In the 1973 revision, certain features — such as proceduring, gommas and formal bounds — were omitted. C.f. The language of the unrevised report.r0

Though European defence agencies (in Britain Royal Signals and Radar Establishment (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, details of which can be found in Andrey Terekhov'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 (and thereby, to descendant Unix shells 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.

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.

Origins
ALGOL 68, as the name implies, is a follow-on to the ALGOL language that was first formalized in 1960. That same year the International Federation for Information Processing (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 an ALGOL Y, which would have the ability to modify its own programs in the style of the language LISP.

Definition process
The first meeting of the ALGOL X group was held in Princeton University in May 1965. A report of the meeting noted two broadly supported themes, the introduction of strong typing and interest in Euler's concepts of 'trees' or 'lists' for handling collections.

At the second meeting in October in France, three formal proposals were presented, Niklaus Wirth's ALGOL W 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 in October 1966, there was an initial report from the I/O Subcommittee who had met at the Oak Ridge National Laboratory and the University of Illinois 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; 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 and the ability to string together and or constructs, and Klaus Samelson wanted to allow anonymous functions. 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 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 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 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 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 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, 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.

ALGOL 68-R
The first implementation of the standard, based on the late-1968 draft Report, was introduced by the Royal Radar Establishment in the UK as ALGOL 68-R 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 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 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 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 mainframes did not become available until 1978, when one was released from Cambridge University. This was "nearly complete". Lindsey released a version for small machines including the IBM PC in 1984.

Three open source Algol 68 implementations are known:
 * a68g, GPLv3, written by Marcel van der Veer.
 * algol68toc, an open-source software port of ALGOL 68RS.
 * 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, Fraser Duncan, Jan Garwick, Tony Hoare, Brian Randell, 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 • Hans Bekic • Gerhard Goos • Peter Zilahy Ingerman • Peter Landin • John McCarthy • Jack Merner • Peter Naur • Manfred Paul • Willem van der Poel • Doug Ross • Klaus Samelson • Niklaus Wirth • 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's IFIP for publication. Translations of the standard were made for Russian, German, French and Bulgarian, and then later Japanese and Chinese. The standard was also made available in Braille.

1984: TC 97 considered ALGOL 68 for standardisation as "New Work Item" TC97/N1642. 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 committees" and Algol 68's ISO standardisation stalled.

1988: Subsequently ALGOL 68 became one of the GOST standards in Russia.

 * GOST 27974-88 Programming language ALGOL 68 — Язык программирования АЛГОЛ 68
 * GOST 27975-88 Programming language ALGOL 68 extended — Язык программирования АЛГОЛ 68 расширенный

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 "@", EITHERr0, IS ":=:", ISNT IS NOTr0 ":/=:" ":≠:", 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 Bourne shell. 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 types (called s in Algol 68 parlance) are ,  ,   (complex number),  ,  ,   and. 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  is just syntactic sugar for. That is,  is really the constant identifier for a reference to a newly generated local REAL variable.

Furthermore, instead of defining both  and , or   and   and  , etc., ALGOL 68 provides modifiers, so that the presently common   would be written as LONG REAL or LONG LONG REAL instead, for example. The prelude constants  and   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: For some examples, see Comparison of ALGOL 68 and C++.
 * 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 = [0:9][0:max]STRUCT (     LONG REAL a, b, c, SHORT INT i, j, k, REF REAL r  );

This is similar to the following C code:

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: 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.

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 £ This is a hash/pound comment for a UK keyboard £
 * 1) Style ii comment #

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, 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, among others. Note that as in earlier languages such as Algol 60 and FORTRAN, spaces are allowed in identifiers, so that  is a single identifier (thus avoiding the underscores versus camel case versus all lower-case issues).

As another example, to express the mathematical idea of a sum of  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, among other languages.

Compound statements are all terminated by distinctive closing brackets:

IF condition THEN statements [ ELSE statements ] FI "brief" form: ( condition | statements | statements )
 * IF choice clauses:

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 problem but also avoids having to use  and   in embedded statement sequences.

CASE switch IN statements, statements,... [ OUT statements ] ESAC "brief" form: ( switch | statements,statements,... | statements )
 * CASE choice clauses:

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 onto UNION variables. c.f. union below for example.

[ 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
 * do loop clause:

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: INT sum sq:=0; FOR i WHILE print(("So far:",i,newline)); sum sq≠70↑2 DO sum sq+:=i↑2 OD
 * 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.

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 with any number of dimensions, and it allows for the slicing of whole or partial rows or columns. MODE VECTOR = [1:3]   REAL;   # vector MODE declaration (typedef)  # MODE MATRIX = [1: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[i] := a[i]+b[i] 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[2,]; # 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  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 ) 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[i] := f(a[i]) OD

This simplicity of code was unachievable in ALGOL 68's predecessor ALGOL 60.

op: Operators
The programmer may define new operators 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  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[i] ) OD;      out)

Array, Procedure, Dereference and coercion operations
These are technically not operators, rather they are considered "units associated with names"

Dyadic operators with associated priorities
Specific details:
 * Tertiaries include names NIL and ○.
 * LWS: In Algol68r0 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 union([]int, [,]real, flex[,,,]char)

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:

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

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:

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:

while legal, will probably not do what might be expected. They will always return, because they are comparing the actual addresses of the variables   and  , rather than what they point to. To achieve the right effect, one would have to write

Special characters

 * [[Image:APL-keybd2.svg|600px|thumb|[[IBM 2741]] keyboard with APL symbols]]

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 standard and most of them are available in several popular fonts.

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[i] is ", x[i], newline))

Note the predefined procedures  and   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.
 * 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:.
 * position enquires:.
 * layout routines include:
 * , and
 * A file has event routines. e.g..
 * A file has event routines. e.g..

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 semaphores. In A68G the parallel actions are mapped to threads when available on the hosting operating system. In A68S a different paradigm of parallel processing was implemented (see below).

PROC eat = VOID: ( muffins-:=1; print(("Yum!",new line))), speak = VOID: ( words-:=1; print(("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 [1: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 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, 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, and the STRAIGHTOUT and STRAIGHTIN operators for "straightening" nested arrays and structures

Code sample
This sample program implements the Sieve of Eratosthenes to find all the prime numbers 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
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.
 * Cambridge CAP computer – All procedures constituting the operating system were written in ALGOL 68C, although several other closely associated protected procedures, such as a paginator, are written in BCPL.
 * Eldon 3 – Developed at Leeds University for the ICL 1900 was written in ALGOL 68-R.
 * Flex machine – The hardware was custom and microprogrammable, with an operating system, (modular) compiler, editor, garbage collector and filing system all written in ALGOL 68RS. 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 VME. S3 was based on ALGOL 68 but with data types and operators aligned to those offered by the ICL 2900 Series.

Applications
Both ALGOL 68C and ALGOL 68-R 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 during the 1980s and 1990s.
 * RAF Strike Command System – "... 400K of error-free ALGOL 68-RT code was produced with three man-years of work. ..."

Libraries and APIs

 * NAG Numerical Libraries – a software library of numerical analysis 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.

Program representation
A feature of ALGOL 68, inherited from the ALGOL tradition, is its different representations. There is a representation language used to describe algorithms in printed work, a strict language (rigorously defined in the Report), and an official reference language intended to be used in compiler input. The examples contain BOLD typeface words, this is the STRICT language. ALGOL 68's reserved words are effectively in a different namespace from identifiers, and spaces are allowed in identifiers, 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; # the STRICT language # 'INT'A REAL INT = 3; # QUOTE stropping style # .INT A REAL INT = 3; # POINT stropping style # INT a real int = 3; # UPPER stropping style # int a_real_int = 3; # RES stropping style, there are 61 accepted reserved words #

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

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

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

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): 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 and top-down holes, similar to the   and   clauses from ALGOL 68C
 * 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 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 RRE was the first ALGOL 68 subset implementation, running on the ICL 1900. 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 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 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 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 ALGOL 68C(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 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, 18 June 1988
 * "Congratulations, your Master has done it" – Niklaus Wirth
 * 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
 * [...] 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 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.

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: ALGOL 68


text:
Peacemaker (character)

Peacemaker is the name of a series of fictional characters originally owned by Charlton Comics and later acquired by DC Comics. The original Peacemaker first appeared in Fightin' 5 #40 (November 1966) and was created by writer Joe Gill and artist Pat Boyette.

John Cena portrayed the Christopher Smith version of Peacemaker in the 2021 DC Extended Universe film The Suicide Squad and the eponymous 2022 television series on HBO Max.

Publication history
The Peacemaker first appeared as a backup series in Charlton Comics' espionage-team title Fightin' 5 #40 (November 1966). When that series was canceled with issue #41, Peacemaker received his own title lasting five issues cover-dated March to November 1967, with Fightin' 5 as a backup series and later a low reprint run on the Modern Comics imprint. Some of penciler-inker Pat Boyette's artwork for a projected sixth issue later appeared online. Following Charlton Comics' demise in the mid-1980s, DC Comics acquired The Peacemaker and released a four-issue mini-series (January–April 1988).

Pre-Crisis
The Peacemaker is Christopher Smith, a pacifist diplomat so committed to peace that he is willing to use force as a superhero to advance the cause. He uses an array of special non-lethal weapons and also founded the Pax Institute. Most of the villains he goes up against are dictators and warlords.

During the Crisis on Infinite Earths storyline, Peacemaker fought against the Anti-Monitor's Shadow Demons where he was assisted by Cyborg, Son of Vulcan I, Vigilante III, and Wildcat II. He suffered a head injury during the fight.

Post-Crisis
The post-Crisis version of Peacemaker differs greatly from the pre-Crisis version of the character. Smith learns that his peace-through-violence efforts were the result of a serious mental illness brought on by the shame of having a Nazi death camp commandant for a father, Wolfgang Schmidt. He believes his father's spirit haunts him continually and criticizes his every move, even as he tries to live down his past.

Becoming a particularly deadly vigilante who would kill at the slightest provocation, he begins to believe that the ghosts of the people he killed, or who were killed in his vicinity, are collected inside his helmet and can offer him advice and commentary. For a time, the Peacemaker serves as a U.S. government agent under the auspices of Checkmate, a special-forces unit, hunting down terrorists until his own behavior becomes too extreme. Peacemaker plays a part in the Janus Directive and battles the Adrian Chase / Vigilante. Although he is seen as a helpful ally, some of the other heroes think that he is too extreme to be helping them out. He eventually crashes a helicopter to destroy tanks controlled by the supervillain Eclipso and is reported dead. His soul shows up in the realm of Purgatory in the Day of Judgment series. A team of heroes has shown up to recruit the soul of Hal Jordan. The guardians of Purgatory do not like this and Peacemaker, along with other dead vigilantes, rally and provide enough of a distraction so the group could return to Earth.

Another individual appearing in the 2006 Blue Beetle series has claimed both Smith's name and the Peacemaker identity, both things confirmed by several hints, such as his catchphrase of "loving peace so much, he'd kill for it", spoken by villain Tia Amparo / La Dama to define him. However, divested of his trademark helmet, he was shown using the 'Mitchell Black' identity before settling again on his real name. A year prior to his meeting with the Blue Beetle (Jaime Reyes), during a fight against Intergang, he found himself in a Bialyan pyramid that happened to be the same one the first Blue Beetle, Dan Garrett, found the scarab in years before. While inside, he accidentally came into contact with alien technology that allowed him to receive the scarab's database in his mind, explaining the inability of the Reach to control Garrett and Reyes. The Scarab was taken away with only a partly functioning AI with the higher instructions, including the ones needed to control the host, left in the pyramid and downloaded into Smith's mind.

Sensing the connection, he sought out Jaime, initially to see if the boy would become a threat but eventually becoming a reluctant partner. Upon witnessing Jaime's rebellion, the Reach implanted Peacemaker with a scarab himself, which was dormant until a Sinestro Corps Power Ring contacted the AI and assigned him control of Space Sector 2, including the Reach Empire. He was sent to kill Jaime, but Jaime interfaced with Smith's scarab and helped him face his inner fears. Gathering enough courage for a last stand, Smith forcibly cut the scarab from his spine, leaving him injured but not dead. He helped defend Jaime's family from a Reach attack, and has continued to serve as a sort of mentor to the third Blue Beetle. At the conclusion of the Blue Beetle volume, Peacemaker leaves El Paso. Before he departs, he bids farewell to Jaime and advises him to learn to become his own man.

Later, he makes an appearance in Final Crisis Aftermath: Escape as a detainee and potential recruit of the Global Peace Agency.

Peacemaker later appears in the Watchmen sequel "Doomsday Clock", partaking in the battle on Mars against Doctor Manhattan.

In the pages of Infinite Frontier, Peacemaker returns as a member of the Suicide Squad retaining his original look, breaking into Arkham Asylum to bring in Talon a few minutes before the Joker Incident.

League-Busters version
Another operative using the name Peacemaker appeared in Justice League International #65 as a member of the "League-Busters".

Mitchell Black
Mitchell Black, a surgeon, was recruited by the "Peacemaker Project", an organization unaffiliated with the Pax Institute and the US government's "Project Peacemaker". Black would reappear in the miniseries titled The L.A.W., reunited with the other heroes acquired from Charlton. As a team, they investigated a powerful being targeting military facilities.

He appeared to have been killed by the supervillain Prometheus in Infinite Crisis #7 during a battle to save Metropolis from destruction.

Earth-Four
On Earth-Four, Christopher Smith is the son of an unnamed diplomat who built a special body armor and fought in troubled areas as Peacemaker.

During the Crisis on Infinite Earths storyline, Peacemaker is among the Earth-Four heroes who were mind-controlled by Psycho-Pirate into attacking Azrael, Blok, Flash, and Martian Manhunter at the time when the Harbinger sent them to rescue Earth-Four's superheroes. After Psycho-Pirate was defeated, Peacemaker and his fellow Earth-Four superheroes agreed to help them fight the Anti-Monitor. Peacemaker of Earth-Four is among the superheroes that took part in the fight against the Anti-Monitor during the event when the Multiverse was created. Peacemaker would later find himself on New Earth after the Multiverse was folded into it by Spectre. Peacemaker of Earth-Four was among the superheroes who fought the Anti-Monitor's Shadow Demons. He was unable to get to Green Arrow of Earth-Two in time as he is killed by one of the Shadow Demons. When Peacemaker was falling after a Shadow Demon came in contact with his gun enough for an explosion to happen, he was saved by Halo. After the Anti-Monitor was defeated, Peacemaker of Earth-Four faded from existence.

Kingdom Come
The Peacemaker makes a minor appearance in flashbacks in Kingdom Come #2 as a member of Magog's Justice Battalion.

Watchmen
Peacemaker was used as an inspiration and influence for the Comedian in Alan Moore's Watchmen.

52
In the final issue of the 2006 - 2007 series 52, a new Multiverse is revealed, originally consisting of 52 identical realities. Among the parallel realities shown is one designated "Earth-4". As a result of Mister Mind "eating" aspects of this reality, it takes on visual aspects similar to the pre-Crisis Earth-4, including Peacemaker and the other Charlton characters. The names of the characters are not mentioned in the panel in which they appear. Based on comments by Grant Morrison, this alternate universe is not the pre-Crisis Earth-4. The Earth-4 Peacemaker also appears in Multiversity: Pax Americana #1.

Armageddon 2001
A group called the Peacemakers appear in Armageddon 2001 #2.

Dark Crisis on Infinite Earths
An unnamed female A.R.G.U.S. agent named Peacewrecker appears in Dark Crisis on Infinite Earths #7.

Television
The Christopher Smith incarnation of Peacemaker appears in Suicide Squad Isekai, voiced by Takehito Koyasu. The English dub is voiced by Seán Patrick Judge. This version is a member of the Suicide Squad.

DC Extended Universe
The Christopher Smith incarnation of Peacemaker appears in media set in the DC Extended Universe, portrayed by John Cena.

Video games

 * The Christopher Smith and Mitchell Black incarnations of Peacemaker appear in Scribblenauts Unmasked: A DC Comics Adventure.
 * The Christopher Smith incarnation of Peacemaker, based on the DCEU version, appears in the mobile turn-based role-playing game DC Legends.
 * The Christopher Smith incarnation of Peacemaker, based on the DCEU version, appears as an emote in Fortnite Battle Royale.
 * The Christopher Smith incarnation of Peacemaker, based on the DCEU version, appears as a playable character in the mobile version of Injustice 2.
 * The Christopher Smith incarnation of Peacemaker, based on the DCEU version, appears as a playable character in Mortal Kombat 1 via the "Kombat Pack" DLC, voiced by John Cena.

title: Peacemaker (character)


text:
Talk:Rue McClanahan

Incorrect death date listed
Incorrect death date listed... please correct Wikipedia lists 2 separate death date, one in 2010 and another in 2022. 98.195.128.26 (talk) 21:30, 27 January 2023 (UTC)

title: Talk:Rue McClanahan


text:
Gwangju Uprising

The Gwangju Uprising, known in Korean as May 18, took place in Gwangju, South Korea, in 1980. The uprising was a response to the coup d'état of May Seventeenth that installed Chun Doo-hwan as military dictator and implemented martial law. Following his ascent to power, Chun arrested opposition leaders, closed all universities, banned political activities, and suppressed the press. The uprising was violently suppressed by the South Korean military with the approval and logistical support of the Carter administration, which feared the uprising might spread to other cities and tempt North Korea to interfere. The uprising is also known as the May 18 Gwangju Democratization Movement, the Gwangju Democratization Struggle , the May 18 Democratic Uprising or the Gwangju Uprising  in South Korea.

The uprising began when Chonnam National University students demonstrating against martial law were fired upon, killed, raped, and beaten by the South Korean military. Some Gwangju citizens took up arms, raiding local police stations and armories, and were able to take control of large sections of the city before soldiers re-entered the city and suppressed the uprising. While the South Korean government claimed 165 people were killed in the massacre, scholarship on the massacre today estimates 600 to 2,300 victims. Under the military dictatorship of Chun Doo-hwan, the South Korean government named the uprising the  Gwangju Riot,  and claimed that it was being instigated by "communist sympathizers and rioters" acting under the support of the North Korean government.

In 1997, 18 May was established as a national day of commemoration for the massacre and a national cemetery for the victims was established. Later investigations confirmed the various atrocities that had been committed by the army. In 2011, the documents of Gwangju Uprising were listed on the UNESCO Memory of the World Register. In contemporary South Korean politics, denial of the Gwangju Massacre is commonly espoused by conservative and far-right groups.

Background
The assassination of President Park Chung Hee on 26 October 1979 triggered a number of democracy movements that had previously been suppressed under Park's tenure. The abrupt end of Park's 18-year authoritarian rule left a power vacuum that created political and social instability. Park's successor, Choi Kyu-hah, had no real control over the government and Chun Doo-hwan, chief of the Defense Security Command (DSC), was able to seize control of the military in the coup d'état of December Twelfth. At the time, both the military and Chun denied any political motivations behind the coup and Chun had no clear influence over domestic politics.

In March 1980, the beginning of a new school year, professors and students who had been expelled for pro-democracy activity returned to university and formed student unions. These unions led nationwide demonstrations against martial law and in support of democratization, human rights, labor rights, and freedom of the press. These protests culminated in the 15 May 1980 demonstration against martial law at Seoul Station which involved 100,000 protesters.

General Chun Doo-hwan heavily suppressed these protests. On 18 February 1980, the army issued orders to a number of units to undergo severe riot control training, called "Loyalty Training". This training was harsh and unconscionable, and was criticized as a factor behind the paratroopers' indiscriminate use of violence against the uprising. In the coup d'état of May Seventeenth Chun forced the Cabinet to extend martial law to the whole country and in the process closed universities, banned political activities, and further curtailed the press. To enforce martial law, troops were dispatched to the country's main cities. The same day, the DSC raided a national conference of student union leaders who had gathered to discuss their plans following the 15 May demonstration. Twenty-six politicians, including opposition leader and future president Kim Dae-jung were also arrested on charges of instigating protests. Chun minimized the scale of protests by cutting off all communication from Gwangju and used propaganda to depict the protests in Gwangju as the result of communist instigators.

South Jeolla Province, and its provincial capital Gwangju, was the center of anti-government and pro-democracy demonstrations. Jeolla had historically been the target of exploitation because of its abundant natural resources and the region was associated with political dissent and activism. Historically, the region was the site of the Donghak Peasant Revolution (1894–1895), the Gwangju Student Independence Movement (1929), and the Yeosu–Suncheon rebellion (1948). Under the military dictatorship of Park Chung Hee from 1961 to 1979, the government favored the development of Park's native Gyeongsang Province, while Jeolla Province was ignored. Among the protests against Chun's imposition of martial law, the protests in Gwangju were the most intense.

18–21 May
On the morning of 18 May, students gathered at the gate of Chonnam National University in protest of its closing. By 9:30 a.m., approximately 200 students had gathered in front of the school, opposed by 30 paratroopers. Sometime around 10 a.m., the soldiers charged against the students, moving the protest to downtown Gwangju, in front of the South Jeolla Province Provincial Office. Over the course of the day, the conflict broadened to around 2000 participants. Although local police had initially handled the protests, by 4 pm, paratroopers from the Republic of Korea Special Warfare Command (ROK-SWC) took over. The arrival of 686 soldiers from the 33rd and 35th battalions of the 7th Airborne Brigade marked the beginning of a brutal and infamous phase of suppression of the uprising.

During this phase, South Korean soldiers indiscriminately clubbed demonstrators and bystanders. Soldiers used bayonets to attack, torture, and kill residents indiscriminately. Soldiers raided buildings unrelated to the demonstration, including hotels, cafés, and barbershops. The first known fatality was a 29-year-old deaf man named Kim Gyeong-cheol, who was clubbed to death despite being a bystander. The violent suppression of the protests by the ROK-SWC led the number of protesters to rapidly increase, exceeding 10,000 by 20 May.

As the conflict escalated, the army opened fire on the citizens, killing an unknown number of protesters near Gwangju Station on 20 May. The same day, protesters burned down the local MBC television station, which had spread misinformation on the situation that had unfolded in Gwangju. Four policemen were killed at a police barricade near the Provincial Government Building after a car drove into them.

On the night of 20 May, hundreds of taxis led a parade of buses, trucks, and cars to the Provincial Office in protest. These "drivers of democracy" showed up to support the demonstrators because of the brutality of the South Korean government. In response, soldiers fired tear gas on them, pulled them out of their vehicles, and beat them. This only led more drivers to join the protest. Many taxi drivers were assaulted while trying to transport the injured to the hospital. Some taxi drivers were shot after the drivers attempted to use the taxicabs as weapons or as barricades.

The violence climaxed on 21 May. Some time around 1 p.m., the army fired on a crowd that had gathered in front of the South Jeolla Provincial Office building, causing numerous casualties. In response, some protesters raided the Reserve Force armories and police stations in nearby towns, arming themselves with M1 rifles and M1/M2 carbines. The militias also started to exercise caution against perceived North Korean provocateurs and raised placards reading "Don't misjudge, Northerners". Later that afternoon, gunfights between civilian militias and the army broke out in the Provincial Office Square. By 5:30 p.m., the militias had acquired two light machine guns and used them against the army, forcing them to retreat from the downtown area.

Blockade of Gwangju
By 22 May, all troops retreated to the rural outskirts outside of the city to wait for reinforcements. These reinforcements consisted of troops from the 3rd Airborne Brigade, the 11th Airborne Brigade, the 20th Mechanized Infantry Division, the 31st Infantry Division, and the Combat Arms Training Command (CATC; ). Reinforcements from the CATC primarily consisted of three subordinate units based in the unit's headquarters in Sangmudae: the Army Infantry School, the Army Artillery School , and the Army Armor School.

The army blocked all routes and communications from the city and fighting between militias and the army temporarily died down. On 23 May, soldiers fired at a bus that attempted to break out of the city in Jiwon-dong, killing 15 of the 18 passengers, and summarily executing two wounded passengers.

On 24 May, two teenage boys, Jeon Jae-su and Bang Gwang-beom, attempted to swim across the Wonje reservoir, but the 11th Airborne Brigade Troopers opened fire and killed them. At 13:55 p.m., the South Korean military suffered the greatest number of casualties when troops from the 11th Airborne Brigade 63rd Special Operations Battalion and the CATC Army Infantry School Training Battalion mistakenly fired at each other in Songam-dong, resulting in the deaths of 13 soldiers. Troops from the 11th Airborne Brigade indiscriminately murdered unarmed civilians and residents near the village in Songam-dong and plundered nearby stores. Martial Law Command misinterpreted friendly fire at Songam-dong as the work of insurgents within the army, as the Airborne Brigade Troopers were using a different communications channel.

Settlement Committees
Meanwhile, in the liberated city of Gwangju, the Citizens' Settlement Committee and the Students' Settlement Committee were formed. The former was composed of about 20 preachers, lawyers, and professors and negotiated with the army, demanding the release of arrested citizens, compensation for victims, and the prohibition of retaliation in exchange for the disarmament of militias. The latter committee was formed by university students and took charge of funerals, public campaigns, traffic control, withdrawal of weapons, and medical aid.

 * Kim Jong-bae - Chief Executive
 * Heo Kyu-jeong - Secretary of Home Affairs
 * Jeong Sang-yong - Secretary of External Affairs
 * Yoon Sang-won - Spokesperson for Militia
 * Park Nam-sun - Director of Militia Operations
 * Yoon Seok-ru - Militia QRF (Quick Reaction Force) Commander
 * Lee Jae-ho (이재호) - Militia QRF Deputy Commander
 * Kim Jun-bong (김준봉) - Director of Investigations
 * Gu Seong-ju (구성주) - Director of Provisions Supply

Order in the city was well maintained, but negotiations came to a deadlock as the army urged the militias to immediately and unconditionally disarm themselves. This created division within the Settlement Committees between those who wanted immediate surrender and those who called for continued resistance until their demands were met. After heated debates, those calling for continued resistance eventually took control.

Protests in other regions
As the news of the bloody crackdown spread, protests against the government broke out in nearby regions, including in Hwasun County, Naju, Haenam County, Mokpo, Yeongam County, Gangjin County, and Muan County, all in South Jeolla. While protests ended peacefully in most regions, protests in Haenam ended in gunfights between armed protesters and troops. Most of these protests died down by 24 May, although protests in Mokpo continued until 28 May.

26 May
By 26 May, the army was ready to reenter Gwangju. Members of the Citizens' Settlement Committee unsuccessfully tried to block the army's advance by lying down in the streets. Following news of the imminent attack, civil militias gathered in the Provincial Office and made preparations to make a last stand.

27 May
On 27 May, at 4:00 a.m., the Martial Law Command executed Operation Sangmu-Chungjeong to quell the protests. The operation mobilized members of the 3rd Airborne Brigade, the 7th Airborne Brigade, and the 11th Airborne Brigade Troopers, armed with M16A1 rifles and stun grenades. The soldiers disguised themselves with flak vests, leaf camouflage helmets with white bands, and ordinary army infantryman combat uniforms that were missing insignias and patches. Three Airborne Brigades were the vanguard of the operation, while the 20th Mechanised Infantry Division and the 31st Infantry Division joined the operation as backup reinforcements. Troops from three subordinate units of the CATC, the Army Infantry School, the Army Artillery School, and the Army Armor School, maintained their positions in the blockade during the operation. The soldiers moved into the downtown and defeated the civil militias within 90 minutes.

Role of the police
The National Security Headquarters initially dealt with the protests, but were soon supplemented by paratroopers from the 7th Airborne Brigade, before being fully taken over and ordered to evacuate to allow the army. The police suffered some of the first casualties of the massacre when four policemen were killed during a car-ramming attack. However, the martial law forces were also not friendly to the local police of Gwangju city.

The Commissioner General of the Jeonnam Provincial Police, Ahn Byung-ha, refused to order the police to open fire on civilians as instructed by Chun Doo-hwan. As a result, he was replaced as police chief and was tortured by the Army Counterintelligence Corps, which caused his death eight years later. In addition, some paratroopers assaulted the police and some residents testified witnessing police officers being chased down by the military.

Casualties
There is no universally accepted death toll for the Gwangju Massacre. Records of death for the city in May 1980 were an estimated 2,300 above the historical averages and the death toll has been estimated to be anywhere between 1,000 and 2,000 people. Estimates for the number of civilians wounded also vary heavily, including figures anywhere from 1,800 to 3,500 people.

Shortly after the massacre, the government's Martial Law Command released an official death toll at 144 civilians, 22 soldiers, and four police killed and 127 civilians, 109 troops and 144 police wounded. Individuals who attempted to dispute these figures were liable for arrest for "spreading false rumors".

According to the May 18 Family Association, at least 165 people died between 18 and 27 May, while another 76 are still missing and presumed dead. Twenty-two soldiers and four policemen were killed during the massacre, including 13 soldiers who were killed by friendly fire at Songam-dong. The number of police casualties is likely to be higher, due to reports of police officers being killed by soldiers for releasing captured protesters.

Aftermath
The government denounced the uprising as a rebellion instigated by Kim Dae-jung and his followers. Kim was convicted and sentenced to death, although his sentence was reduced following the intervention of US Presidents Jimmy Carter and Ronald Reagan. A total of 1,394 people were arrested for their involvement in the Gwangju Uprising, and 427 were indicted. Seven people received death sentences and twelve received life sentences. Estimates following the massacre suggested that more than 200,000 people participated in the uprising, facing roughly 3,000 paratroopers and 18,000 police officers.

Handcarts and garbage trucks carried 137 bodies from the massacre to the Old Mangweol-dong Cemetery on the outskirts of Gwangju. The state established the New Mangweol-dong Cemetery to commemorate Gwangju's history.

The Gwangju Uprising has had a profound impact on South Korean politics. Chun Doo-hwan, who was already unpopular because of his military coup, faced threats to his legitimacy following the dispatch of Special Forces paratroopers against demonstrators in Gwangju. The movement preceded other democratic movements during the late 1980s that pressured the regime into democratic reforms and paved the way for the election of President Kim Dae-jung in 1997, the first opposition candidate to win the office.

In 1995, in response to public pressure, the National Assembly passed the Special Law on May 18 Democratization Movement, which enabled the prosecution of those responsible for the Coup d'état of December Twelfth and the suppression of the Gwangju Uprising even though the statute of limitations had been exceeded.

On 3 December 1995, Chun, his ally and former President Roh Tae-woo, and 15 others were arrested on charges of conspiracy and insurrection. On 26 August 1996, the Seoul District Court issued a death sentence to both Chun, but his sentence was commuted to life imprisonment and a fine of. Former President Roh Tae-Woo, was sentenced to 22.5 years, which was reduced to 17 years on appeal. On 17 April 1997, the judgment was accepted by the Supreme Court of Korea. Chun was officially convicted of leading an insurrection, conspiracy to commit insurrection, taking part in an insurrection, illegal troop movement orders, dereliction of duty during martial law, murder of superior officers, attempted murder of superior officers, murder of subordinate troops, leading a rebellion, conspiracy to commit rebellion, taking part in a rebellion, and murder for the purpose of rebellion, as well as assorted crimes relating to bribery. However, on 22 December 1997, all of the people convicted in the trials were pardoned in the name of national reconciliation by President Kim Young-sam on the advice of President-elect Kim Dae-jung.

Starting in 2000, the May 18 Memorial Foundation has offered an annual Gwangju Prize for Human Rights to notable defenders of human rights, in memory of the massacre.

On 25 May 2011, the documents of the Gwangju Uprising were listed on the UNESCO Memory of the World Register. Following its inclusion, the Gwangju Metropolitan City government established May 18 Archives and passed the Management Act on the Archives of May 18 Gwangju Democratization Movement. Between 2014 and 2015, the Gwangju Metropolitan City government also re-modeled the former Gwangju Catholic center building to conserve its former state.

Anti-Americanism
The 1980s marked a surge in Anti-American sentiment in Korea, widely traced to the United States' support for Chun's government and its involvement in the suppression of the Gwangju Uprising. According to Bruce Cumings:

"Gwangju convinced a new generation of young [Koreans] that the democratic movement had developed not with the support of Washington, as an older generation of more conservative Koreans thought, but in the face of daily American support for any dictator who could quell the democratic aspirations of the Korean people. The result was an anti-American movement in the 1980s that threatened to bring down the whole structure of American support for the ROK. American cultural centers were burned to the ground (more than once in Gwangju); students immolated themselves in protest of Reagan's support for Chun."

Fundamental to these beliefs are the perception of US complicity in Chun's rise to power and in the Gwangju Massacre. Although William H. Gleysteen, then US Ambassador to South Korea, stated in a letter to The New York Times that the United States authorized the Republic of Korea Army's 20th Division to retake Gwangju and restore martial law, the United States government has denied these claims. The United States has consistently denied any foreknowledge of the unit's deployment, and has stated that the US government would regardless have no right to interfere in the actions of the South Korean government.

Re-evaluation
At the Mangwol-dong cemetery in Gwangju, survivors of the demonstrations and bereaved families have held an annual memorial service, called the May Movement, on the anniversary of the massacre. Many pro-democracy demonstrations in the 1980s demanded official recognition of the massacre and punishment for those responsible.

The first official re-evaluation of the massacre began after the reinstatement of direct presidential elections in 1987. In 1988, the National Assembly held a public hearing on the uprising, officially renaming the events to the "Gwangju Uprising" or the "Gwangju People's Uprising".

Developments from 1997 to 2013
In 1997, 18 May was declared an official memorial day. In 2002, a law privileging bereaved families took effect, and the Mangwol-dong cemetery was elevated to the status of a national cemetery.

On 18 May 2013, President Park Geun-hye attended the 33rd anniversary of the Gwangju Uprising and stated, "I feel the sorrow of family members and the city of Gwangju every time I visit the National May 18 Cemetery", and that "I believe achieving a more mature democracy is a way to repay the sacrifice paid by those [killed in the massacre]."

2017 investigation
In May 2017, newly elected South Korean President Moon Jae-in announced his plans to re-open investigations into the South Korean government's role in the suppression of the uprising.

In February 2018, it was revealed for the first time that the army had used McDonnell Douglas MD 500 Defender and Bell UH-1 Iroquois helicopters to fire on civilians. Defense Minister Song Young-moo delivered an apology. On 7 November 2018, Defense Minister Jeong Kyeong-doo issued another apology for the South Korean military's role in suppressing the uprising and acknowledged that soldiers had engaged in acts of sexual violence during the crackdown.

In May 2019, Kim Yong-Jang, a former intelligence officer at the 501st Military Intelligence Brigade of the U.S. Army testified that Chun Doo-hwan personally ordered troops to shoot protesters based on the intelligence he saw at the time. According to Kim, Chun secretly came to Gwangju on 21 May 1980, by helicopter to meet four military leaders including commander of special operations Chung Ho-Yong and colonel of the Gwangju 505 security unit Lee Jae-woo. Kim also testified that there were undercover soldiers among the Gwangju citizens acting as agents provocateurs aiming to discredit the movement. These soldiers were "in their 20s and 30s with short hair, some wearing wigs" and "their faces were burnt and some wore worn-out clothes".

2020 Truth Commission
In May 2020, 40 years after the uprising, the independent May 18 Democratization Movement Truth Commission was launched to investigate the crackdown and the use of military force. Under legislation passed in 2018, it operated for two more years, with a one-year extension allowed if necessary. In an interview marking the massacre's 40th anniversary and following Democratic Party of Korea's landslide victory in the 2020 South Korean legislative election, President Moon announced his support for inscribing the historic value and significance of the Gwangju Uprising in a new constitution of South Korea.

May 18 Special Act
With its new three-fifths majority in the National Assembly, the Democratic Party implemented a series of reforms in December 2020, including revisions to the May 18 Special Act to penalize those involved in making false claims about the Gwangju Uprising.

U.S. involvement
Documents available since 1996 describe how, after a White House Meeting on May 22, the US commander in Korea released Korean troops from the US-South Korean joint command to retake the city of Gwangju. The Pentagon also asked for a delay on the final assault in order to dispatch additional support planes to the peninsula. Declassified United States Department of State documents in July 2021, requested by the South Korean government, revealed that the U.S. ambassador William H. Gleysteen was informed by the Chief Presidential Secretary Choi Kwang-soo of the plans for an army crackdown a day before it took place. The released documents showed that Gleysteen expressed Washington's concerns over growing anti-American sentiment in the Gwangju area, amid broadcasts asserting that the US was involved in the military crackdown. Prior to the declassification, the notion of American foreknowledge and involvement in the Gwangju Massacre had been officially denied by the United States.

Literature

 * Dance Dance Revolution (2007), a poem by Cathy Park Hong
 * There a Petal Silently Falls: Three Stories (2008) by Choe Yun
 * The Old Garden (2009), a novel by Hwang Sok-yong
 * The Seed of Joy (2015), a novel by William Amos
 * Human Acts (2016), a novel by Han Kang

Compositions

 * "Exemplum in memoriam Kwangju" for orchestra by Isang Yun
 * 518-062 by Gloss and Naksyeon of D-Town (2010)

Television

 * Sandglass (1995)
 * 5th Republic (2005)
 * Youth of May (2021)

Film

 * (1991)
 * A Petal (1996), adapted from the short story "There a Petal Silently Falls" by Choe Yun
 * Peppermint Candy (1999)
 * May 18 (2007)
 * Sunny (2011)
 * 26 Years (2012), based on the 2006 manhwa by Kang Full
 * National Security (2012)
 * The Attorney (2013)
 * 1987: When the Day Comes (2017)
 * Excavator (2017)
 * A Taxi Driver (2017)
 * The Man Standing Next (2020)
 * Hunt (2022)

Music videos

 * "That's My Fault" and "It's Over" by Speed, featuring Kang Min-kyung and Park Bo-young, respectively
 * "May" by Wings of the ISANG

title: Gwangju Uprising


text: User talk:205.188.116.71

title: User talk:205.188.116.71