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

segunda-feira, 13 de outubro de 2014

Iniciação ao REXX – Quando o Mainframe Te Apresenta um Novo Amigo

 


Iniciação ao REXX – Quando o Mainframe Te Apresenta um Novo Amigo

“REXX não é moda. REXX é sobrevivência.”

Quem trabalha com z/OS, z/VM ou IBM Z cedo ou tarde chega a essa constatação:
não importa quantos produtos enterprise você tenha, sempre haverá aquele momento em que o problema é pequeno demais para COBOL, complexo demais para JCL e burocrático demais para justificar uma nova ferramenta.

É exatamente nesse espaço — invisível para muitos — que mora o REXX.

Subestimado, silencioso, quase sempre ignorado… até o dia em que você descobre que ele resolve 80% das dores do dia a dia com meia dúzia de linhas.

Este post é um convite:
👉 conhecer o REXX não como linguagem, mas como companheiro de trincheira no mainframe.



📜 Um pouco de história (porque nada no mainframe surge do nada)

O REXX (Restructured Extended Executor) nasceu em 1979, dentro da IBM, criado por Mike Cowlishaw.
A motivação era simples e genial:

Criar uma linguagem fácil de ler, difícil de quebrar e totalmente integrada ao sistema.

Enquanto o mundo brigava com sintaxe pesada, pontuação excessiva e códigos ilegíveis, o REXX nasceu com uma ideia revolucionária para a época:

  • tudo é string

  • tipagem dinâmica

  • sintaxe próxima do inglês

  • tolerância a erro humano

📌 Curiosidade:
REXX é mais antigo que Perl, Python e Ruby — e já fazia muita coisa que elas só popularizaram décadas depois.


🧠 REXX não vive sozinho: ambientes de processamento e comando

Aqui está o primeiro choque para quem vem de linguagens “tradicionais”:

👉 REXX não existe fora de um ambiente.

Antes de escrever código, você precisa entender onde ele roda e com quem ele conversa.

Ambientes de Processamento

  • TSO/E

  • ISPF

  • Batch TSO

  • Batch não-TSO

  • z/VM (CMS / CP)

O mesmo EXEC pode se comportar de forma totalmente diferente dependendo do ambiente.

📌 Easter egg de sobrevivência:

Se você não sabe em que ambiente está, o erro não é do REXX — é seu.


Ambientes de Comandos

REXX não executa comandos diretamente.
Ele endereça comandos a um ambiente específico.

address tso "listcat level('USER01')" address ispexec "display panel(MYPANEL)"

Isso explica por que REXX é tão poderoso:
ele fala a língua do sistema.


🧱 Fundamentos do REXX – Simples, mas não simplório

Filosofia da linguagem

  • Tudo é string

  • Conversão automática quando necessário

  • Pouca pontuação

  • Código legível

  • Menos regras, mais resultado

say 'Hello, Mainframe!'

Sem ponto e vírgula.
Sem BEGIN obrigatório.
Sem cerimônia.

📌 Curiosidade perigosa:
Variáveis não inicializadas não geram erro.
Elas retornam o próprio nome.
Ótimo para debug… péssimo se você não souber 😄


Entrada, saída e lógica

  • SAY → saída

  • PULL → entrada (stack)

  • IF / THEN / ELSE

  • DO / END

  • EXIT

Aqui o REXX começa a mostrar sua vocação: automatizar decisões, não apenas executar código.


🖥️ REXX e o Ambiente TSO – Onde a mágica começa

Com REXX você:

  • aloca datasets

  • consulta catálogos

  • automatiza comandos

  • elimina JCL desnecessário

address tso "allocate fi(arq1) da('user.test.ps') shr" address tso "listalc"

📌 Comentário Bellacosa:
REXX + TSO = menos JCL, menos erro, menos dor de cabeça.


📦 CLISTs x EXECs – O passado e o presente

CLIST fez história.
Mas o REXX fez melhor.

  • EXECs são mais poderosos

  • Mais legíveis

  • Mais fáceis de manter

  • Melhor integração

Entender a sequência de busca (SYSEXEC, SYSPROC…) é obrigatório.

📌 Easter egg clássico:
“EXEC não encontrado” quase sempre é DD errado, não código errado.


🔁 Programação REXX – Onde o iniciante vira sysprog

Aqui o REXX mostra que não é brinquedo:

  • Funções e subrotinas

  • Escopo de variáveis

  • DO composto

  • ITERATE e LEAVE

  • SELECT (case statement elegante)

  • SIGNAL e SIGNAL VALUE

  • INTERPRET (meta-programação!)

cmd = "say 'REXX é poderoso'" interpret cmd

📌 Comentário raiz:
INTERPRET é um sabre de luz.
Poderoso… mas não entregue para qualquer padawan.


🌳 Variáveis, Strings e o poder do PARSE

Stems – arrays antes dos arrays

nome.1 = 'Ana' nome.2 = 'João' nome.0 = 2

PARSE – o superpoder escondido

parse var linha campo1 ',' campo2

📌 Curiosidade:
PARSE elimina dezenas de IFs, SUBSTRs e gambiarras.


📂 EXECIO – O mini DFSORT do dia a dia

"EXECIO * DISKR ARQ1 (STEM LIN.)"

Com EXECIO você:

  • lê arquivos

  • grava datasets

  • processa linhas

  • automatiza relatórios

Tudo sem sair do REXX.


🧪 Depuração – Porque errar faz parte

REXX não te abandona quando algo dá errado:

  • TRACE

  • RC

  • SIGL

  • SOURCELINE

  • CONDITION

📌 Curiosidade histórica:
Debug nativo em REXX era luxo quando muitas linguagens nem sonhavam com isso.


⚙️ Batch, endereços e ambientes avançados

REXX roda:

  • em batch TSO

  • fora do TSO

  • em múltiplos ambientes de comando

say address()

📌 Comentário Bellacosa:

Antes de perguntar “por que falhou”, pergunte “onde estou rodando”.


🚀 Compilador REXX – Performance e proteção

Sim, REXX pode ser compilado:

  • melhora performance

  • protege código

  • usado em ambientes críticos

Mesmo compilado, ele não perde sua alma dinâmica.


☕ Conclusão – Por que REXX vira amigo

REXX não tenta competir com COBOL.
Não substitui Assembler.
Não briga com produtos enterprise.

Ele faz algo muito mais valioso:

👉 resolve problemas reais com o que já existe no sistema.

Quem domina REXX:

  • automatiza mais

  • depende menos

  • entende melhor o ambiente

  • sobrevive melhor no data center

No mainframe, o melhor amigo
não é o software mais caro…
é o que resolve às 3 da manhã.

Bem-vindo ao REXX.
Ele sempre esteve aí. ☕🖥️