PL/I: A linguagem que queria tomar o lugar do COBOL
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.