COBOL dla początkujących
Kiedy zaczynałam jako Mainframe Application Developer, było mnóstwo rzeczy, których musiałam się nauczyć. W tym COBOL i JCL. O nich w tym artykule.
Czym jest COBOL?
Common Business-Oriented Language, czyli COBOL, to kompilowany język programowania podobny do języka angielskiego, zaprojektowany do użycia w biznesie. Jest to język imperatywny, proceduralny i, od 2002, zorientowany obiektowo. Jest używany głównie w biznesie, finansach i systemach zarządzających dla dużych firm i rządów. Nadal używa się go w aplikacjach legacy, działających na mainframe’ach, które przetwarzają duże partie danych lub transakcje.
Co to JCL?
Job Control Language, czyli JCL to język komend dla Multiple Virtual Storage (MVS), który jest powszechnie używany w systemach operacyjnych mainframe’ów IBM. JCL identyfikuje, który program ma zostać wykonany, jakie parametry wejściowe są potrzebne, skąd brać parametry wejścia i gdzie skierować wyjście - o czym informuje system przez Job Control Statements. W środowisku mainframe programy mogą być wykonywane w trybie wsadowym lub online. JCL jest używany do odpalania programów w trybie wsadowym.
Czemu to ważne?
Jak wspomniałam wyżej, COBOL jest nadal szeroko używany w aplikacjach legacy, używanych przez wielkie firmy z listy Fortune 500. Decyzja o starcie kariery związanej z mainframe’ami oznacza uczenie się języków programowania, których te biznesy używają.
Ale nie lękaj się!
Uczenie się COBOL-a
Na szczęście jest mnóstwo tutoriali o COBOL-u. To kilka z nich:
- Udemy
- TutorialsPoint
- Interskill
Znajdziecie ich o wiele więcej, w tym na YouTubie, więc nie ma się czym martwić. Jeżeli się przyłożycie, nauczycie się COBOL-a w mgnieniu oka.
Co teraz?
Zakładam 3 rzeczy:
- Masz podstawową wiedzę, żeby zacząć kodować w COBOL-u
- Wiesz jak używać JCL
- Masz ogólne zrozumienie tego, jak działa mainframe (tj. Praca z zestawami danych, wysyłanie zadań do przetwarzania)
To teraz sobie poćwiczymy!
Otwórz proszę swój terminal 3270 i zaczynamy…
Ale… ja nie mam terminala 3270!
Bez ciśnienia, coś ogarniemy. Mainframe’y są ciągle modernizowane, co doprowadziło do licznych innowacji. Jedną z tych innowacji jest Zowe Explorer.
Czym jest Zowe Explorer?
Zowe to projekt open source, który oferuje współczesne interfejsy pozwalające na interakcję z z/OS i pozwala na pracę z z/OS, podobnie jak robi się to obecnie z platformami chmurowymi. Pomaga młodym programistom pracować z mainframe’ami z użyciem narzędzi, które znają i kochają. To nowoczesne rozwiązanie dla nowoczesnych developerów mainframe.
Zowe Explorer to natomiast rozszerzenie VSCode, które pozwala na dostęp do Zowe z poziomu VSCode. To daje możliwość używania IDE zamiast terminala 3270 do pisania programów w COBOL-u.
Czekaj, to nie koniec
Przewagą VSCode jest to, że oferuję masę rozszerzeń. Poza Zowe Explorer używam także Code4z. To rozszerzenie daje podświetlanie składni i podpowiedzi przy pisaniu programów w COBOL-u.
Code4z
Dla programisty COBOL-a pakiet rozszerzeń Code4z jest super, bo zawiera Zowe Explorer, COBOL Language Support, HLASM Language SUpport, Explorer for Endevor, Debugger for Mainframe i COBOL Syntax highligthing.
Oto niektóre z fajniejszych funkcji:
- Autouzupełnianie:Na żywo generuje podpowiedzi w czasie pisania. Mogą to być słowa kluczowe COBOL-a, zmienne, paragrafy czy kawałki kodu.
- Sprawdzanie składni i semantyki kodu: Wyszukuje pomyłki i błędy w kodzie COBOL-a
- Wsparcie Copybook:To moja zdecydowanie najbardziej ulubiona funkcja. Rozszerzenie pozwala Ci odwołać się do copybooków, które masz w programie. Dla programisty COBOL-a możliwość szybkiego zerknięcia do copybook to spore ułatwienie. Ta funkcja naprawdę ułatwia kodowanie.
Trzeba jednak zauważyć, że ścieżka copybooków musi zostać zdefiniowana jako COPYBOOKS w bieżącej przestrzeni roboczej VSCode, zanim ta funkcja zacznie działać. Ostatnie wydanie COBOL LSP sprawiło, że możesz zdefiniować ścieżkę do copybooków w w settings.json, a rozszerzenie samo wykryje i ściągnie copybooki, które są potrzebne.
Poza tym oferuje też wiele innych funkcji, jak sprawdzanie, czy kropki są we właściwym miejscu
walidowanie czy kolumny nie są szersze niż 80 znaków
wyrzucanie nadmiarowych spacji z Twojego programu
Jeżeli chcesz zostać kontrybutorem tego projektu, to zajrzyj do jego repozytorium.
Zanim zaczniemy
Disclaimer: Jestem inżynierem w Broadcom i częścią zespołu rozwijającego Zowe. To mój osobisty punkt widzenia i osobiste preferencje.
Musimy się upewnić, że masz odpowiedni dostęp. Mój artykuł na Medium nauczy Cię, jak uzyskać dostęp do mainframe’u. Jeżeli nie masz jeszcze dostępu, polecam go przeczytać.
Jeżeli natomiast masz dostęp, to możemy iść dalej. ?
Na początek
No to może na początek klasyka, czyli “Hello World”
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
PROCEDURE DIVISION.
DISPLAY 'Hello World!'.
STOP RUN.
Otwórzmy VSCode i napiszmy kod, korzystając z tego, co potrafi Code4z.
Następnie zapiszmy go w source library i skompilujmy. Jeżeli nie masz kompilatora, możesz użyć kompilatora, który wysłałam do środowiska Open Source Development Trial.
//CBLCMPLR JOB (CBLCMPLR),'COBOL COMPILER',CLASS=A, // MSGLEVEL=(1,1),NOTIFY=&SYSUID //* //COMPILE EXEC PGM=IGYCRCTL,REGION=220M, 00050009 // PARM=(NOTERM, 00060009 // '') 00070009 //* STEPLIB DD DSN=IGY.SIGYCOMP,DISP=SHR 00080009 //* 00090009 //* INSERT A STEPLIB DD HERE IF SCREERUN AND SCREERUN2 ARE NOT IN YOUR 00100009 //* SYSTEM LIBRARY 00110009 //* 00120009 //SYSPRINT DD SYSOUT=(*) 00130009 //SYSIN DD DSN=your.source.library(HELOWRLD), 00140009 // DISP=SHR 00150009 //SYSPUNCH DD DUMMY 00160009 //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00170009 //SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00180009 //SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00190009 //SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00200009 //SYSUT5 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00210009 //SYSUT6 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00220009 //SYSUT7 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00230009 //SYSUT8 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00240009 //SYSUT9 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00250009 //SYSUT10 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00260009 //SYSUT11 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00270009 //SYSUT12 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00280009 //SYSUT13 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00290009 //SYSUT14 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00300009 //SYSUT15 DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00310009 //SYSMDECK DD UNIT=SYSDA,SPACE=(CYL,(2,2)) 00320009 //SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR 00330009 //* DD DSN=SYS1.COB2LIB,DISP=SHR 00340009 // DD DSN=your.source.library, 00350009 // DISP=SHR 00360009 //SYSLIN DD DSN=your.object.library(HELOWRLD), 00370009 // DISP=OLD 00380009 //* 00390009 //LKED EXEC PGM=HEWL,COND=(8,LT,COMPILE),REGION=1024K 00400009 //SYSLIB DD DSNAME=CEE.SCEELKED, 00410009 // DISP=SHR 00420009 //SYSPRINT DD SYSOUT=* 00430009 //SYSLIN DD DSNAME=your.object.library(HELOWRLD),DISP=SHR 00440009 // DD DDNAME=SYSIN 00450009 //SYSLMOD DD DSNAME=your.load.library(HELOWRLD),DISP=MOD 00460009 //* DISP=(NEW,CATLG,DELETE),SPACE=(TRK,(10,10,1)), 00470009 //* RECFM=U,,DSNTYPE=LIBRARY 00480009 //SYSUT1 DD UNIT=VIO,SPACE=(TRK,(10,10)) 00490009 //GO EXEC PGM=*.LKED.SYSLMOD,COND=((8,LT,COMPILE),(4,LT,LKED)), 00500009 // REGION=2048K 00510009 //STEPLIB DD DSNAME=CEE.SCEERUN, 00520009 // DISP=SHR 00530009 //SYSPRINT DD SYSOUT=* 00540009 //CEEDUMP DD SYSOUT=* 00550009 //SYSUDUMP DD SYSOUT=* 00560009
Po udanej kompilacji przetestujmy program HELLO WORD, wykonując go. Odpalimy go, używając HELOTST.JCL. Ja napisałam go tak:
//HELOWRLD JOB (HELOWRLD),'HELLO WORLD',CLASS=A, // MSGCLASS=X,MSGLEVEL=0,NOTIFY=&SYSUID //* //JOBLIB DD DSN=your.load.library,DISP=SHR //* //STEP0001 EXEC PGM=HELOWRLD //SYSIN DD DUMMY //SYSPRINT DD SYSOUT=* //
Przejdź do panelu zadań i znajdź wysłany JCL.
COBOL to niezła zabawa
Ten program był co prawda bardzo prosty, ale dzięki nowoczesnym narzędziom programowanie w COBOL-u jest dużo łatwiejsze i to o wiele większa frajda.
Nauczyliśmy się dziś:
- O Zowe, Zowe Explorer i Code4z
- Jak dostać dostęp do mainframe’u (z mojego wpisu, do którego linkowałam)
- Jak napisać program Hello World w COBOL-u
- Jak skompilować program w COBOL-u
- Jak uruchomić taki program
Cały kod jest w repozytorium na GitHubie. Jeżeli chcesz obejrzeć wszystko w formie wideo, to też jest taka opcja.
Oryginał tekstu w języku angielskim przeczytasz tutaj.