Translate

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

sexta-feira, 7 de novembro de 2025

🔥 REXX: O “JSON DO MAINFRAME” ANTES DO JSON EXISTIR!

 

Bellacosa Mainframe apresenta o compound variables data stack no REXX

🔥 REXX: O “JSON DO MAINFRAME” ANTES DO JSON EXISTIR!

Compound Variables, Data Stack e os Superpoderes Secretos do TSO/E 🚀

“Enquanto muita gente acha que o mainframe era limitado nos anos 80… o REXX já fazia coisas que linguagens modernas demorariam décadas para popularizar.”
— Bellacosa Mainframe ☕💻


☕ Introdução — O Dia em que Descobri que o REXX Era MUITO Mais Moderno do que Parecia

Existe um momento na vida de todo programador mainframe em que ele percebe:

“Espera… isso aqui parece um Python disfarçado de terminal verde.”

E normalmente esse momento acontece quando ele aprende:

  • Compound Variables
  • OUTTRAP()
  • Data Stack

Porque aqui o REXX deixa de ser apenas:

“uma linguagemzinha de automação”

…e começa a revelar algo assustadoramente avançado.

Sim…

O REXX já possuía:

✅ Estruturas associativas
✅ Chaves dinâmicas
✅ Captura de stdout
✅ Filas e pilhas
✅ Estruturas pseudo-JSON
✅ Automação textual inteligente

…quando muita linguagem moderna ainda nem existia.


🧠 O “Pseudo-JSON” do Mainframe

Veja isto:

cliente.100.nome   = "VAGNER"
cliente.100.cidade = "ITATIBA"
cliente.100.cargo = "MAINFRAME SPECIALIST"

Agora compare com JSON moderno:

{
"cliente": {
"100": {
"nome": "VAGNER",
"cidade": "ITATIBA",
"cargo": "MAINFRAME SPECIALIST"
}
}
}

😳

Percebe o absurdo?

O REXX fazia isso décadas antes do JSON virar padrão mundial.


🔥 Compound Variables — O Recurso que Quase Ninguém Explora Direito

As famosas:

Stem Variables

Estrutura:

stem.tail

Exemplo:

usuario.nome

Onde:

ParteSignificado
usuario.stem
nometail

☠️ O Detalhe que Destrói Iniciantes

ISTO:

cliente

NÃO É IGUAL A:

cliente.

O ponto muda tudo.


🤯 O Stem Possui “Efeito Mágico”

Exemplo:

status. = "DESCONHECIDO"

Agora:

SAY status.job1
SAY status.job2
SAY status.qualquercoisa

Resultado:

DESCONHECIDO
DESCONHECIDO
DESCONHECIDO

Mesmo sem criar as variáveis individualmente.


🧙‍♂️ O Feitiço do Tail Dinâmico

Aqui o REXX começa a parecer bruxaria.

dia.1 = "SEG"
dia.2 = "TER"
dia.3 = "QUA"

x = 2

SAY dia.x

O interpretador resolve:

dia.2

Saída:

TER

⚡ Isso Era Um “HashMap” Antes do Java

Hoje faríamos:

Python

dias[x]

JavaScript

dias[x]

REXX (1980s 😎)

dia.x

☕ Easter Egg #1 — O “Banco de Dados” em REXX

Você pode montar estruturas absurdamente sofisticadas:

produto.100.desc  = "CAFÉ"
produto.100.preco = 15.90

produto.200.desc = "COBOL"
produto.200.preco = 9999.99

Consulta:

id = 200

SAY produto.id.desc

Resultado:

COBOL

Sim…

Você acabou de criar um mini banco key-value.


💣 OUTTRAP() — O Recurso que Faz Operadores Virarem Semideuses

Pouca gente entende o quão poderoso isso é.

O OUTTRAP captura saída textual de comandos TSO.


😳 O Terminal Vira Dados

Exemplo:

x = OUTTRAP("lista.")

"LISTALC STATUS"

x = OUTTRAP("OFF")

Agora:

lista.1
lista.2
lista.3

contêm TODA a saída do comando.


🚀 Isso é o Equivalente Mainframe de:

Linux

comando > arquivo

Python

subprocess.capture_output()

PowerShell

$result = command

Mas no TSO/E…

isso existia há MUITO tempo.


☕ Easter Egg #2 — O Parser Automático de LISTCAT

x = OUTTRAP("cat.")

"LISTCAT ENT(PROD.CLIENTES)"

x = OUTTRAP("OFF")

DO i = 1 TO cat.0

IF POS("TRACKS",cat.i) > 0 THEN
SAY "ALOCACAO:" cat.i

END

😎

O operador vira praticamente um “detetive do catálogo”.


🧨 A Data Stack — O Recurso Mais Perigoso do REXX

Aqui começam os poderes obscuros do TSO/E.

A Data Stack é:

uma pilha/fila dinâmica global


PUSH vs QUEUE

PUSH

PUSH "A"
PUSH "B"

Saída via PARSE PULL:

B
A

LIFO.


QUEUE

QUEUE "A"
QUEUE "B"

Saída:

A
B

FIFO.


🎮 Analogia Gamer

ComandoAnalogia
PUSHpilha de inventário
QUEUEfila de matchmaking

☠️ O Erro Mais Mortal do REXX

Se você terminar um exec deixando dados na stack…

…esses dados podem virar comandos TSO.

Sim.

COMANDOS.


😨 Exemplo de Filme de Terror Mainframe

QUEUE "DELETE PROD.CLIENTES"
EXIT

Se cair na stack errada…

adeus dataset.


🛡️ A Defesa dos Jedi Mainframers — NEWSTACK

Profissionais experientes SEMPRE usam:

ADDRESS TSO "NEWSTACK"

e depois:

ADDRESS TSO "DELSTACK"

☕ Easter Egg #3 — O “Sandbox” do REXX

O NEWSTACK funciona quase como:

  • container
  • sandbox
  • ambiente isolado

Décadas antes de Docker existir.

😎


🧠 O QUEUED() Salva Vidas

Antes de:

PARSE PULL linha

Faça:

IF QUEUED() > 0 THEN
PARSE PULL linha

Porque se stack estiver vazia…

o REXX tenta ler do terminal.

Em batch isso pode causar:

HANG
WAIT
ABEND OPERACIONAL
OPERADOR EM PÂNICO

🤯 MAKEBUF — O Recurso Ninja que Quase Ninguém Conhece

Sim…

o stack possui buffers internos.

ADDRESS TSO "MAKEBUF"

Pouquíssimos profissionais modernos usam isso.

Mas no passado…

isso era arma secreta de automações ISPF sofisticadas.


🚀 Exemplo Profissional Completo

Scanner Automático de Catálogo

/*-----------------------------------*/
/* BELLACOSA MAINFRAME SCANNER */
/*-----------------------------------*/

ADDRESS TSO "NEWSTACK"

x = OUTTRAP("ds.")

"LISTCAT LEVEL(PROD)"

x = OUTTRAP("OFF")

DO i = 1 TO ds.0

linha = ds.i

IF POS("NONVSAM",linha) > 0 THEN
SAY "DATASET ENCONTRADO:"
SAY linha
SAY "---------------------"

END

ADDRESS TSO "DELSTACK"

EXIT

☕ Easter Egg #4 — O “Python Invisível” do z/OS

Muita gente usa Python hoje para:

  • parse textual
  • automação
  • captura de comandos

Mas o TSO/E + REXX já fazia isso muito antes.


📜 Filosofia do REXX

O REXX foi criado para:

✅ produtividade
✅ legibilidade
✅ automação
✅ integração
✅ simplicidade

Por isso ele parece:

  • elegante
  • textual
  • flexível
  • “humano”

🤖 O Mainframe Era MUITO Mais Moderno do que Parecia

Quando alguém disser:

“mainframe é ultrapassado”

Mostre:

  • compound variables
  • OUTTRAP
  • stacks dinâmicas
  • parsing inteligente

E depois pergunte:

“Seu framework moderno faz isso tudo tão elegantemente?”

😏


☕ Conclusão — O Verdadeiro Poder do REXX

REXX nunca foi apenas “uma linguagem de scripts”.

Ele era:

um canivete suíço de automação textual corporativa

E quando combinamos:

  • Compound Variables
  • OUTTRAP()
  • Data Stack

…o TSO/E praticamente ganha superpoderes.


🚀 Bellacosa Mainframe Insight

“O REXX não envelheceu.
Apenas ficou escondido enquanto o resto do mundo reinventava suas ideias.” ☕💻