Sunday, January 14, 2018

Univac Document Archive: 1107 COBOL Programmer's Guide Added

This is a PDF of a scanned paper document in my collection. This document is more than fifty years old (published in 1963) and may appear wonky to contemporary eyes: the unjustified typescript text is sometimes misaligned on the page. This is not an artefact of scanning—it's how the document actually appears. Recall that only around 38 Univac 1107s were sold, so documents describing it were produced in small numbers and didn't, in the eyes of Univac, merit the expense of the high production values of contemporary IBM manuals.

When the Univac 1108 was released, the COBOL compiler was modified to exploit the 1108's new instructions, in particular native hardware support for 72-bit double precision floating point arithmetic (the 1107 compiler supported double precision with a different format implemented in software). This compiler, based upon the COBOL-60 standard as revised by COBOL-61, was updated over the years as the COBOL language evolved, and remained the standard Univac 1100 series COBOL until the release of ASCII/ANSI COBOL, which conformed to the ANSI X3.23-1974 COBOL 1974 standard and used the ASCII character set instead of the FIELDATA code employed by the original compiler.

I never used COBOL on the UNIVAC 1107; the machine I used was for research and education at an engineering school, where Algol, Fortran, or assembler were the programming languages of choice. COBOL, which was particularly costly in the drum storage it consumed for the compiler and libraries, was not installed. I did, however, obtain a copy of the COBOL Programmer's Guide, which was scanned to produce this on-line document. Having learned Algol and Fortran, my much younger self thought the idea of programming a computer by writing wordy English prose particularly stupid, although there were some innovative and interesting ideas about defining and manipulating data structures which would, in time, find their way into other programming languages such as PL/I, Pascal, and C.

As usual, my instinct for mis-reading the technology market and the desires of customers was uncanny. By 1970, COBOL was the most widely used programming language in the world, with tens of millions of lines of word salad being spewed into mainframes around the world, some of it still in use today. Nobody writes new COBOL programs today (well, nobody sane—I wrote one in 2012), but many people remain involved in maintenance of legacy COBOL programs, and trawling through vast snowdrifts of COBOL looking for two-digit year representations accounted for much of the billions spent in the Y2K panic of the late 1990s.

As with many systems programmers, I never managed to completely avoid COBOL during my career. I spent a summer working on a translator from Burroughs COBOL, which allowed Algol-type expressions everywhere, to Univac 1108 COBOL which was the descendant of that described in this manual. Years later, I resolved a crisis in a mission-critical COBOL program which was missing its deadlines, by changing one statement which made it run more than a hundred times faster (it was writing data to disc one tiny record at a time: I simply made it write buffers containing many records).