RPG II
RPG II — это язык программирования, разработанный корпорацией IBM в конце 1960-х годов для машин семейства System/3. Относится к классу языков, ориентированных на обработку данных в бизнес-приложениях, и является развитием языка Report Program Generator (RPG), созданного в 1959 году. RPG II предназначен для генерации отчётов, ведения файлов и выполнения расчётов в среде мэйнфреймов и миникомпьютеров IBM.
История
Предпосылки создания
Первая версия RPG (RPG I) была разработана в 1959 году компанией IBM для машины IBM 1401. Этот язык позволял быстро создавать отчёты из файлов данных, используя фиксированный формат спецификаций. Однако с появлением в 1964 году System/360, требовавшего более гибкой и мощной системы, возникла необходимость в модернизации. В 1965 году вышла версия RPG для DOS/360, которая уже поддерживала работу с дисковыми файлами и более сложные вычисления.
Разработка и внедрение
RPG II был официально представлен в 1969 году вместе с операционной системой System/3 Model 6 и последующими моделями (10, 12, 15). Главным нововведением стало использование фиксированного формата кодирования на бланках (спецификациях), что упрощало написание программ для непрофессиональных программистов — бухгалтеров, клерков и менеджеров. Язык был оптимизирован для работы с картами, магнитными лентами и дисковыми накопителями.
Распространение
В 1970-х годах RPG II стал одним из самых популярных языков для малых и средних бизнес-систем IBM, особенно в США и Западной Европе. Он использовался на машинах System/3, System/32, System/34, System/36 и на ранних моделях AS/400 (под управлением OS/400). К концу 1980-х годов, с появлением более современных языков (COBOL, PL/I, C), популярность RPG II пошла на спад, хотя он продолжал применяться в legacy-системах до начала XXI века.
Архитектура и синтаксис
Формат программы
Программа на RPG II состоит из набора спецификаций (specifications), каждая из которых описывает определённый аспект обработки данных. Основные типы спецификаций:
- File Description Specifications (F-спецификации) — описание входных и выходных файлов (карты, ленты, диски, принтер).
- Input Specifications (I-спецификации) — определение структуры входных записей, полей и ключей.
- Calculation Specifications (C-спецификации) — логика вычислений, условные переходы, арифметика.
- Output Specifications (O-спецификации) — формат выходных отчётов и файлов.
- Extension Specifications (E-спецификации) — дополнительные таблицы и константы.
Каждая строка спецификации имеет фиксированную длину (обычно 80 символов) и разбита на колонки, каждая из которых имеет строгое назначение (например, колонка 7 — тип спецификации, колонки 8–15 — имя поля).
Типы данных
RPG II поддерживает следующие типы данных:
- Алфавитно-цифровые строки (A) — фиксированной длины, до 256 символов.
- Числовые поля (P, S, B) — упакованные десятичные (Packed Decimal), зональные (Zoned Decimal) и двоичные (Binary).
- Логические поля (L) — для хранения значений «истина/ложь».
- Даты (D) — в формате YYMMDD или MMDDYY.
Управляющие конструкции
Язык не имеет традиционных операторов ветвления (if-then-else) в современном понимании. Вместо этого используются:
- Indicator (индикаторы) — 99 логических флагов (01–99), которые устанавливаются или сбрасываются в C-спецификациях и влияют на выполнение операций.
- DO-циклы — ограниченная поддержка итераций через операции DOU (DO Until) и DOW (DO While).
- GOTO — безусловный переход на метку (Label).
- EXCPT — вызов подпрограммы (Subroutine).
Работа с файлами
RPG II поддерживает последовательный, индексно-последовательный (ISAM) и прямой доступ к файлам. Для каждого файла в F-спецификации указывается тип доступа, блокировка, ключи и формат записи. Ввод-вывод выполняется через операции READ, WRITE, UPDATE, DELETE.
Применение
Бизнес-приложения
RPG II широко использовался для:
- Генерации отчётов — например, бухгалтерских балансов, ведомостей зарплаты, складских остатков.
- Управления запасами — ведение файлов товаров, заказов, поставок.
- Расчёта заработной платы — вычисление налогов, удержаний, начислений.
- Бухгалтерского учёта — обработка счетов, платежей, дебиторской и кредиторской задолженности.
Пример кода
Типичная программа на RPG II для печати отчёта о сотрудниках может выглядеть так:
`` FEMPLOYEE IF E DISK FREPORT O F PRINTER IEMPLOYEE AA 01 I 1 10 NAME I 11 20 SALARY C NAME IFEQ 'SMITH' C SALARY ADD 1000 SALARY C NAME DSPLY O REPORT H 1 O 10 'EMPLOYEE REPORT' O DETAIL D 2 O 10 NAME O 20 SALARY ``
Здесь программа читает файл EMPLOYEE с диска, проверяет, является ли имя «SMITH», добавляет 1000 к зарплате, выводит имя на консоль и печатает отчёт.
Ограничения и критика
Технические недостатки
- Фиксированный формат — программист должен строго соблюдать колонки, что делает код громоздким и трудным для чтения.
- Отсутствие структурного программирования — нет функций, процедур, локальных переменных. Всё глобально.
- Слабая поддержка арифметики — нет операций с плавающей точкой, только целые и десятичные числа.
- Ограниченная обработка строк — нет встроенных функций для поиска, замены, конкатенации (кроме простого сцепления через
+).
Критика со стороны сообщества
- Устаревшая парадигма — RPG II ориентирован на пакетную обработку, не подходит для интерактивных приложений.
- Сложность отладки — из-за обилия индикаторов и глобальных переменных программы сложно тестировать.
- Зависимость от аппаратуры — язык привязан к архитектуре IBM System/3x, что затрудняет перенос на другие платформы.
Влияние и наследие
Переход к RPG III и RPG IV
В 1978 году IBM выпустила RPG III для System/38, который добавил подпрограммы, структурированные циклы и поддержку баз данных. В 1994 году с появлением AS/400 и OS/400 был представлен RPG IV (ILE RPG), который полностью отказался от фиксированного формата, ввёл свободный синтаксис, поддержку указателей, объектно-ориентированные возможности и интеграцию с SQL. Тем не менее, многие legacy-системы на RPG II продолжали работать до конца 1990-х годов.
Современное состояние
К 2020-м годам RPG II практически не используется в новых разработках. Однако на некоторых предприятиях (особенно в США, Канаде и Великобритании) до сих пор эксплуатируются старые программы на RPG II, работающие под эмуляторами System/36 или на мэйнфреймах IBM Z. Существуют проекты по миграции такого кода на Java, C# или Python, но они дороги и трудоёмки.
Интересные факты
- RPG II был одним из первых языков, который использовал индикаторы для управления потоком — концепция, позже заимствованная некоторыми промышленными контроллерами.
- В 1970-х годах на RPG II было написано около 80% всех бизнес-приложений для малых компьютеров IBM.
- Язык поддерживал таблицы поиска (Look-up Tables), что позволяло быстро находить значения по ключу без написания сложных алгоритмов.
- В СССР RPG II не получил широкого распространения из-за отсутствия совместимых машин IBM, однако на предприятиях, использовавших ЕС ЭВМ (аналог IBM System/360), иногда применялись трансляторы с RPG.
Источники
- IBM Corporation. RPG II Language Reference Manual. IBM, 1971.
- IBM Corporation. System/3 RPG II Programmer's Guide. IBM, 1973.
- McCracken, D. D. A Guide to RPG II Programming. John Wiley & Sons, 1975.
- Shelly, G. B., Cashman, T. J. RPG II Programming. Anaheim Publishing, 1978.
- Баранов, С. Н. Языки программирования для малых ЭВМ. Москва: Мир, 1980.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →