3

COBOL: Entenda um pouco da história e por que não um "Hello, World!"?

Olá, pessoas! Hoje quero apresentar um pouco de uma linguagem intrigante chamada COBOL. Vamos entender um pouco da história e da sintaxe dela, e, claro, também vamos aprender a fazer o clássico "Hello, World!".

COBOL vem de COmmon Business-Oriented Language, ou seja, uma linguagem orientada a negócios. Foi criada em 1959 por um comitê chamado CODASYL (Conference on Data Systems Languages), reunindo gente do governo americano, da indústria e da academia, com o objetivo de padronizar o processamento de dados de negócio, folha de pagamento, contabilidade, sistemas bancários, permitindo que o mesmo programa rodasse em computadores diferentes sem precisar reescrever tudo do zero.

Sempre tive curiosidade sobre COBOL, principalmente por ser uma linguagem tão antiga e ainda assim continuar tão utilizada por baixo dos panos. Boa parte dos programadores novos nem imagina o quanto COBOL ainda está presente no nosso dia a dia: sistema bancário, folha de pagamento, seguradora, boa parte disso ainda roda em cima de COBOL escrito há décadas, silenciosamente sustentando um monte de coisa que a gente usa sem perceber.

A verbosidade

Um dos maiores diferenciais de COBOL é a verbosidade. Onde em Python você escreveria:

if escolha == 1:
    jogar()
elif escolha == 2:
    exit()
else:
    print("Opção inválida")

Em COBOL, o equivalente pode ficar assim:

EVALUATE TRUE
    WHEN ESCOLHA = 1
        PERFORM JOGAR
    WHEN ESCOLHA = 2
        STOP RUN
    WHEN OTHER
        DISPLAY "OPCAO INVALIDA"
END-EVALUATE.

Isso acontece porque COBOL foi pensada desde o início pra ser lida quase como um texto em inglês, até por gente que não fosse programadora. Um analista de negócio deveria conseguir ler um programa COBOL e entender o que está acontecendo sem precisar decorar símbolo nenhum. Então cada instrução tende a ser uma palavra por extenso, sem abreviação, sem operador obscuro.

As Divisions

Tem partes que sempre vão se repetir em qualquer programa COBOL: as divisions. São 4 no total:

  • IDENTIFICATION DIVISION: identifica o programa, nome, autor, etc.
  • ENVIRONMENT DIVISION: descreve o ambiente onde o programa roda, arquivos externos, configurações de máquina.
  • DATA DIVISION: onde ficam declaradas as variáveis do programa.
  • PROCEDURE DIVISION: o corpo do programa, onde a lógica de fato acontece.

Dessas quatro, só a IDENTIFICATION DIVISION e a PROCEDURE DIVISION são obrigatórias. Um Hello World, por exemplo, nem precisa de DATA DIVISION, já que não usa variável nenhuma:

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

PROCEDURE DIVISION.
    DISPLAY "Hello, World!".
    STOP RUN.

DISPLAY manda o texto pro terminal, e STOP RUN encerra o programa. Repara que mesmo num exemplo tão simples, já aparecem duas divisions inteiras antes de qualquer lógica de fato.

Rodando na prática

Pra compilar COBOL, usei o GnuCOBOL, um compilador open-source disponível pra Linux, MacOS e Windows.

No Linux, geralmente dá pra instalar direto pelo gerenciador de pacotes da distro (apt install gnucobol, no caso do Ubuntu/Debian, por exemplo). No Windows, o processo é um pouco diferente: você baixa o pacote já compilado do GnuCOBOL, extrai numa pasta, e dentro dela tem um arquivo chamado set_env.cmd. Ele configura as variáveis de ambiente do compilador e adiciona o cobc ao PATH da sessão atual do terminal, sem precisar mexer em nada global:

C:\caminho\para\gnucobol-3.2_win\set_env.cmd

De qualquer forma, uma vez com o compilador disponível, cobc --version confirma que está tudo no ar. Pra compilar o Hello World e gerar o executável:

cobc -x -o hello hello.cbl

O -x diz pro compilador que você quer um executável (sem ele, ele gera um objeto pra ser usado como módulo). E rodando:

./hello
Hello, World!

É isso, galera. Uma linguagem que existe há quase 70 anos, extremamente verbosa pros padrões atuais, mas que continua rodando por baixo de uma quantidade absurda de sistema crítico por aí.

Caso queiram ver um pouco mais, estou brincando de construir um campo minado pra ser jogado via terminal em COBOL: minesweeper-cli-cobol.

Até a próxima e obrigado pelos peixes!

Carregando publicação patrocinada...
2