FLOW-MATIC

From Wikipedia, the free encyclopedia
Jump to: navigation, search
FLOW-MATIC
Paradigm imperative
Designed by Remington Rand, Grace Hopper
First appeared 1955 (1955)
Platform UNIVAC I
Influenced
COBOL

FLOW-MATIC, originally known as B-0 (Business Language version 0), was the first English-like data processing language. It was developed for the UNIVAC I at Remington Rand under Grace Hopper during the period from 1955 until 1959. It had a strong influence on the development of COBOL.

Development[edit]

Hopper had found that business data processing customers were uncomfortable with mathematical notation.[2] In late 1953 she proposed that data processing problems should be expressed using English keywords, but Rand management considered the idea unfeasible. In early 1955, she and her team wrote a specification for such a programming language and implemented a prototype.[3] The FLOW-MATIC compiler became publicly available in early 1958 and was substantially complete in 1959.[4]

Innovations and influence[edit]

First, FLOW-MATIC was the first programming language to express operations using English-like statements.[4]

Second, FLOW-MATIC was the first system to distinctly separate the description of data from the operations on it. Its data definition language, unlike its executable statements, was not English-like; rather, data structures were defined by filling in pre-printed forms.[4]

Flow-Matic was a major influence in the design of COBOL, since only it and its direct descendent AIMACO were in actual use at the time.[5] Several elements of Flow-Matic were incorporated into COBOL:

  • Defining files in advance, and separating into INPUT and OUTPUT files.
  • Qualification of data-names (IN or OF clause).
  • IF END OF DATA (AT END) clause on file READ operations.
  • Figurative constant ZERO (originally ZZZ...ZZZ, where number of Z's indicated precision).
  • Dividing the program into sections, separating different parts of the program. Flow-Matic sections included Computer (Environment Division), Directory (Data Division), and Compiler (Procedure Division).

Sample program[edit]

A sample FLOW-MATIC program:[6][7]

 (0)  INPUT INVENTORY FILE-A PRICE FILE-B ; OUTPUT PRICED-INV FILE-C UNPRICED-INV
     FILE-D ; HSP D .
 (1)  COMPARE PRODUCT-NO (A) WITH PRODUCT-NO (B) ; IF GREATER GO TO OPERATION 10 ;
     IF EQUAL GO TO OPERATION 5 ; OTHERWISE GO TO OPERATION 2 .
 (2)  TRANSFER A TO D .
 (3)  WRITE-ITEM D .
 (4)  JUMP TO OPERATION 8 .
 (5)  TRANSFER A TO C .
 (6)  MOVE UNIT-PRICE (B) TO UNIT-PRICE (C) .
 (7)  WRITE-ITEM C .
 (8)  READ-ITEM A ; IF END OF DATA GO TO OPERATION 14 .
 (9)  JUMP TO OPERATION 1 .
(10)  READ-ITEM B ; IF END OF DATA GO TO OPERATION 12 .
(11)  JUMP TO OPERATION 1 .
(12)  SET OPERATION 9 TO GO TO OPERATION 2 .
(13)  JUMP TO OPERATION 2 .
(14)  TEST PRODUCT-NO (B) AGAINST ZZZZZZZZZZZZ ; IF EQUAL GO TO OPERATION 16 ;
     OTHERWISE GO TO OPERATION 15 .
(15)  REWIND B .
(16)  CLOSE-OUT FILES C ; D .
(17)  STOP . (END)

Note that this sample includes only the executable statements of the program, the COMPILER section. The record fields PRODUCT-NO and UNIT-PRICE would have been defined in the DIRECTORY section, which did not use English-like syntax.[8]

Notes[edit]

  1. ^ Hopper (1959) p. 198.
  2. ^ “I used to be a mathematics professor. At that time I found there were a certain number of students who could not learn mathematics. I then was charged with the job of making it easy for businessmen to use our computers. I found it was not a question of whether they could learn mathematics or not, but whether they would. […] They said, ‘Throw those symbols out — I do not know what they mean, I have not time to learn symbols.’ I suggest a reply to those who would like data processing people to use mathematical symbols that they make them first attempt to teach those symbols to vice-presidents or a colonel or admiral. I assure you that I tried it.”[1]
  3. ^ Hopper (1978) p. 16.
  4. ^ a b c Sammet (1969) p. 316
  5. ^ Sammet (1978) p. 204.
  6. ^ Sperry Rand (1957) p. 7.
  7. ^ Sammet (1969) p. 323.
  8. ^ Hopper (1978) p. 18.

References[edit]

This article is based on material taken from the Free On-line Dictionary of Computing prior to 1 November 2008 and incorporated under the "relicensing" terms of the GFDL, version 1.3 or later.