Czym jest CLIST i dlaczego warto go poznać
CLIST (Command List) to język skryptowy stworzony przez IBM do automatyzacji zadań na systemach mainframe z rodziny z/OS (wcześniej MVS, OS/390). Jeśli kiedykolwiek pracowałeś w środowisku TSO/ISPF — a w bankowości, ubezpieczeniach czy systemach rządowych wciąż sporo osób pracuje — prawdopodobnie spotkałeś CLIST, nawet jeśli nie zdawałeś sobie z tego sprawy.
CLIST nie jest sexy. Nie ma konferencji, nie ma Stack Overflow z tysiącami odpowiedzi, nie ma filmów na YouTube. Ale to język, który od dekad automatyzuje krytyczne procesy w jednych z najważniejszych systemów na świecie. Każdego dnia miliony transakcji bankowych, rezerwacji lotniczych i operacji ubezpieczeniowych przechodzą przez systemy, w których CLIST wciąż odgrywa rolę.
Dla współczesnego developera CLIST jest ciekawy z dwóch powodów. Po pierwsze, pokazuje, jak wyglądały „skrypty” zanim powstały bash, PowerShell czy Python. Po drugie, jeśli kiedykolwiek dostaniesz zlecenie modernizacji legacy systemów mainframe — a to rosnący rynek — znajomość CLIST będzie bezcenna.
Krótka historia i ewolucja
CLIST powstał w latach 70. jako część TSO (Time Sharing Option) dla systemu MVS firmy IBM. Początkowo był prostym mechanizmem do sekwencyjnego wykonywania komend TSO — coś jak batch file w DOS, ale na mainframe. Z czasem IBM dodawał nowe funkcje: zmienne, instrukcje warunkowe, pętle, procedury i obsługę błędów, przekształcając CLIST w pełnoprawny (choć ograniczony) język skryptowy.
W latach 80. i 90. CLIST był standardowym narzędziem automatyzacji na mainframe’ach IBM. Operatorzy systemowi pisali CLIST-y do rutynowych zadań: kompilacji programów, zarządzania datasetami, generowania raportów, uruchamiania batch jobów. ISPF (Interactive System Productivity Facility) pozwalał na tworzenie całych aplikacji z interfejsem panelowym, sterowanych przez CLIST.
Z czasem REXX — inny język skryptowy IBM — zaczął wypierać CLIST dzięki większej elastyczności i lepszej wydajności. Ale CLIST nigdy nie zniknął całkowicie. Wiele organizacji wciąż ma tysiące CLIST-ów w produkcji, a IBM nadal wspiera język w z/OS.
Kluczowe cechy i filozofia
CLIST jest językiem proceduralnym, interpretowanym, zaprojektowanym do pracy w środowisku TSO. Jego składnia jest… specyficzna. Słowa kluczowe są pisane WIELKIMI LITERAMI (choć to konwencja, nie wymóg), a struktura przypomina starsze języki IBM jak PL/I. Zmienne nie wymagają deklaracji typów — CLIST jest dynamicznie typowany, ale w praktyce wszystko jest tekstem.
Jedną z ważniejszych cech CLIST jest integracja z TSO. Możesz wywoływać dowolne komendy TSO bezpośrednio z CLIST, co czyni go potężnym narzędziem do automatyzacji. ALLOCATE, FREE, SUBMIT, LISTCAT — te komendy działają w CLIST natywnie. Język obsługuje też dialog z użytkownikiem przez CONTROL PROMPT i zmienne systemowe.
Struktury kontrolne to standardowe IF-THEN-ELSE, DO-END (pętle), SELECT-WHEN (odpowiednik switch). CLIST obsługuje procedury z parametrami (PROC … END), ale bez prawdziwej rekurencji. Obsługa błędów opiera się na CONTROL statements — CONTROL NOMSG wyłącza komunikaty systemowe, CONTROL LIST włącza trace.
Filozofia CLIST to „zrób to, co operator zrobiłby ręcznie, ale automatycznie”. To nie jest język do budowania aplikacji — to język do automatyzacji pracy z systemem. I w tej roli, mimo archaicznej składni, sprawdza się zaskakująco dobrze.
Gdzie CLIST sprawdza się najlepiej
CLIST jest używany tam, gdzie działają mainframe’y IBM z TSO — a to przede wszystkim duże korporacje finansowe, firmy ubezpieczeniowe, linie lotnicze i agencje rządowe. Typowe zastosowania to: automatyzacja kompilacji i deployu programów COBOL/PL/I, zarządzanie datasetami (tworzenie, kopiowanie, usuwanie), generowanie i submitowanie JCL (Job Control Language), tworzenie interaktywnych paneli ISPF.
Wiele organizacji używa CLIST do budowy „wrapper scripts” — skryptów, które upraszczają skomplikowane sekwencje komend TSO do jednego wywołania. Operator zamiast wpisywać 15 komend, uruchamia jeden CLIST z parametrami.
Dziś CLIST jest stopniowo zastępowany przez REXX, a w nowszych wdrożeniach — przez skrypty Unix System Services (USS) na z/OS. Ale migracja z CLIST na REXX bywa kosztowna, więc wiele organizacji po prostu utrzymuje istniejące CLIST-y.
Jak wygląda kod w CLIST
Prosty CLIST do kompilacji programu COBOL:
PROC 0 PGMNAME
CONTROL PROMPT
IF &PGMNAME = THEN DO
WRITE *** Podaj nazwę programu COBOL ***
READ PGMNAME
END
WRITE *** Kompilacja &PGMNAME ***
ALLOC FI(SYSPRINT) DA(*) SHR REUSE
ALLOC FI(SYSIN) DA('&PGMNAME..COBOL') SHR REUSE
ALLOC FI(SYSLIN) DA('&PGMNAME..OBJ') OLD REUSE
COBOL2
FREE FI(SYSPRINT SYSIN SYSLIN)
IF &LASTCC = 0 THEN +
WRITE *** Kompilacja zakończona sukcesem ***
ELSE +
WRITE *** Błąd kompilacji, RC=&LASTCC ***
Kod alokuje datasety potrzebne do kompilacji COBOL, uruchamia kompilator, zwalnia zasoby i raportuje wynik. Zmienne z prefiksem & to zmienne CLIST. + na końcu linii to kontynuacja. &LASTCC to zmienna systemowa z kodem powrotu ostatniej komendy.
Ekosystem i narzędzia
CLIST nie ma „ekosystemu” w nowoczesnym rozumieniu tego słowa. Nie ma package managera, nie ma frameworków, nie ma open source community. Narzędzia do pracy z CLIST to ISPF Editor (wbudowany w z/OS), IBM Developer for z/OS (komercyjne IDE oparte na Eclipse) i — dla odważnych — edytory tekstowe z podświetlaniem składni.
Dokumentacja CLIST jest dostępna w IBM Knowledge Center jako część dokumentacji z/OS TSO/E. Istnieje też kilka klasycznych podręczników IBM, np. „z/OS TSO/E CLISTs” — ale nie spodziewaj się tutoriali na YouTube.
Community CLIST to w zasadzie community mainframe’owe: fora jak IBM Mainframe Forum, grupy na LinkedIn i konferencje SHARE oraz GUIDE. To zamknięty, ale pomocny świat.
Mocne i słabe strony
Mocne strony: CLIST jest natywnie zintegrowany z TSO i ISPF, co czyni go idealnym do automatyzacji zadań mainframe. Składnia jest prosta — po kilku godzinach nauki możesz pisać użyteczne skrypty. CLIST-y są łatwe do debugowania dzięki CONTROL LIST (trace execution). Język jest stabilny — IBM wspiera go od dekad i nie wprowadza breaking changes.
Słabe strony: CLIST jest wolny — interpretacja jest znacznie wolniejsza niż REXX. Brak zaawansowanych struktur danych (tablice są prymitywne, nie ma hash maps). Obsługa błędów jest toporna. Składnia bywa niekonsekwentna. I najważniejsze — umiejętności CLIST nie są transferowalne poza świat mainframe. To, czego się nauczysz, zostaje na z/OS.
Podsumowanie
CLIST to język, którego nikt nie uczy się dla przyjemności — uczy się go, bo wymaga tego praca. Ale jeśli pracujesz z mainframe’ami IBM lub planujesz modernizację legacy systemów, CLIST jest umiejętnością, za którą firmy płacą bardzo dobrze. Nie jest piękny, nie jest nowoczesny, ale robi to, co ma robić — i robi to od ponad 40 lat. Czasem to wystarczy.

