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

quinta-feira, 19 de agosto de 2021

REXX – Introducing My New Friend

 



REXX – Introducing My New Friend

(ou: como eu parei de torcer o nariz e ganhei um aliado no z/OS e z/VM)

“Às vezes o melhor software não é o mais caro, nem o mais novo. É o que já está aí, esperando você parar de ignorar.”

Navegar pelas complexidades do z/OS e do z/VM exige um arsenal respeitável de ferramentas. JCL, COBOL, assembler, CLIST, utilitários do sistema, produtos terceiros… tudo isso faz parte do dia a dia.
Mas em muitos momentos, o tool ideal simplesmente não existe, é caro demais, ou não justifica um processo de aquisição que passa por 37 comitês, 12 reuniões e 2 meses de espera.

Foi exatamente aí que, meio a contragosto, eu resolvi sair da zona de conforto e mergulhar em uma linguagem que sempre esteve ali, silenciosa, quase invisível: REXX.

Confesso: no começo houve resistência.
“Mais uma linguagem?”
“Isso não é coisa de CLIST melhorado?”
“Será que vale o tempo?”

Spoiler: vale. E muito.
Hoje, o REXX não é só uma linguagem — é meu novo amigo no mainframe.




📜 1. Um breve passeio pela história das linguagens

Antes de falar de REXX, precisamos contextualizar.

Da força bruta à legibilidade

  • Anos 40/50: código de máquina e Assembly — poder absoluto, legibilidade zero.

  • Anos 60: COBOL, FORTRAN — produtividade e portabilidade começam a surgir.

  • Anos 70: linguagens estruturadas, foco em legibilidade e manutenção.

  • Anos 80: linguagens de script e automação ganham espaço.

É nesse cenário que, em 1979, na IBM, surge o REXX (Restructured Extended Executor), criado por Mike Cowlishaw.



👉 O objetivo era claro:

Criar uma linguagem simples, legível, poderosa e tolerante a erros humanos.

Nada de pontuação excessiva, nada de sintaxe críptica.
REXX foi pensado para gente, não só para compiladores.

📌 Easter egg histórico:
Mike Cowlishaw também é o criador da notação decimal usada em IEEE 754-2008. Ou seja, o homem sabia exatamente o que estava fazendo.


🧑‍💻 2. O papel real de sysprogs e devs no z/OS e z/VM

Quem vive mainframe sabe:
o trabalho não é só programar.

No mundo real, fazemos:

  • Automação de tarefas repetitivas

  • Análise de datasets e catálogos

  • Interação com TSO/ISPF

  • Chamada de comandos do sistema

  • Tratamento de mensagens (WTO, WTOR, GETMSG)

  • Integração entre ferramentas

  • Prototipação rápida de soluções

  • “Apagar incêndio” às 3h da manhã 🔥

E aqui vem a pergunta fatal:

Você vai fazer tudo isso em COBOL compilado?

REXX entra exatamente nesse espaço:

  • Mais poderoso que CLIST

  • Mais simples que COBOL

  • Mais integrado que scripts externos


🔌 3. Integrando REXX ao seu workflow atual

REXX não substitui COBOL, PL/I ou Assembler.
Ele complementa.

Onde o REXX brilha:

  • Dentro do TSO

  • Em ISPF

  • Em batch

  • No z/VM (CMS, CP, EXECs)

  • Chamando utilitários do sistema

  • Orquestrando JCL

  • Automatizando ambientes

📌 Easter egg prático:
Você pode chamar IDCAMS, IEFBR14, SDSF, comandos MVS e até programas COBOL diretamente do REXX.

REXX é o cola tudo do mainframe.


🧠 4. Fundamentos e base teórica do REXX

Filosofia da linguagem

  • Tudo é string

  • Tipagem dinâmica

  • Sintaxe limpa

  • Código próximo do inglês

  • Pouca pontuação

  • Muito foco em legibilidade

Exemplo simples:

say 'Hello, mainframe world!'

Sem ponto e vírgula.
Sem BEGIN/END obrigatórios.
Sem drama.

Estrutura básica

  • Instruções lineares

  • Controle por IF, DO, SELECT

  • Funções internas riquíssimas

  • Integração nativa com o ambiente

Variáveis

nome = 'Bellacosa' say 'Bem-vindo,' nome

📌 Curiosidade:
Variáveis não inicializadas não quebram o programa.
Elas simplesmente retornam o próprio nome.
Isso é genial para debug… e perigoso se você não souber 😄


🧩 5. Pré-requisitos para aprender REXX

A boa notícia: poucos.

Idealmente você já conhece:

  • Conceitos básicos de mainframe

  • TSO/ISPF

  • JCL (ao menos leitura)

  • Dataset, PDS, PS, membros

  • Comandos básicos do sistema

Se você sabe navegar no ISPF, já está 50% pronto.


🛠️ 6. REXX na prática – exemplos do mundo real

Exemplo 1 – Listar datasets

address tso "listcat level('USER01')"

Exemplo 2 – Automatizar ISPF

address ispexec "control errors return" address ispexec "display panel(MYPANEL)"

Exemplo 3 – Batch REXX

//STEP1 EXEC PGM=IKJEFT01 //SYSTSPRT DD SYSOUT=* //SYSEXEC DD DISP=SHR,DSN=USER.REXX.LIB //SYSTSIN DD * %MEUREXX /*

📌 Easter egg avançado:
REXX pode ler e escrever datasets linha a linha com EXECIO.
Sim, você pode fazer mini-SORTs sem DFSORT.


🤯 7. Curiosidades que poucos contam

  • REXX existe fora do mainframe (OS/2, Windows, Linux)

  • É base de automação em vários produtos IBM

  • Muitos produtos “enterprise” usam REXX internamente

  • CLIST perdeu espaço por causa do REXX

  • É uma das linguagens mais subestimadas do ecossistema IBM Z


☕ Conclusão – Por que REXX virou meu novo amigo

REXX não é moda.
REXX não é hype.
REXX é eficiência silenciosa.

Ele resolve problemas reais:

  • rápido

  • integrado

  • sem burocracia

  • sem custo extra

  • com curva de aprendizado amigável

Se você trabalha com z/OS ou z/VM e ainda ignora o REXX, deixo o conselho de veterano:

Não subestime uma linguagem que a IBM colocou no coração do sistema.

Porque às vezes, o melhor amigo já estava no mainframe…
você só nunca tinha puxado assunto 😉


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í. ☕🖥️