While we are near the 30th year of IBM i, in next June, I want to continue in my education pattern trough the modernization steps. I analyzed in the previous posts the importance of an extended SQL database and the use of modern tools developed with an IDE environment (I suggest you to have a look at the previous posts by the link https://linkedibmi.com/lastblog/). It is now the moment to start the analysis of the “MODERN LANGUAGES” phase; to do it I prefer to have a little tour back into the RPG history, in the past years..
RPG is an high-level programming language (HLL) for business applications. It has a long history because it was developed by IBM in 1959 as a Report Program Generator a kind of tool to replicate “punched card” processing on the old IBM 1401. It was updated to RPG II for IBM System/3 in the 1960s and evolved into an HLL language as COBOL and PL/I.
In the far past of RPG, its major strength was the “program cycle”: every RPG program processes an implied loop that can apply the program to every record of a file. Each record (individual punched card) was compared to each line inside the program, which could be executed or not based on the value of an indicator inside the set of 01-99. Since the introduction of the System 38 in 1979 most RPG programmers stopped the use of the cycle to a better controlling program flow with standard constructs.
RPG typically used then File Specifications (lines to use files for read/update), followed by Data Definition Specification that contains Data Structures and arrays; then Calculation Specifications to write executable instructions.
RPGII, introduced with System/3, was later used on System/32, System/34 and System/36 with a better version of the language. It was also available for larger systems as System/370 mainframe.
RPG III born on the System/38 and its successor AS/400. RPG mainly changed from the original language providing modern constructs like IF-ENDIF blocks, DO loops and subroutines.
RPG/400 started as RPG III running on AS/400. Even if IBM renamed RPG compiler as “RPG/400”, the language was identic to the RPG III. Nothing of new into the language until IBM delivered new operation codes, such as SCAN, CAT and XLATE after a lot of years of AS/400 availability.
RPG IV (RPGLE or ILE RPG) born on 1994 by the V3R2 release of OS/400 Operating system. RPG IV delivered a lot of expressions within its Extended Factor 2 Calculation Specification and after by its free-format Calculation Specifications. RPG IV is the ONLY VERSION OF RPG SUPPORTED on the long set of AS400 successors (iSeries, System i, etc.)
It was in 2001 with the OS/400 V5R1 that RPG IV offered freedom for calculations by the use of free-format text entry as alternative to the old column-dependent source format. Until November 2013 the free format was available only on calculation specifications. With the IBM i V7R1 TR7 and more the “/free” and “/end-free” calculations are no longer necessary, so the language definitely abandoned the “punched cards” ties.
Today RPG IV is a robust language; even if it could be edited by old editors as SEU, the best way to use it is by IDE tools based on Eclipse: RDI (Rational Developer for I, as IBM example) is one example of these. IBM is extending RPG capabilities continuously, so now it has more built-in functions, it could link Java objects and i5/OS APIs. It could integrates tools as CGIDEV2 for CGI programs, RPG Toolbox, cozTools and othe commercial tools or solution for modernization use.
In 2006 OS/400 was renamed i5/OS, under the new brand “IBM System i5”. After the 5 was dropped and the new brand becomes “System I”. In March 2008 i5/OS changed in IBM i as component of the Power Systems new server models. The latest release is the IBM i 7.3 and it supports the RPG IV language.
The RPGLE is surely a language closer to modern object oriented language instead of the old column based RPG. It runs in ILE (Integrated Language Environment) instead of OPM (Original Program Model) and it allow the use of service programs an modules that could let you have modularity with static binding avoiding external calls.
It supports the use of other languages such as ILE/C and BIFs (Built In Functions).
For more usability it let you use longer file/fields name and prefixes and free format code, as every modern language now in use.
These are only the main reasons that must suggest you to move to this modern version of old RPG, in order to let you realize application opened to the web and other environment.