| Bellacosa Mainframe e os ponteiros de memoria em cobol Parte IV |
COBOL Ponteiros de Memória: Os Cristais Kyber Escondidos do IBM Z
Parte 4 – O Padawan Avançado
COBOL, Metal C, APIs, Buffers Compartilhados, JSON, MQ e as Técnicas Jedi de Alto Desempenho no IBM Z
Por Bellacosa Mainframe
"O Padawan aprende MOVE. O Cavaleiro aprende BASED. O Mestre aprende que um ponteiro pode conectar universos inteiros."
Mestre Bellacosa Sysprog Jedi
Introdução
Chegamos ao último módulo do Holocron dos Ponteiros COBOL.
Nas partes anteriores aprendemos:
Parte 1
USAGE POINTER
ADDRESS OF
SET
AMODE
Heap
Stack
Parte 2
BASED
ALLOCATE
FREE
CEEGTST
Estruturas dinâmicas
Parte 3
SOC4
Memory Leak
Overlay
CEEDUMP
IPCS
Fault Analyzer
O jovem Padawan então pergunta:
Mestre...
Eu entendi os ponteiros.
Mas onde eles realmente são usados?
O mestre aponta para um gigantesco IBM z17.
E responde.
Em praticamente todos os lugares importantes.
O grande segredo
Poucos desenvolvedores percebem.
Mas produtos IBM utilizam ponteiros intensivamente.
Exemplos.
CICS
DB2
MQ
LE
z/OS
TCP/IP
JES2
JES3
RACF
SMF
VSAM
IMS
Todos.
O COBOL moderno
COBOL não vive sozinho.
Ele conversa.
Com:
C
Metal C
Assembler
Java
MQ
JSON
REST
Sockets
E o idioma dessa conversa é.
Ponteiros.
COBOL e C
Talvez seja o casamento mais comum.
C
Produz buffer.
COBOL
Consome.
Arquitetura.
C
↓
malloc()
↓
PTR
↓
COBOL
BASED
Exemplo conceitual
Programa C.
malloc(1024);
Retorna.
Endereço.
COBOL.
01 WS-PTR POINTER.
Recebe.
Associa.
SET ADDRESS OF BUFFER
TO WS-PTR
Pronto.
COBOL agora enxerga.
Memória criada em C.
Metal C
Mais interessante.
Executa próximo do hardware.
Pode usar.
64 bits.
Storage Keys.
Compartilhar.
Buffers.
Muito utilizado.
Middleware.
Shared Memory
Outro uso avançado.
Vários programas.
Mesmo buffer.
Visualmente.
Programa A
↓
Shared Buffer
↑
Programa B
Sem cópia.
Muito rápido.
MQ
Excelente exemplo.
MQGET
MQPUT
Mensagem.
Buffer.
COBOL.
Ponteiro.
Estrutura BASED.
Visualmente.
MQ
↓
Buffer
↓
PTR
↓
BASED
Processamento.
Zero cópia.
JSON
Muito utilizado hoje.
Imagine.
{
"name":"Bellacosa",
"idade":52
}
Parser.
Cria árvore.
Cada nó.
Possui ponteiros.
Pai.
Filho.
Irmão.
Exemplo.
JSON ROOT
↓
name
↓
idade
XML
Mesma ideia.
DOM.
Tree.
Ponteiros ligam.
Nós.
APIs
z/OS Connect.
Buffers.
Payload.
Parser.
Muito comum.
Sockets
TCP/IP.
Recebe.
4096 bytes.
Ponteiro.
COBOL lê.
Mais eficiente.
Cache
Outro caso.
Tabela gigante.
Ponteiro.
Evita copiar.
Exemplo.
100 MB.
Mover.
Custa.
Apontar.
8 bytes.
Quase instantâneo.
Tabelas in-memory
Excelente.
DB local.
Lookup rápido.
Hash.
B-tree.
Implementável.
Estruturas avançadas
Lista Duplamente Encadeada
NODE
PREV
NEXT
Árvore AVL
Balanceada.
Ponteiros.
B-tree
Muito utilizada.
Banco dados.
Grafo
Exemplo.
A
/ \
B C
\ /
D
Tudo possível.
Comparação com outras linguagens
| Linguagem | Ponteiros |
|---|---|
| COBOL | Sim |
| C | Sim |
| C++ | Sim |
| Rust | Controlado |
| Java | Referências |
| Go | Sim |
| Python | Oculto |
Curiosidade
Java.
Esconde.
COBOL.
Mostra.
C.
Expõe totalmente.
Rust.
Protege.
Quando usar?
Bellacosa recomenda.
Excelente.
Buffers
MQ
JSON
XML
APIs
Cache
LE
Middleware
Parsers
Estruturas dinâmicas
Quando evitar?
Cadastro.
Folha pagamento.
VSAM simples.
DB2 comum.
Relatórios.
Performance
Muito alta.
Sem MOVE.
Sem COPY.
Sem serialização.
Muito usada.
Em produtos IBM.
Segurança
Ainda importante.
Ponteiro errado.
Continua.
SOC4.
Heap inválido.
Overlay.
Corrompe.
Documentação
Obrigatória.
Desenhe.
Diagramas.
Exemplo.
PTR1
↓
NODE1
↓
NODE2
↓
NODE3
Ajuda manutenção.
Bellacosa Best Practices
Regra 1
Inicialize.
Sempre.
SET PTR TO NULL
Regra 2
Documente.
Regra 3
Libere.
Regra 4
Nunca reutilize.
Após FREE.
Regra 5
BASED bem definido.
Regra 6
Evite engenharia excessiva.
O Teste do Mestre
Pergunta ao Padawan.
Você precisa.
Criar.
Lista encadeada?
Não?
Use OCCURS.
Sim?
Use ponteiros.
Curiosidades Finais
A maioria dos desenvolvedores COBOL jamais precisará escrever uma árvore AVL.
Ou um parser XML próprio.
Ou um cache compartilhado.
Ou uma estrutura dinâmica baseada em CEEGTST.
Mas os profissionais que sabem fazer isso normalmente pertencem a grupos bastante especializados:
Sysprogs
Middleware Engineers
Desenvolvedores CICS
Equipes MQ
Produtos IBM
Desenvolvedores de Frameworks
Especialistas em LE
Equipes de Modernização IBM Z
O Conselho Final do Mestre Bellacosa
Os ponteiros em COBOL são quase como cristais Kyber escondidos em uma antiga câmara do templo IBM Z.
Durante décadas, muitos desenvolvedores passaram por eles sem percebê-los.
Outros ouviram histórias assustadoras sobre SOC4, overlays e memory leaks e decidiram nunca tocá-los.
E alguns poucos escolheram estudá-los profundamente.
Esses poucos descobriram algo fascinante.
Ponteiros não servem apenas para criar problemas.
Eles são a base invisível que sustenta grande parte das tecnologias modernas do ecossistema IBM Z.
São eles que permitem compartilhar buffers entre linguagens.
São eles que fazem parsers navegarem por documentos JSON gigantescos.
São eles que ajudam produtos IBM a movimentar milhões de mensagens MQ por segundo.
São eles que transformam estruturas estáticas em sistemas vivos, capazes de crescer, adaptar-se e responder dinamicamente às necessidades do negócio.
Mas existe uma última lição.
Talvez a mais importante.
Um ponteiro não possui moral.
Ele não distingue sabedoria de imprudência.
Ele apenas aponta.
E cabe ao desenvolvedor decidir se está usando esse poder para construir um elegante mecanismo de alto desempenho ou para abrir um portal direto para um CEEDUMP de 500 páginas às três horas da manhã de um fechamento bancário.