| Bellacosa Mainframe e o cobol variaveis bynary e comp |
☕ Um Café no Bellacosa Mainframe
O Mistério das Variáveis COMP e BINARY
Quando Sherlock Holmes Descobre que o Verdadeiro Crime Nunca Foi o Código COBOL... Foi Confundir Como os Números São Guardados na Memória
"Meu caro Watson... você observa um número. Eu observo como ele ocupa a memória."
— Sherlock Holmes, se tivesse trabalhado na IBM.
Introdução
Existem mistérios que desafiaram a humanidade durante séculos.
Quem foi Jack, o Estripador?
Onde está o Santo Graal?
Como Stonehenge foi construído?
Mas existe um enigma ainda mais intrigante para quem começa a programar em COBOL no IBM Mainframe.
Qual é a diferença entre COMP e BINARY?
À primeira vista parecem duas tecnologias diferentes.
Alguns livros usam COMP.
Outros usam BINARY.
Alguns dizem que um é antigo.
Outros afirmam que são iguais.
Há quem diga que COMP é mais rápido.
Há quem jure que BINARY é moderno.
Sherlock Holmes sorriria.
Porque esse é exatamente o tipo de caso onde as pistas estão todas espalhadas diante de nossos olhos.
Hoje vamos investigar este crime tecnológico.
Coloque seu chapéu de detetive.
Pegue sua lupa.
E venha até a Baker Street do IBM Z.
O jogo começou.
Capítulo 1 — A Cena do Crime
Watson chega ao laboratório.
Sobre a mesa existe um programa COBOL.
01 WS-IDADE PIC S9(4) COMP.
Ao lado existe outro.
01 WS-IDADE PIC S9(4) BINARY.
Watson pergunta:
— Holmes... qual deles é o correto?
Holmes acende o cachimbo.
Sorri.
E responde:
— Ambos.
Watson arregala os olhos.
— Como assim?
Holmes responde:
— Porque o verdadeiro mistério não está no nome.
Está na memória.
Capítulo 2 — O Primeiro Suspeito: DISPLAY
Antes de entender COMP precisamos compreender DISPLAY.
Imagine o número
12345
Quando declaramos
01 WS-NUMERO PIC 9(5).
o COBOL guarda exatamente cinco caracteres.
Na memória temos algo semelhante a:
+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+
Em hexadecimal:
F1 F2 F3 F4 F5
Cada dígito ocupa um byte.
É extremamente fácil de visualizar.
Mas existe um problema.
O processador IBM Z não faz contas com caracteres.
Ele faz contas com números binários.
Toda vez que executamos
ADD 1 TO WS-NUMERO
o compilador precisa:
Ler caracteres.
Converter para binário.
Somar.
Converter novamente.
Escrever caracteres.
Sherlock olha para Watson.
— Muito trabalho para adicionar apenas um.
Capítulo 3 — O Verdadeiro Assassino: Conversão
Esse é o verdadeiro culpado.
Não é a instrução ADD.
Não é o compilador.
Não é o COBOL.
O culpado é a conversão.
Imagine fazer milhões de conversões por segundo.
Agora imagine um banco processando:
cartões
PIX
TED
boletos
empréstimos
seguros
previdência
Tudo ao mesmo tempo.
Cada conversão custa CPU.
CPU custa dinheiro.
Holmes fecha o caderno.
— Encontramos o motivo.
Agora falta descobrir a solução.
Capítulo 4 — Surge o BINARY
Ao invés de guardar
1
2
3
o computador resolve guardar
1111011
que é
123 decimal
Não existem caracteres.
Existe apenas o número.
O processador entende isso imediatamente.
Sem tradução.
Sem conversão.
Sem intermediários.
É exatamente isso que faz
USAGE BINARY
Capítulo 5 — E onde entra o COMP?
Watson encontra outra pista.
Um programa de 1987.
PIC S9(9) COMP.
Outro de 1994.
PIC S9(9) COMP.
Outro de 2026.
PIC S9(9) BINARY.
Holmes sorri.
— Encontramos nosso suspeito favorito.
COMP.
Capítulo 6 — A Revelação
Nos primórdios do COBOL, cada fabricante possuía suas próprias extensões.
IBM utilizava
COMP
Outros fabricantes preferiam
BINARY
Com o passar das décadas a IBM resolveu tornar o nome mais explícito.
Assim nasceu oficialmente
USAGE BINARY
Mas para preservar bilhões de linhas existentes...
COMP permaneceu funcionando.
Sherlock fecha a investigação.
COMP e BINARY.
Mesmo armazenamento.
Mesmo código gerado.
Mesmo desempenho.
Nomes diferentes.
Mesmo suspeito.
Capítulo 7 — A Anatomia do Binário
Vamos abrir o corpo...
...do número.
Suponha
PIC S9(4) COMP.
O valor
123
vira
00000000 01111011
São apenas dois bytes.
Enquanto DISPLAY precisava de quatro caracteres...
COMP usa somente dois bytes.
Economia de memória.
Economia de CPU.
Maior velocidade.
Capítulo 8 — Quantos Bytes?
Sherlock desenha na lousa.
| Declaração | Bytes |
|---|---|
| S9(1) até S9(4) | 2 |
| S9(5) até S9(9) | 4 |
| S9(10) até S9(18) | 8 |
Curiosamente...
Mesmo que o número seja
1
um
PIC S9(18) COMP
continuará ocupando oito bytes.
Porque o espaço é reservado pelo tipo.
Não pelo conteúdo.
Capítulo 9 — O Cofre do Banco
Imagine um enorme banco.
Existem três cofres.
Primeiro cofre
DISPLAY.
Guarda tudo escrito.
Fácil de ler.
Difícil de calcular.
Segundo cofre
BINARY.
Guarda apenas números.
Perfeito para matemática.
Terceiro cofre
COMP-3.
Guarda cada dígito decimal exatamente.
Ideal para dinheiro.
Sherlock bate na mesa.
— Nunca misture os cofres.
Capítulo 10 — O Caso dos Centavos Perdidos
Suponha
19,99
Será que cabe perfeitamente em binário?
Não.
Assim como
1/3
não cabe exatamente em decimal.
Algumas frações decimais não possuem representação binária exata.
Por isso bancos usam
PIC S9(9)V99 COMP-3
Cada centavo é preservado.
Nenhum arredondamento inesperado.
Nenhum processo judicial.
Nenhum gerente desesperado.
Capítulo 11 — Quando Usar COMP?
Sherlock entrega uma lista.
✔ Contadores
✔ Loops
✔ Índices
✔ Número de registros
✔ Totalizadores inteiros
✔ Controle interno
✔ Sequenciadores
✔ Flags numéricas
✔ Códigos internos
✔ Chaves temporárias
Capítulo 12 — Quando NÃO Usar
Nunca para:
salários
juros
impostos
aplicações financeiras
câmbio
contas bancárias
Nesses casos...
COMP-3 reina absoluto.
Capítulo 13 — Um Passeio pela CPU do IBM Z
Quando o compilador encontra
ADD WS-A TO WS-B
com ambos em COMP/BINARY, ele pode gerar instruções nativas da arquitetura z/Architecture, como:
AH (Add Halfword)
A (Add)
AG (Add Grande)
AGR (Add Grande em Registrador)
O processador trabalha diretamente com inteiros binários.
É como entregar a Sherlock uma pista já traduzida.
Sem precisar chamar um intérprete.
Capítulo 14 — O Segredo que Quase Ninguém Conta
Existe uma razão histórica para encontrarmos milhões de variáveis COMP em sistemas bancários.
Durante décadas, praticamente toda a documentação IBM utilizava COMP.
Mesmo quando BINARY passou a existir, ninguém reescreveu bilhões de linhas de código.
Resultado?
Hoje encontramos programas escritos em 1985 que compilam sem qualquer alteração em um IBM z17.
Essa é uma das maiores demonstrações da retrocompatibilidade do ecossistema IBM.
Enquanto outras plataformas obrigam reescritas completas, o Mainframe preserva investimentos de décadas.
Esse talvez seja o maior "superpoder" do IBM Z.
Capítulo 15 — E o Misterioso COMP-5?
Watson acredita que o caso terminou.
Holmes sorri novamente.
— Ainda existe outro personagem.
COMP-5.
Ele também utiliza armazenamento binário.
Mas, diferentemente de COMP/BINARY, segue mais de perto a representação inteira nativa da máquina, sendo muito usado em interfaces de baixo nível, chamadas de sistema, APIs, rotinas em C e integrações específicas no z/OS.
Não substitui COMP.
É uma ferramenta especializada.
Mais um suspeito inocentado.
Capítulo 16 — Passo a Passo para Escolher o Tipo Correto
Imagine que você está criando uma variável. Faça estas perguntas:
1. É texto?
Use
PIC X(...).
2. É um número apenas para exibição ou entrada do usuário?
Use
DISPLAY(padrão).
3. É um contador, índice ou acumulador inteiro?
Use
COMPouBINARY.
4. Representa dinheiro, impostos, juros ou valores decimais exatos?
Use
COMP-3.
5. Vai interoperar diretamente com APIs de baixo nível ou código em C?
Avalie
COMP-5.
Seguindo esse roteiro, a chance de errar diminui drasticamente.
Curiosidades de Baker Street
Curiosidade 1
A maioria dos iniciantes acredita que COMP significa "Compact".
Na verdade, historicamente o nome está associado à ideia de Computational, indicando um formato otimizado para processamento interno.
Curiosidade 2
Milhões de programas COBOL escritos nas décadas de 1970 e 1980 ainda utilizam exclusivamente COMP.
Curiosidade 3
Você pode passar anos trabalhando em Mainframe sem nunca encontrar uma variável declarada explicitamente como BINARY, embora ela esteja sendo usada o tempo todo sob o nome COMP.
Curiosidade 4
Em dumps de memória (CEEDUMP, IPCS ou Abend-AID), reconhecer rapidamente um campo COMP pode acelerar muito a identificação de corrupção de dados e problemas de alinhamento.
Easter Eggs Bellacosa Mainframe 🕵️
🔎 221B Baker Street = SYS1.PROCLIB
É dali que começam muitas investigações importantes.
🔎 Dr. Watson = Programador Júnior
Sempre faz a pergunta certa, mesmo sem perceber.
🔎 Sherlock Holmes = Analista de Performance
Enxerga conversões de dados onde ninguém mais vê.
🔎 Professor Moriarty = CPU em 99%
O verdadeiro vilão pode estar escondido em milhões de conversões desnecessárias entre DISPLAY e BINARY.
🔎 Scotland Yard = Operação do CPD
Chega quando o incidente já aconteceu.
🔎 A lupa de Holmes = IPCS, Abend-AID, Fault Analyzer e SMF
Ferramentas que revelam pistas invisíveis ao olho comum.
Conclusão — O Caso Está Encerrado
Sherlock fecha o dossiê.
Watson observa as anotações.
A resposta era muito mais simples do que parecia.
COMP e BINARY não são rivais.
São duas faces da mesma moeda no Enterprise COBOL para IBM Z.
O verdadeiro aprendizado não é decorar palavras-chave, mas compreender como os dados vivem na memória. É essa compreensão que diferencia quem apenas escreve programas de quem realmente entende a plataforma.
Da próxima vez que você encontrar:
01 WS-CONTADOR PIC S9(9) COMP.
não enxergue apenas uma declaração.
Veja décadas de história da computação corporativa, bilhões de linhas de código preservadas, a elegância da retrocompatibilidade da IBM e um processador IBM Z executando operações binárias com precisão quase cirúrgica.
Porque, assim como Sherlock Holmes nunca resolvia um caso olhando apenas para o suspeito, um grande programador COBOL nunca olha apenas para a variável.
Ele observa o que está escondido por trás dela.
E é justamente ali, na memória, que mora o verdadeiro mistério.
O Grande Mistério da Memória
DADO COBOL │ ┌───────────────┼───────────────┐ │ │ │ DISPLAY BINARY/COMP COMP-3 │ │ │ Texto Inteiro Binário Decimal Empacotado
1) DISPLAY
Como o ser humano enxerga
Número:
12345
Na memória
+----+----+----+----+----+ | F1 | F2 | F3 | F4 | F5 | +----+----+----+----+----+
ou
+---+---+---+---+---+ | 1 | 2 | 3 | 4 | 5 | +---+---+---+---+---+
Cada caractere ocupa
1 BYTE
Total
5 BYTES
✔ Fácil leitura
✔ Fácil gravação em arquivos texto
❌ CPU precisa converter para fazer contas
2) COMP / BINARY
Número
12345
Decimal
12345
Binário
00110000 00111001
Na memória
+--------+--------+--------+--------+ | 12345 | +--------+--------+--------+--------+
ou
00003039 (HEX)
Ocupa
4 BYTES
✔ Processador calcula diretamente
✔ Muito rápido
✔ Excelente para loops
✔ Excelente para contadores
Comparação Visual
DISPLAY
┌─┬─┬─┬─┬─┐ │1│2│3│4│5│ └─┴─┴─┴─┴─┘
COMP
┌─────────────────┐ │00003039 (HEX) │ └─────────────────┘
Mesmo número.
Representações totalmente diferentes.
3) COMP-3 (Packed Decimal)
Número
12345
Na memória
+----+----+----+ |12|34|5C| +----+----+----+
Cada byte guarda
2 dígitos
O último nibble
C
indica
positivo
Se negativo
D
Exemplo
12345 ↓ 12 34 5C
Ocupa
3 BYTES
Exemplo Financeiro
R$ 1523,87
COMP-3
152387C
Nenhum centavo perdido.
Nenhum arredondamento.
Precisão decimal absoluta.
4) COMP-5
Visualmente
COMP ┌────────────────┐ │ Inteiro Binário│ └────────────────┘
COMP-5
┌──────────────────────────────┐ │ Inteiro Nativo da Arquitetura│ └──────────────────────────────┘
Muito usado em
✔ APIs
✔ C
✔ LE
✔ Chamadas de Sistema
✔ Integração
Comparativo Geral
DISPLAY │ Fácil leitura humana │ Conversão obrigatória │ Mais CPU utilizada
↓
COMP/BINARY │ Número em Binário │ CPU calcula diretamente │ Muito rápido
↓
COMP-3 │ Decimal Exato │ Ideal para dinheiro
↓
COMP-5 │ Binário da Arquitetura │ APIs e Baixo Nível
Quantidade de Bytes
| Declaração | DISPLAY | COMP | COMP-3 |
|---|---|---|---|
| S9(4) | 4 | 2 | 3 |
| S9(9) | 9 | 4 | 5 |
| S9(18) | 18 | 8 | 10 |
Velocidade
DISPLAY READ ↓ Converter ↓ Somar ↓ Converter ↓ WRITE
CPU
██████████████████
COMP
READ ↓ SOMAR ↓ WRITE
CPU
██████
Quando usar?
DISPLAY
✔ Relatórios
✔ Tela
✔ Arquivos TXT
✔ Entrada do usuário
COMP/BINARY
✔ Contadores
✔ Índices
✔ Loops
✔ Acumuladores
✔ Controle interno
COMP-3
✔ Salário
✔ Juros
✔ PIX
✔ TED
✔ Bancos
✔ Impostos
✔ Contabilidade
COMP-5
✔ APIs
✔ DLL
✔ C
✔ LE
✔ z/OS
✔ Chamadas internas
Exemplo Real
01 WS-NOME PIC X(30). 01 WS-IDADE PIC S9(4) COMP. 01 WS-CONTADOR PIC S9(9) BINARY. 01 WS-SALARIO PIC S9(9)V99 COMP-3. 01 WS-API-CODE PIC S9(9) COMP-5.
Fluxo da CPU IBM Z
Programa COBOL │ ▼ Enterprise COBOL │ ▼ Instruções z/Architecture │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ DISPLAY COMP/BINARY COMP-3 Conversão Soma Direta Decimal Exato │ │ │ └───────────────┴───────────────┘ ▼ Resultado
Regra de Ouro
É TEXTO? ↓ DISPLAY
É CONTADOR? ↓ COMP ou BINARY
É DINHEIRO? ↓ COMP-3
É API? ↓ COMP-5
Bellacosa Mainframe — Dica do Detetive 🕵️
Sherlock Holmes olharia para uma variável e perguntaria: "Como ela é armazenada?" Antes mesmo de perguntar "Qual é o seu valor?".
No universo do IBM Mainframe, o segredo da performance não está apenas no algoritmo, mas na escolha correta do formato de armazenamento. Saber quando usar DISPLAY, COMP/BINARY, COMP-3 ou COMP-5 é uma habilidade que diferencia um programador COBOL iniciante de um verdadeiro especialista em IBM Z.
Sem comentários:
Enviar um comentário