Translate

Mostrar mensagens com a etiqueta RENT. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta RENT. Mostrar todas as mensagens

quinta-feira, 2 de julho de 2026

As 16 Recomendações da IBM que Todo Programador COBOL Padawan Deveria Conhecer

 

Bellacosa Mainframe e 16 recomendacoes Jedi para seu programa COBOL século XXI

☕ Um Café no Bellacosa Mainframe

As 16 Recomendações da IBM que Todo Programador COBOL Padawan Deveria Conhecer

Da Era dos Cartões Perfurados ao IBM Z Moderno: Como Escrever COBOL Preparado para os Próximos 30 Anos

"A maior diferença entre um Programador COBOL Júnior e um Arquiteto Mainframe não está em quantos comandos ele conhece, mas em entender por que a linguagem evoluiu."

Existe uma frase muito comum entre desenvolvedores iniciantes:

"Sempre fizemos assim."

Ela parece inofensiva.

Mas, no mundo Mainframe, ela pode esconder décadas de dívida técnica.

Muitos sistemas COBOL que ainda executam hoje foram escritos quando:

  • o IBM System/360 ainda era novidade;

  • cartões perfurados eram utilizados;

  • memória era medida em kilobytes;

  • não existia Internet;

  • não existia Java;

  • não existia JSON;

  • ninguém imaginava APIs REST.

Mesmo assim, esses sistemas continuam processando bilhões de dólares diariamente.

Então surge uma pergunta inevitável:

Se eles funcionam tão bem, por que a IBM continua evoluindo o COBOL?

A resposta é simples.

Porque o mundo mudou.

O hardware mudou.

Os processadores IBM Z mudaram.

O Language Environment (LE) mudou.

As aplicações passaram a conversar com Java, Python, Node.js, microsserviços, OpenShift, APIs REST e serviços em nuvem.

O COBOL também precisou evoluir.

E é exatamente isso que veremos neste café.


A filosofia da IBM

Existe um detalhe curioso.

A IBM raramente muda uma linguagem apenas porque existe uma novidade tecnológica.

Ela muda quando existe ganho real.

Os princípios normalmente são:

  • mais segurança

  • mais desempenho

  • menos CPU

  • menos manutenção

  • melhor integração

  • melhor diagnóstico

  • maior reutilização

Sempre que surgir uma recomendação da IBM, pergunte:

"Qual problema essa mudança resolveu?"

Essa pergunta transforma um Padawan em um profissional que entende arquitetura.


1. STOP RUN → GOBACK

Provavelmente a recomendação mais conhecida.

Durante décadas escrevíamos:

STOP RUN.

Hoje, novos projetos costumam utilizar:

GOBACK.

Por quê?

Imagine um restaurante.

Você pede um café.

O garçom leva até sua mesa.

Quando termina de beber, o correto é devolver a xícara ao garçom.

Não faz sentido fechar o restaurante inteiro.

Foi exatamente isso que aconteceu com o COBOL.

Nos anos 60 o programa era praticamente o dono da execução.

Hoje ele normalmente é apenas um componente.

Pode ser chamado por:

  • outro COBOL

  • CICS

  • IMS

  • Java

  • API REST

  • MQ

  • z/OS Connect

Se um módulo chamado executar STOP RUN...

Toda a Run Unit termina.

Com GOBACK...

O controle simplesmente retorna ao chamador.

Dica Bellacosa

Sempre imagine:

"Meu programa está prestando um serviço."

Quem chamou deve decidir quando terminar a aplicação.


2. NUMCHECK

Todo programador já viu um S0C7.

Normalmente ele aparece na madrugada.

Em produção.

Na sexta-feira.

O motivo quase sempre é simples.

Dados inválidos.

Exemplo:

MOVE "ABC" TO WS-VALOR.
ADD 10 TO WS-VALOR.

Visualmente parece correto.

Na prática...

Explode.

NUMCHECK faz o compilador inserir verificações para identificar esse tipo de problema antes que ele vire um incidente.

Curiosidade

Muitos S0C7 não nascem onde ocorrem.

O dado inválido pode ter sido gravado horas antes por outro programa.


3. SSRANGE

Imagine um armário com 100 gavetas.

Você tenta abrir a gaveta 101.

Ela simplesmente não existe.

Sem SSRANGE...

Seu programa pode acessar memória indevida.

Com SSRANGE...

O erro é detectado imediatamente.

Exemplo:

01 TABELA.
   05 ITEM OCCURS 100 TIMES.

MOVE "X" TO ITEM(101).

Esse erro pode permanecer escondido durante anos.

Até que um dia...

Produção.


Curiosidade

Grande parte dos erros difíceis de reproduzir está relacionada ao acesso indevido de memória.

SSRANGE ajuda justamente nisso.


4. TEST

Quantos DISPLAY você já encontrou em produção?

DISPLAY "CHEGUEI AQUI".

DISPLAY SQLCODE.

DISPLAY WS-CLIENTE.

Eles ajudam?

Sim.

Mas apenas temporariamente.

Hoje existem ferramentas de Debug muito mais completas.

Com TEST, o programa pode ser analisado sem transformar o código em uma árvore de DISPLAY.


5. Unicode

Durante décadas tudo era EBCDIC.

Hoje recebemos:

  • JSON

  • XML

  • APIs

  • Web

  • Smartphones

  • Emojis

  • Idiomas internacionais

O COBOL moderno suporta Unicode.

Isso significa muito mais integração.

Imagine um banco atendendo clientes no Japão, Brasil e Alemanha.

Tudo utilizando a mesma aplicação.


Curiosidade

Muitos desenvolvedores COBOL nunca perceberam que o Enterprise COBOL moderno possui excelente suporte a Unicode.


6. JSON PARSE

Há alguns anos montar JSON significava algo parecido com isto:

STRING "{"

...

"}"

Muito código.

Muito risco.

Muito difícil de manter.

Hoje basta utilizar:

JSON GENERATE.

Ou

JSON PARSE.

O compilador faz praticamente todo o trabalho.


Isso muda completamente a modernização

Imagine integrar COBOL com:

  • React

  • Angular

  • Flutter

  • Java

  • Python

JSON virou a linguagem universal.


7. XML PARSE

O mesmo aconteceu com XML.

Antes era comum utilizar:

UNSTRING.

INSPECT.

STRING.

Hoje o compilador entende XML nativamente.

Menos código.

Menos bugs.

Mais produtividade.


8. RENT

Talvez uma das opções menos conhecidas pelos iniciantes.

RENT significa:

Reentrant.

Ou seja...

O programa pode ser executado simultaneamente por diversos usuários.

Imagine um banco.

Cinco mil clientes consultando saldo.

O mesmo programa atende todos.

Isso só funciona porque ele foi escrito corretamente.


Dica

Sempre evite gravar informações temporárias em áreas compartilhadas.


9. DYNAM

No passado quase tudo era ligado durante o Link-Edit.

Hoje queremos mais flexibilidade.

CALL dinâmico permite substituir módulos sem reconstruir toda a aplicação.

É um grande aliado em ambientes modernos.


10. EVALUATE

Existe um momento na vida de todo Padawan em que ele escreve isto:

IF
ELSE
IF
ELSE
IF
ELSE

Depois de alguns meses...

Nem ele entende mais.

EVALUATE resolve exatamente isso.

Exemplo:

EVALUATE WS-TIPO

WHEN 1

WHEN 2

WHEN 3

WHEN OTHER

END-EVALUATE

Muito mais limpo.


11. END-IF

Antigamente muitos programas dependiam de ponto final e NEXT SENTENCE.

Isso gerava ambiguidades.

Hoje escrevemos:

IF ...

END-IF

O compilador entende exatamente onde cada bloco termina.


12. Intrinsic Functions

Durante muitos anos criávamos rotinas para tudo.

Hoje o compilador já oferece dezenas de funções.

Exemplos:

FUNCTION CURRENT-DATE

FUNCTION LENGTH

FUNCTION TRIM

FUNCTION LOWER-CASE

FUNCTION UPPER-CASE

Além de deixar o código mais elegante, elas costumam ser mais eficientes.


13. Evitar ALTER

ALTER era considerado brilhante.

Na década de 70.

Hoje virou pesadelo.

Ele altera dinamicamente o fluxo do programa.

Resultado:

  • difícil de entender;

  • difícil de depurar;

  • difícil de otimizar.

Por isso praticamente desapareceu dos novos projetos.


14. Reduzir GO TO

Existe um mito.

GO TO não é proibido.

Mas o excesso dele transforma um programa em um labirinto.

Imagine tentar seguir uma história cuja página seguinte muda aleatoriamente.

É exatamente essa sensação.

PERFORM e EVALUATE tornam o fluxo muito mais claro.


15. Migrar para Enterprise COBOL 6.x

Essa talvez seja a maior evolução dos últimos anos.

O compilador moderno entende muito melhor os processadores IBM Z atuais.

Isso significa:

  • menos CPU;

  • otimizações automáticas;

  • melhores diagnósticos;

  • suporte ampliado a JSON e XML;

  • novas funções intrínsecas.

Em muitos casos, apenas recompilar um programa com ajustes adequados já produz ganhos perceptíveis de desempenho.


16. Pensar em Integração

Esta talvez seja a maior mudança cultural.

Antes escrevíamos programas Batch.

Hoje escrevemos serviços corporativos.

Um programa COBOL pode atender:

  • Mobile Banking

  • Internet Banking

  • PIX

  • APIs REST

  • Java

  • Python

  • Node.js

  • OpenShift

  • Mensageria MQ

O código precisa nascer preparado para esse mundo.


O impacto nos programas antigos

A boa notícia é que a IBM sempre valorizou compatibilidade. Muitos programas escritos há décadas ainda compilam e executam nas versões atuais do Enterprise COBOL.

Isso, porém, não significa que estejam aproveitando os recursos modernos.

É comum encontrar aplicações com:

  • STOP RUN em todos os módulos;

  • dezenas de GO TO;

  • ALTER;

  • manipulação manual de XML e JSON;

  • ausência de verificações de dados;

  • poucas opções de diagnóstico.

Esses programas continuam funcionando, mas tendem a ser mais difíceis de manter, testar e integrar.

Modernizar não significa reescrever tudo. Em muitos casos, basta evoluir gradualmente: substituir comandos antigos, ativar opções do compilador, introduzir funções intrínsecas e organizar melhor o código.


A evolução de um Programador COBOL

Todo desenvolvedor passa por etapas.

Padawan

Aprende a sintaxe.

Consegue compilar.

Resolve problemas.

Programador

Começa a reutilizar código.

Escreve módulos.

Documenta interfaces.

Desenvolvedor Sênior

Pensa em desempenho.

CPU.

Memória.

Escalabilidade.

Arquiteto

Pensa no sistema inteiro.

Integração.

Disponibilidade.

Evolução.

Governança.

Perceba que, à medida que você cresce, a linguagem deixa de ser o foco principal. O importante passa a ser a qualidade das decisões.


O Mainframe moderno

Existe um mito antigo de que o Mainframe "parou no tempo".

Nada poderia estar mais distante da realidade.

Hoje um IBM Z pode:

  • expor APIs REST;

  • consumir serviços externos;

  • executar aplicações Java;

  • trabalhar com contêineres;

  • integrar-se ao OpenShift;

  • processar JSON e XML;

  • utilizar DevOps, Git e pipelines CI/CD;

  • compartilhar dados em tempo real com aplicações distribuídas.

O COBOL moderno acompanha essa evolução. As recomendações da IBM existem justamente para que o código continue relevante nesse novo cenário.


Conclusão

Existe uma frase que resume toda essa evolução:

"O melhor código não é aquele que apenas funciona hoje; é aquele que continuará funcionando, sendo compreendido e evoluído daqui a vinte anos."

As recomendações da IBM não representam uma ruptura com o passado. Elas representam a continuidade de uma filosofia que sempre guiou o Mainframe: estabilidade, desempenho, confiabilidade e evolução gradual.

Trocar STOP RUN por GOBACK, utilizar NUMCHECK, adotar SSRANGE nos testes, explorar JSON PARSE, JSON GENERATE, XML PARSE, RENT, funções intrínsecas e estruturas mais legíveis não é seguir uma moda. É escrever código preparado para um ambiente onde COBOL conversa diariamente com APIs, microsserviços, aplicações móveis e plataformas em nuvem.

Como Programador COBOL Padawan, seu objetivo não deve ser apenas aprender comandos. Deve ser entender por que eles existem, quando utilizá-los e como eles ajudam a construir sistemas capazes de sobreviver por décadas.

No Bellacosa Mainframe, costumamos dizer que a verdadeira modernização não começa com uma nova tecnologia. Ela começa quando o desenvolvedor muda sua forma de pensar. O compilador evolui, o hardware evolui, o IBM Z evolui — e o profissional que acompanha essa jornada deixa de apenas escrever programas para construir soluções que atravessam gerações.


segunda-feira, 1 de abril de 2019

☕💥 A Jornada do Padawan COBOL – Parte 4 Desvendando o Universo dos CALLs no Mainframe

 

Bellacosa Mainframe apresenta o CALL em Cobol Parte IV

☕💥 A Jornada do Padawan COBOL – Parte 4

Desvendando o Universo dos CALLs no Mainframe

RENT, NORENT, Reentrância, Thread Safety, HEAP, STACK, CICS, LE, AMODE 31/64 e os Segredos dos Arquitetos IBM Z

Ou como descobrir que um programa COBOL pode ser executado por milhares de usuários ao mesmo tempo sem enlouquecer

Por Vagner Bellacosa – Bellacosa Mainframe


O Dia em que o Padawan descobre que o mesmo programa atende 5.000 usuários

Até agora aprendemos:

✔ Static Call

✔ Dynamic Call

✔ By Reference

✔ By Content

✔ Ponteiros

✔ CEEDUMP

✔ Troubleshooting

Mas existe uma pergunta interessante.

Como um banco consegue executar o mesmo programa COBOL para milhares de clientes simultaneamente?


O Problema

Imagine o programa:

PROGRAMA CLIENTE01

Sendo executado por:

Cliente A

Cliente B

Cliente C

Cliente D

Cliente E

...

Cliente 5.000

Ao mesmo tempo.


O pesadelo

Cliente A

Saldo = 1000

Cliente B

Saldo = 5000

Programa compartilha memória.

Resultado:

Cliente A vê saldo de B.

Cliente B recebe extrato de A.

Produção vira caos.


O conceito de Reentrância

IBM resolveu isso décadas atrás.

Criou:

RENT

Reentrant

Programa reentrante


Significa:

Código compartilhado.

Dados privados.


Visualmente


PROGRAMA COBOL

+----------------+
|     CÓDIGO     |
+----------------+
        |
        |
        |
+-------+-------+-------+

T1      T2      T3

Dados   Dados   Dados



O compilador RENT

Compilação:

RENT

ou

PROCESS(RENT)

O que muda?

Código

Read Only

Variáveis

Área privada.


Vantagens

Menos memória.

Melhor CICS.

Escalável.

Thread Safe.


O que não pode fazer?

Modificar código.

Guardar estado global.

Self-modifying.


O vilão

WORKING-STORAGE


Padawan pensa:

WS é lindo.

IBM pensa:

Depende...


Exemplo

WORKING-STORAGE.

01 WS-COUNTER PIC 9(5).

Programa chamado

100 vezes.

WS continua vivo.


Execução 1

contador=10

Execução 2

contador=11

Execução 3

contador=12


Problema em CICS.

Pode gerar corrupção.


O herói esquecido

LOCAL-STORAGE

Pouca gente usa.

IBM ama.


Exemplo

LOCAL-STORAGE.

01 LS-COUNTER PIC 9(5).

Nova chamada

Nova variável.


Execução 1

LS=0

Execução 2

LS=0

Execução 3

LS=0


Perfeito.


Thread Safety

Muito falado.

Pouco entendido.


Thread Safe significa:

Múltiplas execuções.

Mesmo código.

Sem interferência.


Java

synchronized

COBOL

RENT

LOCAL STORAGE


CICS adora RENT

CICS pode manter

programas residentes.


Exemplo

Programa

PAGO001

Carregado

Uma vez.

Usado

10 mil vezes.


CPU agradece.


NORENT

O lado sombrio.


Programa exclusivo.


Cada usuário

carrega cópia.


Visualmente

USR1


PROG



USR2


PROG



USR3


PROG

Memória explode.


Quando usar?

Batch.

Programas antigos.

Nunca em CICS.


Language Environment

LE

O grande maestro.


Controla

Heap

Stack

Exceções

Storage

Runtime


Sem LE

caos.

Com LE

harmonia.


O STACK

Pilha temporária.


CALL

Empilha.

Retorno

Desempilha.


Exemplo

MAIN

↓

A

↓

B

↓

C

STACK


C

B

A

MAIN



Volta


MAIN

Heap

Área dinâmica.


Exemplo

ALLOCATE

FREE


Muito usado

XML

JSON

APIs


Configuração

CEEOPTS

HEAP

STACK

ANYHEAP


Problema comum

Heap pequeno.


Mensagem

CEE0813S

Solução

Aumentar.


AMODE

Modo de endereçamento.


AMODE 24

16 MB


AMODE 31

2 GB


AMODE 64

Exabytes

Praticamente infinito.


Por que importa?

Grandes buffers.

Big Data.

Analytics.

IA.


Ponteiros 64 bits

Exemplo

USAGE POINTER

ou

USAGE PROCEDURE-POINTER

CALL mais rápido possível

Arquitetos IBM fazem:

Static CALL

By Reference

RENT

Local Storage

Programa residente

CICS


Resultado

Milhões de chamadas.

Baixa CPU.


Microbenchmark imaginário

Método

Tempo

Static

1 ms

Dynamic

2 ms

By Content

5 ms

Carga módulo

15 ms


Técnicas Bellacosa

Dica 1

Sempre compile RENT.


Dica 2

Evite WS temporário.


Dica 3

Prefira Local Storage.


Dica 4

Static para alta frequência.


Dica 5

Nunca abuse de By Content.


Dica 6

Documente interfaces.


Dica 7

Teste concorrência.


Easter Egg IBM

Muitos programas antigos possuem:

GO TO 999999

Ou:

ALTER

Ou:

ENTRY

Ou:

EXHIBIT

E alguns desenvolvedores mais jovens acreditam que são lendas urbanas.

Não são.

Ainda existem.

Estão em produção.

Movimentando bilhões.

E provavelmente continuarão vivos por mais tempo do que muitas aplicações modernas.


Checklist Jedi da Performance

✅ Compilar RENT

✅ Utilizar Local-Storage

✅ Minimizar By Content

✅ Reutilizar programas residentes

✅ Evitar Dynamic CALL em loops críticos

✅ Configurar HEAP adequadamente

✅ Monitorar RMF

✅ Analisar SMF 30

✅ Medir CPU

✅ Testar concorrência

✅ Validar Thread Safety


A Filosofia Jedi do CALL – Parte 4

O Padawan iniciante pensa:

O programa funciona.

O desenvolvedor intermediário pensa:

O programa funciona rápido.

O Arquiteto Mainframe entende:

O programa deve funcionar rápido, consumir pouca memória, ser reentrante, sobreviver a milhares de usuários simultâneos, ser fácil de manter e continuar executando silenciosamente por décadas.

E é exatamente por isso que alguns dos sistemas mais importantes do planeta continuam rodando em IBM Z, executando milhões de CALLs, compartilhando código reentrante, administrando HEAPs, empilhando STACKs e servindo milhares de transações por segundo, enquanto o desenvolvedor Padawan toma seu café às três da manhã e finalmente compreende que, no Mainframe, a verdadeira Força sempre esteve na gestão inteligente da memória.


Na Parte 5, o Padawan poderá explorar os segredos finais dos CALLs: Binder, Link-Edit, PDQL, RMODE, FETCH, CANCEL, Program Objects, DLLs, módulos residentes, LPA, LINKLIST, otimizações z/Architecture e as técnicas usadas pelos veteranos para reduzir microssegundos em cargas de milhões de transações.


Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...