ALGOL 68RS
From Wikipedia, the free encyclopedia
| ALGOL 68RS | |
|---|---|
| Original author(s) | I. F. Currie, J. D. Morrison |
| Developer(s) | Royal Signals and Radar Establishment |
| Initial release | August 1977 |
| Final release | algol68toc 1.14
/ 25 August 2012 |
| Repository | github |
| Written in | ALGOL 68 |
| Operating system | ICL VME, Multics, VMS |
| Platform | ICL 2900 Series, VAX |
| Available in | English |
| Type | Compiler, translator |
| License | Freeware, public domain (parts) |
| Website | algol68 |
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).[1] Unlike the earlier ALGOL 68-R, it was designed to be portable, and implemented the language of the Revised Report.
Versions of ALGOL 68RS were written for the ICL 2900 Series, Multics, and VAX running VMS.[2][3]
Subsequently, parts of this compiler were released into the public domain, as a translator from ALGOL 68 to C, as part of the public release of the hardware description language ELLA, also by the RSRE.
Although the ALGOL 68-R compiler, written by I.F. Currie, J.D. Morrison, and S.G. Bond, was a great success, it suffered from two major problems: it had been written for the nearly obsolete ICL 1900 computer, and it implemented an out-of-date version of the language as it was released before the Revised Report on ALGOL 68 was available.
RSRE needed a newer compiler for various internal projects, so the team of Currie and Morrison wrote a new compiler designed for cross-platform software portability between machines. The compiler dealt with the parsing of ALGOL 68, producing a high level intermediate language known as stream language that is then compiled to machine code by a translator. The compiler needed to know only the sizes of the various object machine data types and the character encoding (set) available.
The compiler was written in ALGOL 68, bootstrapped initially using the ALGOL 68-R compiler.
A team of two programmers at Oxford University Computing Services wrote a code generator for the ICL 2900 series.[4] Martyn Thomas of South West Universities Regional Computer Centre (SWURCC) arranged that this system be sponsored by International Computers Limited (ICL) and sold as an official ICL product.[5]
Later, the Avon Universities Joint Computer Centre, a large user of Multics requested the SWURCC team to produce a Multics version of ALGOL 68RS. A version for the Digital Equipment Corporation (DEC) VAX computer was also written.
Eventually the team at SWURCC formed a company, Praxis, initially supporting the Multics version of ALGOL 68RS.
RSRE also used the ALGOL 68RS compiler for internal projects, including the Flex machine and the ELLA hardware design language. When it was decided to make ELLA freely available, Praxis was commissioned to write an ALGOL 68 to C translator named ctrans, based on the ALGOL 68RS compiler.
Restrictions in the language compiled
Like the earlier ALGOL 68-R compiler, ALGOL 68RS was a one-pass compiler, which required some restrictions on the language compiled.
Declaration before use
The ALGOL 68 program:
PROC even = (INT number) BOOL: ( number = 0 | TRUE | odd (ABS (number - 1))); PROC odd = (INT number) BOOL: ( number = 0 | FALSE | even (ABS (number - 1)));
would have to be re-written as:
PROC (INT) BOOL odd; PROC even = (INT number) BOOL : ( number = 0 | TRUE | odd (ABS (number - 1))); odd := (INT number) BOOL : ( number = 0 | FALSE | even (ABS (number - 1)));
To allow recursive declarations of modes (types) a special stub mode declaration was used to inform the compiler that an upcoming symbol was a mode rather than an operator:
MODE B,
A = STRUCT (REF B b),
B = [1:10] REF A;
Parallel processing
Like ALGOL 68-R, the operators PAR clause and the SEMA mode with its associated UP, DOWN, and LEVEL, were omitted.