Ratfor
Developer | Brian Kernighan |
---|---|
First appeared | 1976 |
Website | sepwww.stanford.edu |
Influenced by | |
Fortran, C |
Ratfor (short for RATional FORtran) is a programming language implemented as a preprocessor for Fortran 66. It provided modern control structures, unavailable in Fortran 66, to replace GOTOs and statement numbers.
Ratfor was designed and implemented by Brian Kernighan at Bell Telephone Laboratories in 1974, and described in Software-Practice & Experience in 1975. It was used in the book "Software Tools" (Kernighan and Plauger, 1976).
Ratfor provides the following kinds of flow-control statements, described by Kernighan and Plauger as "shamelessly stolen from the language C, developed for the UNIX operating system by D.M. Ritchie" ("Software Tools", p. 318):
- statement grouping with braces
- if-else, while, for, do, repeat-until, break, next
- "free-form" statements, i.e., not constrained by Fortran format rules
- <, >, >=, ... in place of .LT., .GT., .GE., ...
- include
- # comments
For example, the following code
if (a > b) { max = a } else { max = b }
might be translated as
IF(.NOT.(A.GT.B))GOTO 1 MAX = A GOTO 2 1 CONTINUE MAX = B 2 CONTINUE
The version of Ratfor in Software Tools is itself written in Ratfor, as are the sample programs, and inasmuch as its own translation to Fortran is available, it can be ported to any Fortran system, and surely has been. Ratfor source code files end in .r or .rat.
It basically took the flow control statements and generated regular fortran which then could be compiled. It allowed you to use structured programming in writing the code.
In 1977, at Purdue University, an improved version of the ratfor preprocessor was written. It was called Mouse4, as it was smaller and faster than ratfor. A published document by Dr. Douglas Comer, professor at Purdue concluded "contrary to the evidence exhibited by the designer of Ratfor, sequential search is often inadequate for production software. Furthermore, in the case of lexical analysis, well-known techniques do seem to offer efficiency while retaining the simplicity, ease of coding and modularity of ad hoc methods." (CSD-TR236).
In comparison of the ratfor preprocessor on a program of 3000 source lines running on a CDC 6500 system took 185.470 CPU seconds. That was cut by 50% when binary search was used in the ratfor code. However rewriting the ad hoc lexical scanner using a standard method based on finite automata took the program to 12.723 seconds.