Nasza strona używa cookies. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

COBOL dla początkujących

Jessielaine Punongbayan Senior Software Engineer / Broadcom
Poznaj podstawy języka COBOL, jego przydatne narzędzia oraz dowiedz się, jak dostać dostęp do mainframe’u, napisać, skompilować i uruchomić prosty program w COBOL-u.
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:


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:

  1. Masz podstawową wiedzę, żeby zacząć kodować w COBOL-u
  2. Wiesz jak używać JCL
  3. 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ś:

  1. O Zowe, Zowe Explorer i Code4z
  2. Jak dostać dostęp do mainframe’u (z mojego wpisu, do którego linkowałam)
  3. Jak napisać program Hello World w COBOL-u
  4. Jak skompilować program w COBOL-u
  5. 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.

Rozpocznij dyskusję

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej