Do OS/VS ao Enterprise: o COBOL dos mainframes da IBM

Photo by Suzanne D. Williams on Unsplash

IBM® Enterprise COBOL for z/OS® é o nome oficial do compilador COBOL disponível nos mainframes da IBM, chamados genericamente de plataforma Z, Z-Series ou System Z.

Atualmente este compilador está na versão 6.3, lançada em 2019, e inclui recursos de compiladores anteriores, como COBOL for OS/390, VS COBOL II e OS/VS COBOL, além de recursos novos como multithreading, Unicode, XML, JSON, sintaxe orientada a objeto e integração com Java.

Neste artigo vamos destacar as principais evoluções de alguns dos compiladores mais conhecidos no mundo dos mainframes da IBM.

OS/VS COBOL

Oficialmente chamado IBM VS COBOL for OS/VS, este compilador foi lançado em meados dos anos 1970 e teve sua última versão (2.4) lançada no início dos anos 1980.

Ele foi o primeiro a oferecer recursos do padrão ANS 74, além de manter compatibilidade com o ANS 68, o padrão anterior. Havia um recurso conhecido como 74 standard FIPS flagging que seguia a recomendação do Federal Information Processing Standard e que permitia que o compilador fosse configurado para exibir warnings ou erros caso detectasse programas fazendo uso de recursos obsoletos (eliminados no padrão 74) ou recursos que fossem extensões da IBM mas que não fizessem parte dos padrões ANS.

O OS/VS COBOL também passou a permitir carga dinâmica de programas e debugging interativo em modo linha, tanto para programas batch como on-line.

VS COBOL II

Lançado pela IBM no final dos anos 1980, este foi o primeiro compilador da IBM a adotar o padrão ANS 85.

A grande novidade eram os elementos de linguagem que facilitavam a construção de programas 100% estruturados. Os END-verbs, também conhecidos como delimitadores de escopo, surgiram nessa época.

O VS COBOL II permitia a construção de programas reentrantes, contava com suporte para alfabetos baseados em DBCS (double-byte character set), possuía um otimizador para processamento de SORT e oferecia um modo de debug interativo em tela cheia.

Além disso, o VS COBOL-II podia gerar programas com endereçamento em 31 bits, permitindo que os programas aproveitassem os recursos da (então recente) arquitetura 370, ultrapassando a linha dos 16Mb de memória.

COBOL for MVS & VM

Lançado entre o fim dos anos 1990 e início dos 2000, esse compilador oferecia extensões da IBM para orientação a objetos e funções intrínsecas, além de implementar recursos adicionais da versão ANS 85 que não haviam sido incorporadas ao VS COBOL-II.

O grande apelo desse compilador, no entanto, era sua capacidade de comunicação com diferentes plataformas, facilitando a construção de sistemas na arquitetura cliente-servidor, uma obsessão de alguns setores do mercado naquela época.

Um programa COBOL, por exemplo, podia chamar diretamente funções escritas em C/C++, passando parâmetros by value, inclusive strings terminadas em nulo, o que também não era possível com os compiladores anteriores.

COBOL for OS/390

Este compilador expandiu a capacidade de interoperabilidade entre plataformas do compilador anterior, oferecendo mais recursos para a construção de programas orientados a objetos.

Era possível, por exemplo, gerar e trabalhar com DLLs (Dynamic Link Libraries), bibliotecas dinâmicas que podiam conter tanto programas em COBOL como programas em C/C++. A chamada a subprogramas em DLLs é praticamente igual à chamada de subprogramas com CALLs dinâmicos, mas com algumas vantagens, tais como:

  • Subprogramas de uma mesma DLL podem ser chamados tanto por programas escritos em COBOL quanto por programas escritos em C/C++, o que aumenta a capacidade de comunicação entre sistemas construídos em diferentes linguagens de programação.
  • O uso de DLLs permite que um programa COBOL chame um subprograma com nomes longos, com até 160 caracteres. Em um CALL dinâmico normal, esse nome seria truncado em oito bytes.

O COBOL for OS/390 oferecia suporte a SOM (System Object Model) e CORBA (Common Object Request Broker Architecture), duas tecnologias que padronizavam o compartilhamento de objetos construídos em diferentes plataformas.

Enterprise COBOL for Z/OS

O compilador atual dos mainframes da IBM suporta todos os recursos mencionados nas seções anteriores, além de novos elementos que permitem a construção de sistemas que possam trabalhar com as tecnologias disponíveis em novas plataformas.

O Enterprise COBOL oferece suporte nativo para XML, JSON e Java, tratamento mais eficiente de dados UTF-8, endereçamento de 64 bits em programas batch e aderência aos padrões ISO 2002 e 2014, permitindo por exemplo a criação de itens elementares com tamanho dinâmico e funções definidas pelo usuário.

A migração de programas para o compilador mais recente

Apesar de alguns dos compiladores mencionados neste artigo terem sido lançados há décadas, não é incomum encontrar ainda hoje programas em produção que foram construídos para eles.

Os motivos que fazem com que uma instalação opte por não migrar imediatamente para novos compiladores são vários, mas basicamente eu poderia arriscar uns três:

  • A expectativa de que “o COBOL não vai durar muito tempo”, uma premissa que em algum momento os tomadores de decisão percebem que era falsa;
  • A impressão de que “não precisam dos novos recursos”, que cai por terra quando se deparam com uma necessidade de inovação que não podem mais acompanhar;
  • A convicção de que “é mais importante gastar dinheiro com outra coisa”, uma decisão estratégica que com o tempo pode se mostrar acertada ou não.

O fato é que atualizar um programa do OS/VS COBOL para que ele possa ser compilado no Enterprise COBOL for Z/OS exige um esforço maior do que a adaptação de um programa desenvolvido para o COBOL for OS/390.

Algumas diretivas de compilação e elementos da linguagem precisam ser modificados, ou simplesmente eliminados, para que o programa mantenha o mesmo comportamento e a mesma funcionalidade.

Fontes:
IBM VS COBOL for OS/VS COBOL V2.4
IBM COBOL for MVS & VM Version 1 (Sales Manual)
IBM COBOL for OS/390 & VM Version 2 Release 1 (Sales Announcement)
Enterprise COBOL for Z/OS, v6.3: Migration Guide

Deixe um comentário

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