COBOL 60 anos: a herança de FLOWMATIC, COMTRAN e FACT

Photo by Job Savelsberg on Unsplash

Todo mundo que já estudou ou trabalhou com COBOL em algum momento se deparou com um texto normalmente chamado de “Nota de Reconhecimento”, posicionado no início de livros, manuais e/ou outras publicações relacionadas à linguagem.

Um dos trechos dessa nota diz o seguinte (os grifos vermelhos são meus):

“Os autores e proprietários de material protegido pela legislacão sobre direitos autorais usado aqui, FLOWMATIC (marca registrada de Sperry Rand Corporation), Programação do Univac I e II, Sistema de Automação de Dados registrado em 1958, 1959 pela Sperry Rand Corporation; IBM COMMERCIAL TRANSLATOR Form No F28-8013, com Copyright em 1959 da IBM; FACT, DSI 27A52602760, com Copyright de 1960 da Minneapolis-Honeywell, autorizaram especificamente o uso deste material, total ou parcialmente, nas especificações de COBOL. Essa autorização aplica-se também ao uso de especificações de COBOL em manuais de programação ou publicações similares.”

Report to Conference on Data Systems Language Including Initial Specifications for a Common Business Oriented Language (COBOL) for Programming Electronic Digital Computers. USA Department of Defense, 1960.

Muitos talvez não percebam que FLOWMATIC, COMTRAN e FACT eram linguagens de programação já existentes ou em processo de desenvolvimento e que serviram de base para o que hoje conhecemos como COBOL.

Por que essas três?

O COBOL foi especificado por um comitê chamado CODASYL, sob incentivo de Departamento de Defesa dos EUA, com o objetivo de criar uma linguagem de programação voltada para aplicações comerciais e que fosse igual em qualquer equipamento.

O comitê era formado por representantes de agências do governo (os maiores clientes naquele momento), representantes de indústrias (já atentos à aplicação desse tipo de tecnologia em seus negócios) e representantes dos fabricantes de computadores: Burroughs, GE, Honeywell, IBM, NCR, Philco, RCA, Remington Rand, Sylvania e ICT.

Muitas outras linguagens existiam naquela época, como FORTRAN e ALGOL por exemplo. Mas as duas eram consideradas pouco adequadas para um mercado que ainda não havia embarcado no processamento de dados e que os fabricantes queriam atrair: o mercado das aplicações comerciais.

Três organizações já tinham projetos bem avançados naquele momento, dois deles prontos:

  • FLOWMATIC, criada por Grace Hopper na Remington Rand, empresa que logo depois seria adquirida pela Sperry e que no futuro passaria a se chamar Unisys;
  • COMTRAN, ou Commercial Translator, que vinha sendo desenvolvida por Bob Bemer na IBM.
  • FACT, ou Fully Automated Compiling Technique, construída pela Minneapolis-Honeywell.

Uma quarta linguagem chamada AIMACO também costuma ser citada como tendo influenciado a especificação do COBOL. Mas como é uma variação desenvolvida pela Força Aérea dos EUA a partir do FLOWMATIC, inclusive com apoio de Grace Hopper, não me parece que tenha contribuído com nada muito original.

Eu já escrevi sobre as reuniões do CODASYL e seus subcomitês neste artigo aqui, mas o fato é que o chamado “subcomitê de curto prazo” ficou responsável por apresentar em pouco tempo um esboço de especificação para a nova linguagem. E os integrantes desse subcomitê – depois de muita discussão técnica, política e comercial – acabaram focando nas duas linguagens que lhes pareceram mais aderentes ao paradigma que eles tinham em mente: a nova linguagem precisava ser sintática e gramaticalmente parecida com a língua inglesa.

Esse já era o paradigma central da linguagem desenvolvida por Grace Hopper, por muitos considerada a “avó do COBOL”.

FLOWMATIC

FLOW-MATIC Programming System. Remington Rand Univac, 1958.

A proposta de Grace Hopper, então na Remington Rand, era que, ao aproximar a linguagem de programação ao idioma do programador, a então iniciante Ciência da Computação atrairia um novo grupo de pessoas para trabalhar com essa tecnologia, e não apenas os cientistas do mundo acadêmico.

Podemos dizer que o FLOWMATIC (que perdeu o hífen depois da publicação do primeiro manual) era dividida em três seções:

  1. File Data Layout and Design, para detalhamento de arquivos de entrada e saída
  2. Intermediate or Working Storage, onde eram descritos os dados necessários para o programa mas que não estariam disponíveis nos arquivos de entrada e saída
  3. Relative Machine Coding, também chamado de X-1, onde a funcionalidade do programa era descrita passo a passo.

Não havia nenhuma semelhança entre a declaração de dados no FLOWMATIC e a DATA DIVISION que conhecemos hoje. No entanto, é possível observar diversas semelhanças em alguns comandos da Relative Machine Coding. Mesmo sem “programar” em FLOWMATIC, tenho certeza que qualquer programador COBOL saberia dizer o que faz o programa abaixo, extraído do seu primeiro manual:

(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)

Três pontos me chamam a atenção:

  1. A ambiguidade de instruções como JUMP (linha 13) e GO TO (linha 8), e COMPARE (linha 1) e TEST (linha 14);
  2. O uso do ponto como delimitador de escopo nas linhas 1 e 14, recurso que também seria adotado pelo COBOL em 1960;
  3. O ancestral do comando ALTER na linha 12.

No geral, vemos o uso do inglês como base e a criação de verbos associados a cada instrução, até mesmo no hoje seria um IF, como é possível observar na linha 1.

COMTRAN

IBM General Information Manual. IBM Comercial Translator. IBM, 1960.

O COMTRAN (ou Comercial Translator) era uma linguagem que vinha sendo desenvolvida por Bob Bemer na IBM desde 1957, e que pretendia estar para as aplicações comerciais assim como o FORTRAN (ou Formula Translator) estava para as aplicações científicas.

Jane Sammet, em entrevista registrada no livro History of Programming Languages, de Richard Wexelblat, conta que alguns participantes do subcomitê possuíam um certo “sentimento anti-IBM”, e isso fez com que algumas das opções do COMTRAN fossem rejeitadas pelo grupo.

No entanto, lendo o manual do COMTRAN, é possível observar muitas semelhanças com o COBOL tanto no formato de declaração de dados (no que eles chamavam de DATA DESCRIPTION) quanto na declaração das instruções (na PROCEDURE DESCRIPTION).

Isso pode ser notado, por exemplo, nos verbos OPEN, CLOSE (para input/output), MOVE e MOVE CORRESPONDING (para cópia de dados entre variáveis), SET e ADD (como comandos aritméticos), GO TO e STOP (para controle de fluxo de execução), IF (para operações condicionais), DISPLAY (para exibição de dados) etc.

A linha de um programa COMTRAN era dividida em regiões, assim como prevê o fixed format do COBOL até hoje. As colunas 1 a 6 eram usadas para serializar as linhas. As colunas 7 a 12 deviam ser usadas para nomear o que o COMTRAN chamava de “seções”, muito semelhante ao conceito de parágrafo. Nas colunas 13 a 72 ficavam as instruções do programa, e nas colunas 73 a 80 um identificador que seria igual para todas as linhas do programa.

Mas a semelhança mais impressionate com o COBOL está na DATA DESCRIPTION, tanto no que se refere aos conceitos de file, record e field quanto na estruturação de itens de grupo e itens elementares, em níveis que iam de 01 a 99.

A DATA DESCRIPTION também previa o uso de certos caracteres para declarar o tipo e o tamanho de determinado campo: “A” para indicar que o campo aceitaria qualquer caracter não-numérico, “X” para indicar que aceitaria letras ou números e “9” para aceitar apenas números. O tamanho do campo podia ser indicado de duas maneiras: ou pela repetição desses caracteres especiais (XXX, para representar um campo alfanumérico de três posições), ou com um número entre parêntes após o caracter especial (como em X(3)). A essa construção de tipos e tamanhos para cada campo eles davam o nome de field pictorial.

A imagem abaixo, extraída do manual do COMTRAN, mostra como os dados eram declarados:

Em 1961, a IBM anunciou que interromperia o desenvolvimento do COMTRAN e passaria a focar na construção de um compilador COBOL, seguindo o formato publicado pelo Departamento de Defesa americano no ano anterior.

FACT

Jane Sammet, no livro que citei anteriormente, comenta que por volta de dezembro de 1959, quando a primeira recomendação do COBOL já estava pronta, a Minneapolis-Honeywell ameaçou não assinar o documento alegando que discordava com o fato de alguns recursos da sua linguagem FACT (ou Fully Automatic Compiling Technique), não estivessem presentes.

Na verdade, alguns dos recursos propostos por essa linguagem eram complexos para a realidade da época, e a maioria dos integrantes do subcomitê achou melhor deixá-los para uma futura revisão do COBOL.

Mas sem a assinatura da Honeywell, um dos maiores fabricantes naquele momento, o CODASYL temia que o Departamento de Defesa não fosse considerar o resultado final como satisfatório. Afinal, o objetivo era obter um acordo para o desenvolvimento de uma linguagem comum a todos os equipamentos.

FACT (Fully Automated Compiling Technique): A New Business Language. Honeywell, 1960.

Ou seja, politicamente, terminar as atividades de curto prazo sem a anuência de um dos maiores fabricantes da indústria não pareceu uma boa ideia.

Assim é que, na recomendação final, foram incorporados alguns dos recursos mais avançados do COBOL para a época, tais como:

  • A possibilidade de declarar nomes condicionais, semelhantes aos níveis 88 de hoje;
  • Um gerador de relatórios não procedural, muito semelhante ao que viria a ser a REPORT SECTION do COBOL em 1966;
  • O uso de qualificadores de dados, como os IN e OF do COBOL;
  • Uma função SORT para classificação de arquivos.

O FACT também previa a separação do programa em parágrafos com nomes únicos (como o COMTRAN) e o uso de verbos e outras palavras reservadas em inglês para codificação das instruções.

Se no COMTRAN operações aritméticas era realizadas pelo comando SET (semelhante ao que hoje conhecemos como COMPUTE), no FACT os comandos aritméticos eram ADD, SUBTRACT, DIVIDE e MULTIPLY.

A imagem abaixo mostra um trecho do programa exemplo apresentado pelo manual:

O FACT previa também a possibilidade de inicializar variáveis antes da execução do programa, algo que não existia nem no FLOWMATIC nem no COMTRAN, e que viria a se transformar na cláusula VALUE do COBOL.

Conclusão

Depois de ler os manuais das três linguagens, fiquei com a impressão de que, ao contrário do que se conta nos livros de história, o COBOL absorveu mais recursos do COMTRAN do que do FLOWMATIC, o que não tira nenhum mérito da linguagem da Sperry e seu aspecto inovador.

As três linguagens não duraram muito tempo. Mas o COBOL, produto das três, viria a ser a base absoluta de todos os sistemas comerciais nas décadas seguintes.

Fontes:

Report to Conference Data Systems Language including initial specification for a Common Business Oriented Language (COBOL) for programming eletronic digital computers. USA Departament of Defense, 1960.

FLOW-MATIC Programming System. Remington Rand Univac, 1958.

IBM General Information Manual. IBM Comercial Translator. IBM, 1960.

FACT (Fully Automated Compiling Technique): A New Business Language. Honeywell, 1960.

History of Programming Languages. Richard Wexelblat, 1981.


Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *