Открыть сервис

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 →