4.1 - Introdução

Introdução e Fundamentos de PL/I

Boas-vindas e Contextualização

Eu sinceramente só tinha escutado falar, o Naffer chegou a trabalhar com ela em alguma siderúrgica lá de Minas Gerais nos anos 80 mas sempre falou que era tranquilo; eu nunca tinha tido acesso a nenhuma aplicação rodando que fosse feita em PL/I. Isso mudou quando tive uma experiência na IBM e pude ver o PL/I em ação! Ah, PL/I é o acrônimo de Programming Language One. Sendo apenas cinco anos mais nova que o COBOL, ela reúne inúmeros recursos, funções e comandos que oferecem liberdade de programar em situações das mais diversas — desde cálculos científicos complexos até processamento de grandes volumes de dados comerciais.

Se você nunca programou antes — ou nunca sequer viu um programa rodando em mainframe — não se preocupe: ao final deste capítulo você já terá escrito, compilado e executado seu primeiro código em PL/I. Basta seguir passo a passo, experimentar e se divertir descobrindo como essa linguagem, muitas vezes considerada “antiga”, ainda mantém um lugar de destaque em sistemas críticos ao redor do mundo.

História do PL/I

Nos anos 1960, a IBM enfrentava um dilema: sua família de mainframes System/360 atendia setores científicos com FORTRAN e setores comerciais com COBOL, mas manter duas bases de código e equipes separadas era caro e trabalhoso. Em 1964, iniciou-se o projeto de uma linguagem unificada que pudesse abranger ambas as necessidades. Em 1967, nasceu oficialmente o PL/I.

  • 1964–1966: definição de requisitos, debates sobre sintaxe livre versus formatos restritos.

  • 1967: lançamento do primeiro compilador PL/I, com suporte a multiparadigma (procedural e modular).

  • Décadas seguintes: evolução contínua, incluindo suporte a tratamento de exceções (ON-units), gerenciamento dinâmico de memória e concorrência.

  • Junho de 2025: versão mais recente é o IBM Enterprise PL/I for z/OS 6.2, com documentação disponível nos guias Language Reference (SC31-5716-00) e Programming Guide (GI13-5620-00).

Hoje, PL/I ainda é amplamente usado em bancos, seguradoras e órgãos governamentais, onde confiabilidade e desempenho em mainframe continuam sendo imprescindíveis, mas se no seu 'shop' nao usam, deixa pra lá e leia esse capitulo como mera curiosidade.

2. Características Únicas da Linguagem

PL/I combina flexibilidade e poder expressivo de uma forma rara em linguagens de época similar. Veja por quê:

  1. Formato livre

    • O código pode ocupar livremente as colunas 2–72 (ou até a 200 com a opção MARGINS).

    • Sem divisão rígida em “áreas” de identificação e código como no COBOL.

  2. Ausência de palavras-reservadas fixas

    • Você pode nomear variáveis e rótulos quase como quiser, sem medo de colidir com uma futura palavra-chave da linguagem.

  3. Multiparadigma

    • Suporta programação procedural, modular e mesmo técnicas avançadas de tratamento de exceções (ON-units).

  4. Declarações simplificadas

    • DECLARE ou DCL dão conta de todos os tipos: números binários (FIXED BIN), decimais (FIXED DECIMAL), ponto-flutuante, caracteres e até tipos bit e unicode.

Esses aspectos tornam o PL/I um canivete suíço para aplicações mainframe, mas a contrapartida é que cada time ou projeto pode adotar padrões próprios — daí a importância de escolher um guia de estilo e segui-lo consistentemente.

Preparando o Ambiente

Antes de escrever seu primeiro programa, prepare:

  • Um editor de texto com suporte a VSCode, Notepad++ ou qualquer outro que destaque sintaxe PL/I.

  • Conexão a um mainframe z/OS via 3270 (TSO/ISPF) ou um ambiente emulado (Hercules + z/OS) ou ainda um compilador desktop (Enterprise PL/I for Academic).

  • Documentação oficial: os PDFs Language Reference (SC31-5716-00) e Programming Guide (GI13-5620-00), baixáveis do site da IBM.

Você deve saber onde salvar seu código, como submeter um job JCL simples para compilar com PL1 e como visualizar a saída do SYSOUT. Se já estiver familiarizado com mainframe, ótimo; caso não, basta seguir o tutorial de JCL básico e usar o TSO SUBMIT para mandar seu job.

Seu Primeiro Programa: “Hello, World!” em PL/I

4.1 Exemplo completo e comentado

  • HELLO: é o rótulo que dá nome ao procedimento principal.

  • PROCEDURE OPTIONS(MAIN) indica ao compilador que esta é a rotina de entrada do programa executável.

  • DECLARE MENSAGEM CHARACTER(30) VARYING; cria uma string de até 30 caracteres, variável em tempo de execução.

  • PUT SKIP LIST(MENSAGEM); imprime o texto na saída padrão, seguido de newline.

Passo a passo para compilar e executar

  1. Salvar o arquivo

    • Em VSCode ou no emulador, crie um arquivo chamado hello.pl1.

  2. Submeter para compilação

    • //PL1JOB JOB …

  3. Verificar a saída

    • Olá mundo em PL/I!

  4. Editar e experimentar

    • Altere o texto dentro de aspas, por exemplo 'Bem-vindo ao PL/I!', recompile e observe as diferenças.

Estrutura Básica de um Programa PL/I

Mesmo em programas mais complexos, alguns elementos são imprescindíveis:

  • PACKAGE / END PACKAGE: define o escopo de declarações compartilhadas em múltiplos procedimentos.

  • PROCEDURE / END: agrupa código executável, como funções em C.

  • Ponto e vírgula (;) encerra cada instrução.

  • Identação: use 2 espaços por nível para facilitar a leitura.

  • Nomes em maiúsculas para variáveis e procedimentos — ainda que PL/I seja case-insensitive, isso melhora a consistência visual.

Elementos Essenciais da Sintaxe

Elemento
Exemplo
Descrição

Declaração de variável

DECLARE IDADE FIXED DECIMAL(3);

Cria um inteiro decimal de até 3 dígitos

Entrada/Saída

PUT SKIP LIST('texto');

Escreve texto e pula linha

Atribuição

SALARIO = 1200.50;

Atribui valor fixo decimal

Condicional

IF IDADE >= 18 THEN … ELSE … END;

Estrutura if-then-else

Loop

DO I = 1 TO 10 BY 2; … END;

Loop com passo (por padrão passo 1)

Exceções

ON ZERODIVIDE …

Bloco para tratamento de divisão por zero

Este capítulo é sua porta de entrada no universo PL/I: agora você conhece a trajetória histórica, as peculiaridades da linguagem e já pôde colocar a mão na massa com um “Hello, World!”. Nos próximos capítulos, aprofundaremos em tipos de dados, estruturas de controle, manipulação de arquivos e, finalmente, tópicos avançados como ponteiros e alocação dinâmica.

Se em algum momento você se sentir perdido, volte aqui, releia cada seção com calma e, sobretudo, experimente editar seu código — é assim que se aprende de verdade!

Last updated