In this series of posts we'll look at ALGOL, one of the foundational languages for modern programming, and the ALGOL 60 implementation on MTS.

The ALGOL family of languages and ALGOL 60

Most programming languages spring from a single person or a company; ALGOL is fairly unique in that it was originally designed by a committee of European and American computer scientists in the mid 1950s. The first version to be widely implemented was ALGOL 60, which is what we will look at here. A large number of improvements to ALGOL 60 were proposed or developed: one, by Niklaus Wirth, became ALGOL W. The next standardised version was ALGOL 68 but this was not widely adopted.

Although it is not in wide use today, ALGOL introduced many influential concepts to programming languages, such as block scoping, so can be considered the ancestor of languages such as Pascal and C.

ALGOL 60 on MTS

The ALGOL compiler provided by IBM for S/360 machines is available on MTS under the name *ALGOL. This follows the ALGOL 60 specification fairly closely. A number of small changes were made to the compiler to make it work under MTS.

There are also ALGOL W and ALGOL 68 compilers on MTS, the former being the most popular version in use at the time of D6.0; I will look at these in later posts.

Prerequisites

No special installation instructions to get ALGOL 60 running - just do the standard D6.0 setup as described in this guide and then sign on as a regular user such as ST01.

Compiling using *ALGOL

*ALGOL will read source from scards (by default *source* ie standard input) and will write object files to spunch. Unlike some other MTS compilers you need to provide a filename for spunch as there is no default.

One gotcha is that *ALGOL will not clear out the file used for writing object code, so you need to run $empty on it before recompiling each time.

Other *ALGOL compilation parameters are listed in MTS Volume 2X.

To run ALGOL 60 programs you need to concatenate the runtime library *ALGOLLIB with the object file. Say your object code is in the file -load then to run it you would do:

# $run -load+*algollib

Hello world

Here's a simple program to print "Hello, world!" five times.

'BEGIN'  
'COMMENT' Hello World program for ALGOL 60;  
    'INTEGER' I;
    'FOR' I := 1 'STEP' 1 'UNTIL' 5 'DO'
    'BEGIN'
         OUTSTRING(1, '('Hello, world!')');
         SYSACT(1, 14, 1);
    'END'
'END'  

Indentation is not important except to make the program readable. Note the quotation marks around keywords like 'INTEGER' to distinguish them from identifiers: this is known as stropping.

OUTSTRING and SYSACT are not part of ALGOL 60 but are library functions provided by IBM; the SYSACT call here is used to start a new line on the output device.

Here's a terminal log of how to compile and run the program. This assumes the source code is in file hello.al.

# $run *algol scards=hello.al spunch=-load
 i
  LEVEL 1JUL67                            OS ALGOL F                       DATE  JAN 11 1915
                                       SOURCE PROGRAM                               PAGE 001
   SC     SOURCE STATEMENT
  00000   'BEGIN' 
  00000       'COMMENT' Hello World program for ALGOL 60; 
  00000       'INTEGER' I;
  00001       'FOR' I := 1 'STEP' 1 'UNTIL' 5 'DO'
  00001       'BEGIN'
  00001           OUTSTRING(1, '('Hello, world!  ')');
  00002           SYSACT(1, 14, 1);
  00003       'END'
  00003   'END'
 i
                                       IDENTIFIER TABLE                             PAGE 002
  PBN SC    PBN      NAME   TYPE  DM DSP       NAME   TYPE  DM DSP       NAME   TYPE  DM DSP
            SURR                  PR LN                     PR LN                     PR LN

  001 00000 000      I      I        018
 i
                                   STORAGE REQUIREMENTS (DECIMAL)                   PAGE 003

  OBJECT MODULE SIZE 540 BYTES.
  DATA STORAGE AREA SIZES
    PBN   BYTES       PBN   BYTES       PBN   BYTES       PBN   BYTES       PBN   BYTES
    001      48

# $run -load+*algollib
 Hello, world!
 Hello, world!
 Hello, world!
 Hello, world!
 Hello, world!

 END OF ALGOL PROGRAM EXECUTION

If you change the source file and want to recompile, remember to do %empty -load.

Further information

As always, the Wikipedia page provides a good overview of the language's history and key features.

There is no MTS Volume on ALGOL 60 (there is one on ALGOL W, however). Some information on the *ALGOL compiler and *ALGOLLIB library can be found in the MTS Volume on obsolete commands.

The original IBM documentation for the compiler can be found at Bitsavers.

Updated 6-Feb-2015 to fix comment syntax.