[1] RPG has traditionally featured a number of distinctive concepts, such as the program cycle, and the column-oriented syntax.
IBM later produced implementations for the 7070/72/74[4][5] and System/360;[6] RPG II became the primary programming language for their midrange computer product line, (the System/3, System/32, System/34, System/38, System/36 and AS/400).
RPG II applications are still supported under the IBM z/VSE[7] and z/OS operating systems,[8] Unisys MCP,[9] Microsoft Windows[10] and OpenVMS.
[13] FARGO (Fourteen-o-one Automatic Report Generation Operation) was the predecessor to RPG on the IBM 1401.
Both languages were intended to facilitate ease of transition for IBM tabulating machine (Tab) unit record equipment technicians to the then-new computers.
RPG II was also available for larger systems, including the IBM System/370 mainframe running DOS/VSE (then VSE/SP, VSE/ESA, and z/VSE).
The concept of level breaks and matching records is unique to the RPG II language, and was originally developed with card readers in mind.
The matching record feature of the cycle enabled easy processing of files having a header-to-detail relationship.
Alternatively files, some data structures and reports can be defined externally, mostly eliminating the need to hand code input and output ("I/O") specifications.
RPG III significantly departed from the original language, providing modern structured constructs like IF-ENDIF blocks, DO loops, and subroutines.
RPG III was also available for larger systems including the IBM System/370 mainframe running OS/VS1.
DE/RPG or Data Entry RPG was exclusively available on the IBM 5280 series of data-entry workstations in the early '80s.
IBM continues to enhance the RPG language[27] via software releases and intra-release “technology refreshes” (TRs).
Even with the changes, it retains a great deal of backward compatibility, so an RPG program written 37 years ago could run today with little or no modification.
With the traditional F-Spec approach a developer had to identify a specific access path to a data set, now they can implement standard embedded SQL statements directly in the program.
It allows new I/O handlers to be defined by a programmer - enabling data to be read from and written to sources which RPG does not provide inbuilt support for.