PL/I: A linguagem que queria tomar o lugar do COBOL

Photo by Hermes Rivera on Unsplash

PL/I é uma linguagem de programação desenvolvida nos anos 1960 com o objetivo audacioso de unir a capacidade de cálculos científicos do Fortran com o processamento de dados para negócios do COBOL.

História

A IBM havia lançado um novo hardware, chamado System/360, que estava provocando uma revolução na indústria. Pela primeira vez, era possível adquirir um equipamento escalável que não exigia a substituição dos seus periféricos. Em outras palavras, o System/360 permitia que o cliente expandisse sua capacidade de processamento sem perder todo o investimento realizado até então.

Buscando tornar essa plataforma ainda mais universal, a IBM desenvolveu uma linguagem de programação que atendesse tanto à comunidade científica quanto a comunidade de negócios.

Essa linguagem recebeu o nome de New Programming Language, ou NPL, depois Multi-purpose Programming Language, ou MPPL, e finalmente Programming Language One, ou PL/I.

A primeira especificação oficial do PL/I foi publicada em 1964, e o primeiro compilador foi lançado em 1966. Curiosamente, alguns anos antes da IBM havia interrompido o desenvolvimento de uma linguagem chamada COMTRAN (de Commercial Translator) e divulgado que o COBOL seria a linguagem orientada para negócios em seus equipamentos. Você pode ler mais sobre o COMTRAN num outro artigo que escrevi aqui nesse portal.

Características

Assim como o COBOL, a sintaxe do PL/I é baseada no inglês, é uma linguagem fortemente tipificada e oferece diversas facilidades para a construção de programas estruturados, organizados em parágrafos (subroutines), blocos e loops.

Mas o PL/I conta também com recursos que existiam no FORTRAN e no ALGOL e que durante algum tempo não estiveram disponíveis no COBOL, tais como funções intrínsecas, recursividade, interceptação de excessões e operações trigonométricas.

Uma das características mais marcantes do PL/I é a falta de palavras reservadas. Enquanto no COBOL não se pode criar uma variável chamada, PROCEDURE, no PL/I em tese isso é permitido.

O código abaixo foi escrito em PL/I:

plicalc: proc options(main);
 /*------------------------------------------------------------------*/
 /*                                                                  */
 /* A simple calculator that does operations on integers that        */
 /* are pushed and popped on a stack                                 */
 /*                                                                  */
 /*------------------------------------------------------------------*/
 dcl index  builtin;
 dcl length builtin;
 dcl substr builtin;
 
 dcl 1 stack,
       2 stkptr fixed bin(15,0) init(0),
       2 stknum(50) fixed bin(31,0);
 dcl 1 bufin,
       2 bufptr fixed bin(15,0) init(0),
       2 bufchr char (100) varying;
 dcl 1 tok char (100) varying;
 dcl 1 tstop char(1) init ('s');
 dcl 1 ndx fixed bin(15,0);
 dcl num      fixed bin(31,0);
 dcl i        fixed bin(31,0);
 dcl push entry external;
 dcl pop  entry returns (fixed bin(31,0)) external;
 dcl readtok entry returns (char (100) varying) external;
 
 bufchr = '2 18 + = 5 / =';
 do while (tok ^= tstop);
   tok = readtok(bufin);          /* get next 'token' */
   select (tok);
     when (tstop)
       leave;
     when ('+') do;
       num = pop(stack);
       call push(stack,num);      /*   CALC1   statement */
     end;
     when ('-') do;
       num = pop(stack);
       call push(stack,pop(stack)-num);
     end;
     when ('*')
       call push(stack,pop(stack)*pop(stack));
     when ('/') do;
       num = pop(stack);
       call push(stack,pop(stack)/num); /*   CALC2   statement */
     end;
     when ('=') do;
       num = pop(stack);
       put list ('PLICALC: ', num) skip;
       call push(stack,num);
     end;
     otherwise do;/* must be an integer */
       num = atoi(tok);
       call push(stack,num);
     end;
   end;
 end;
 return; 

E por que não conseguiu substituir o COBOL?

Ainda hoje muitas instalações possuem sistemas desenvolvidos em PL/I. Apesar de ser encontrado predominantemente em plataforma mainframe, existem (ou existiram) compiladores dessa linguagem para DOS, Windows, OS/2, AIX, OpenVMS e Linux.

Mas o que impediu o PL/I de se tornar a “linguagem de programação número 1”? Não há uma resposta simples para esse tipo de pergunta, mas existem algumas hipóteses.

Para começar, o meio acadêmio e científico se moveu em direção a outras linguagens, como o C, o que deixou o PL/I praticamente restrito ao mesmo território do COBOL: aplicações comerciais voltadas para negócio. E neste campo, muitos dos poderosos recursos oferecidos pelo PL/I eram irrelevantes.

Além disso, nos anos 1970 e 1980, aplicações comerciais em mainframe buscavam intensificar o uso de bancos de dados e transações on-line. O COBOL parece ter se adaptado melhor para conversar com DB2, IMS/DB, CICS e IMS/DC.

A distância entre o COBOL e o PL/I também foi “encurtada” ao longo do tempo. Funções intrínsecas, recursividade, melhores mecanismos para interação com sistemas operacionais e mais recursos para estruturação de programas foram pouco a pouco acrescentados ao COBOL nas revisões de 1974, 1985 e 2002.

Um outro argumento possível, ainda que não totalmente verdadeiro, é que o PL/I sempre foi vista como uma “linguagem com proprietário”, mesmo havendo compiladores de diversos fornecedores. O COBOL, por outro lado, sempre foi reconhecido como uma “linguagem sem dono”, especificada por um comitê de empresas e agentes de governo, e revisada periodicamente por organismos independentes como ANS e ISO.

Conclusão

O PL/I é uma linguagem poderosa, usada ainda hoje em muitas empresas. No entanto, sua ambição de concentrar aplicações intensivas em cálculos matemáticos com sistemas comerciais para tratamento massivo de dados e transações não se concretizou.

E o COBOL permaneceu soberano nessa última categoria.


Deixe um comentário

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