IBM RPG - IBM RPG

РПГ
Генератор программ отчетов
ПарадигмаМультипарадигма
РазработчикIBM
Впервые появился1959
Стабильный выпуск
RPG IV версии 7, выпуск 4/6 октября 2020 г. (2020-10-06)
Печатная дисциплинаСильный, статический
Операционные системыCPF, SSP, OS / 400, IBM i, OS / VS1, z / OS, ДОС / ВСЕ, ВСЕ / СП, VSE / ESA, z / VSE, VS / 9, ПРИМОС, OpenVMS, Ван В.С., Берроуз MCP, OS / 2, Майкрософт Виндоус
Диалекты
РПГ, РПГ II, РПГ III, РПГ 400, РПГ IV, РПГ / ИЛЭ; Ролевая игра / Бесплатно, Детские / 36, Детские / 400, Решетчатая ролевая игра
Под влиянием
9PAC, ФАРГО
Под влиянием
РПГ II

РПГ это современный проприетарный язык программирования высокого уровня (HLL) для бизнес-приложения, популярный на IBM i операционная система на IBM Power Systems оборудование. Текущая версия, РПГ IV, он же ILE RPG, предоставляет современную среду программирования. IBM разработала язык, предоставив новые возможности, чтобы воспользоваться преимуществами технологий, появившихся на рынке.

Платформы

Язык программирования RPG был первоначально представлен IBM для их собственных систем 1401, / 360, / 3, / 32, / 34, / 36, / 38 AS / 400 и System i. Также были реализации для Digital VAX, Sperry Univac BC / 7, Univac system 80, Siemens. BS2000, Берроуз B700, B1700, Hewlett Packard HP 3000, Серии ICL 2900, Honeywell 6220 и 2020, четырехфазные серии IV / 70 и IV / 90, Система певцов 10 и Ван В.С., а также различные компиляторы и среды выполнения для систем на основе Unix, таких как Infinite36 (ранее Unibol 36) и ПК (Baby / 400, Lattice-RPG).

Последней платформой для получения компилятора RPG является Windows .Net через компилятор WINRPG, который был приобретен I-Net System Solutions в марте 2013 года. Эта версия содержит расширения для RPG IV, помимо базового компилятора IBM. Эти расширения предоставляют Майкрософт Виндоус и .NET Framework хуки в среде Native и System / 36, а также возможность портировать DB / 2 файлы в Microsoft Access и Microsoft SQL Server базы данных через Открытое подключение к базе данных (ODBC).

Реализации компилятора с открытым исходным кодом, ориентированные на платформы, такие как Microsoft Dot-NET, и находящиеся на разных стадиях завершения, также можно найти на различных сайтах репозиториев, таких как GitHub.

Приложения RPG II по-прежнему поддерживаются IBM z / VSE и z / OS операционные системы, HP MPE операционная система на HP3000 и OpenVMS операционная система на VAX, Alpha и Unisys MCP а теперь Windows Servers and Desktops под I-Net RPG.

История

Первоначально разработан IBM в 1959 году название Генератор программ отчетов описывала цель языка: создание отчетов из файлов транзакционных данных. Язык воспроизведен перфокарта обработка на IBM 1401[1] - затем обновлен до РПГ II для IBM System / 3 в конце 1960-х годов, и с тех пор превратился в HLL, эквивалентный КОБОЛ и PL / I.

На заре ролевой игры ее главной сильной стороной были программный цикл, выполняясь в петля, обрабатывая каждую запись файла. Это способствовало созданию отчетов с промежуточными и общими итогами в контрольные перерывы. В то время каждая запись (отдельная перфокарта) будет сравниваться с каждой строкой в ​​программе, которая будет воздействовать на запись или нет, в зависимости от того, был ли в этой строке «индикатор» включен или выключен - от набор логических переменных, пронумерованных 01–99 для определенных пользователем целей, или другие меньшие наборы, основанные на функциях обработки записей, полей или отчетов. Концепция разрывов уровней и сопоставления рекордов уникальна для языка RPG II и изначально разрабатывалась с расчетом на картридеры. Функция совпадающей записи цикла позволяет легко обрабатывать файлы, имеющие отношение заголовка к детали. Программы RPG, написанные для использования преимуществ программного цикла, могут создавать сложные отчеты с гораздо меньшим количеством строк компьютерного кода, чем программы, написанные на КОБОЛ и другие бизнес-ориентированные языки.

В спецификации файлов программы перечислены все файлы, в которые выполняется запись, чтение или обновление, а затем Спецификации определения данных содержащие программные элементы, такие как структуры данных и размерные массивы, очень похоже на раздел «Рабочее хранилище» в программе на языке COBOL. Далее следуют спецификации вычислений, которые содержат исполняемые инструкции. Могут следовать спецификации вывода, которые могут использоваться для определения макета других файлов или отчетов. В качестве альтернативы файлы, некоторые структуры данных и отчеты могут быть определены извне, что в основном устраняет необходимость ручного ввода и вывода кода ("Ввод / вывод ") технические характеристики.


РПГ II был представлен Система / 3 серия компьютеров. Позже он был использован на Система / 32, Система / 34, и Система / 36, с улучшенной версией языка. RPG II также была доступна для более крупных систем, включая IBM System / 370 мэйнфрейм работает ДОС / ВСЕ (тогда ВСЕ / СП, VSE / ESA, и z / VSE ). ICL также выпустил версию на своем VME / K Операционная система.

С момента введения IBM System / 38 в 1979 году большинство программистов RPG прекратили использование цикла в пользу управления потоком программы с помощью стандартных конструкций цикла, хотя IBM продолжала обеспечивать обратную совместимость для цикла.

Последние версии RPG доступны только на IBM i или системы на базе OS / 400.[2]

FOLDOC аккредитует Уилфа Хея с работой в IBM, результатом которой стала разработка RPG.[3]

ФАРГО (Fнашнадцать-один Аавтоматический рeport гвступление Оperation) была предшественницей RPG на IBM 1401. Оба языка были предназначены для облегчения перехода для IBM. счетная машина (Tab) единичное записывающее оборудование техников к тогда новым компьютерам.

Специалисты по таблеточным машинам привыкли подключать провода к панели управления для реализации операций ввода, вывода, управления и счетчика (сложение, вычитание, умножение, деление). Программы табуляторов выполнялись импульсами, испускаемыми в машинном цикле; следовательно, FARGO и RPG эмулировали понятие машинного цикла с программным циклом. RPG превзошла и быстро заменила FARGO в качестве предпочтительной программы генератора отчетов.

Альтернативные языки, обычно доступные в то время, были Ассемблер, КОБОЛ или FORTRAN. COBOL был бизнес-ориентированным языком, похожим на естественный, а FORTRAN - языком, упрощающим математические приложения. Включены другие языки той эпохи АЛГОЛ и Автокодер и несколько лет спустя PL / I. Ассемблер и COBOL были более распространены в бизнес-операциях на мэйнфреймах (Система / 360 модели 30 и выше) и RPG, которые чаще использовались клиентами, которые переходили от оборудования для составления таблиц (System / 360 модель 20).

РПГ III был создан для Система / 38 и его преемник AS / 400. RPG III значительно отошла от оригинального языка, предоставив современные структурированные конструкции, такие как блоки IF-ENDIF, циклы DO и подпрограммы. RPG III также была доступна для более крупных систем, включая IBM System / 370 мэйнфрейм работает OS / VS1. Его также можно было купить в Unisys для VS / 9 операционная система, работающая на UNIVAC серии 90 мэйнфреймы.

DE / RPG или Data Entry RPG была доступна исключительно на IBM 5280 серия рабочих станций для ввода данных в начале 80-х. Она была похожа на RPG III, но без внешних описаний данных (DDS) для описания данных (файлов), как в System / 38 и ее преемниках. Вместо этого часть DDS должна была быть включена в сам исходник RPG.

РПГ / 400 фактически была РПГ III, работающая на AS / 400. IBM переименовала компилятор RPG в «RPG / 400», но на момент его появления он был идентичен компилятору RPG III в System / 38. Практически все продукты IBM были переименованы в xxx / 400, и компилятор RPG не стал исключением. RPG III, скомпилированная с помощью компилятора RPG / 400, не предлагала ничего нового для языка RPG III, пока IBM не начала разработку новых кодов операций, таких как SCAN, CAT и XLATE, после нескольких лет доступности AS / 400. Эти улучшения RPG III не были доступны в версии System / 38 RPG III.

РПГ IV

РПГ IV, a.k.a. RPGLE или ИЛЭ РПГ,[4]) был выпущен в 1994 году как часть версии v3r2 OS / 400.[5] С выпуском RPG IV название RPG перестало быть официальным. инициализм. RPG IV предлагала большее разнообразие выражений в своей Спецификации вычисления Расширенного Фактора-2, а позже - в Спецификации вычислений в свободном формате и синтаксисе Процедуры. RPG IV - единственная версия RPG, поддерживаемая IBM в ее длинной череде преемников системы AS / 400 (iSeries, Система i, так далее.).

В 2001 году с выпуском OS / 400 V5R1, RPG IV предлагала большую свободу для расчетов, чем это предлагается в Спецификации расчетов Extended Factor-2: a свободный формат текстовая исходная запись в качестве альтернативы исходному формату исходного столбца. Расчет «/ FREE» не требовал размещения кода операции в конкретном столбце; код операции не является обязательным для операций EVAL и CALLP; а синтаксис в целом больше похож на синтаксис основных языков программирования общего назначения. До ноября 2013 года свободный формат применялся исключительно к расчетным спецификациям.[6] С IBM i Обновление V7R1 TR7 до языка, вычисления «/ free» и «/ end-free» больше не нужны, и язык наконец-то разорвал связь с перфокартами.

Сегодня RPG IV - более надежный язык. Хотя редактирование по-прежнему можно выполнять через SEU, простой редактор с зеленым экраном (хотя проверка синтаксиса не поддерживается для функций, представленных начиная с IBM i V7R1), с течением времени был разработан длинный ряд инструментов. Некоторые из них включают Код / 400 и Visual Age для RPG, которые были разработаны IBM. В настоящее время предпочтительной платформой редактирования является клиент IBM Websphere Development Studio (WDSc), который теперь называется RDi (Rational Developer for i), который является специализированной реализацией Eclipse. Eclipse, а следовательно, и RDi, в основном работают на персональных компьютерах и других устройствах. IBM постоянно расширяет свои возможности и добавляет больше встроенных функций (BIF). Он может ссылаться на Ява объекты,[7] и i5 / OS API; его можно использовать для записи CGI программы с помощью IBM Cgidev2 Набор веб-инструментов,[8] Коззи cozTools (набор программ RPG и CGI для RPG IV), CGILIB, то Набор инструментов для RPG и другие коммерческие пакеты с поддержкой Интернета. Даже с внесенными изменениями он сохраняет большую часть обратной совместимости, поэтому программа RPG, написанная 37 лет назад, может работать сегодня с небольшими изменениями или без них.

Прекомпилятор SQL позволяет нынешним разработчикам RPG воспользоваться экономичным SQE (механизм запросов SQL) IBM. При традиционном подходе F-Spec разработчику приходилось определять конкретный путь доступа к набору данных, теперь они могут реализовать стандартные встроенные операторы SQL непосредственно в программе. При компиляции прекомпилятор SQL преобразует операторы SQL в операторы RPG, которые вызывают программы менеджера баз данных, которые в конечном итоге реализуют запрос запроса.

В 2006 г. OS / 400 был переименован в i5 / OS, чтобы соответствовать новому IBM System i5 брендовая инициатива; 5 позже отказались в пользу только System i. В марте 2008 года i5 / OS была переименована в IBM i как часть Энергетические системы объединение продуктовых линеек System i и System p. Новые Power Systems также используют более распространенные номера версий, заменяя нотацию V1R1M0 двадцатилетней давности на 6.1. Последний выпуск теперь называется IBM i 7.3 и полностью поддерживает язык RPG IV, а также многие другие.

Язык RPG IV основан на EBCDIC набор символов, но также поддерживает UTF-8, UTF-16 и многие другие наборы символов. Некоторые считают, что потокобезопасные аспекты языка являются идиосинкразическими, поскольку команда компиляторов обратилась к потокам, предоставив каждому потоку свое собственное статическое хранилище, вместо того, чтобы повторно входить в среду выполнения RPG. Было отмечено, что это размывает различие между потоком и процессом (что делает потоки RPG IV своего рода гибридом между потоками и процессами).

РПГ с открытым доступом

Версия RPG была выпущена в 2010 году под полным названием Rational Open Access.

После его запуска главный архитектор IBM i Стив Уилл описал его как «усовершенствование, которое на самом деле представляет собой архитектурное изменение, открывающее RPG для совершенно новых применений, и его представили сообществу IBM i, наши друзья из IBM Rational и несколько независимых поставщиков программного обеспечения. которые работали с IBM, чтобы взяться за дело. Идея, лежащая в основе новой возможности, состоит в том, чтобы исключить необходимость принудительного вывода всего вывода из программ RPG в ограниченный поток данных 5250. Вместо этого он может быть передан обработчикам, которые может преобразовать его любым способом, который захочет обработчик. Обернуть его в XML; поместить в формат, требуемый универсальным устройством; сделать веб-страницу, не похожую на экран 5250; все, что вы хотите ».[9]

Хотя многие компании скептически относились к полезности открытого доступа, он сразу же получил признание со стороны некоторых других, включая корпорацию Profound Logic, которая быстро включила его в свои продукты, направленные на открытие i, и наняла Скотт Клемент, разработчик продукта, известный созданием инструментов с открытым исходным кодом для доступа к технологии.[10][11]

Типы данных

RPG поддерживает следующие типы данных.

Заметка:
Персонаж в тип данных column - это символ, который закодирован в Спецификации определения в столбце, предназначенном для типа данных. Для сравнения, на таком языке, как C, где определения переменных имеют свободный формат и будут использовать ключевое слово, например int для объявления целочисленной переменной в RPG переменная определяется с помощью Спецификации определения фиксированного формата. В Спецификации определений обозначается буквой D в столбце 6 исходной строки символ типа данных будет закодирован в столбце 40. Кроме того, если тип данных символ опущен, то есть оставлен пустым, по умолчанию А если десятичные разряды не указаны, P, если десятичные разряды указаны для резервных полей, и S (ZONED), когда десятичные разряды указаны в структуре данных.

Тип данныхимяДлинаОписание
АБуквенно-цифровой символОт 1 до 16 773 104 байт (фиксировано)
От 1 до 16 773 100 байт (различной длины)
Буквенно-цифровой символ
BДвоичное число1 байт (8 бит)
2 байта (16 бит)
4 байта (32-бит)
8 байт (64-бит)
Знаковое двоичное целое число
CUCS-2 персонажОт 1 до 8 386 552 символов (фиксировано)
От 1 до 8 386 550 знаков (разные)
16-битный символ UCS-2 (DBCS или EGCS)
DДата10 байтДата: год, месяц, день
FПлавающая точка числовой4 байта (32-бит)
8 байт (64-бит)
Знаковое двоичное вещественное число с плавающей запятой
гГрафический персонажОт 1 до 8 386 552 символов (фиксировано)
От 1 до 8 386 550 знаков (разные)
16-битный графический символ (DBCS или EGCS)
яЦелое число1 байт (8 бит)
2 байта (16 бит)
4 байта (32-бит)
8 байт (64-бит)
Знаковое двоичное целое число
NИндикатор символа1 байт'1' = ИСТИНА
'0' = ЛОЖЬ
ООбъектРазмер не разглашаетсяСсылка на объект
пУпакованный десятичный числовойОт 1 до 63 цифр,
2 цифры на байт плюс знак
Знаковое десятичное число с фиксированной точкой, целыми и дробными цифрами
SЗональный десятичный числовойОт 1 до 63 цифр,
1 цифра на байт
Знаковое десятичное число с фиксированной точкой, целыми и дробными цифрами
ТВремя8 байтВремя: час, минута, секунда
UЦелое число1 байт (8 бит)
2 байта (16 бит)
4 байта (32-бит)
8 байт (64-бит)
Беззнаковое двоичное целое число
ZОтметка времени26 байтДата и время:
год, месяц, день, час, минута, секунда, микросекунды
*Базовый указатель
Указатель процедуры
Системный указатель
16 байтОбращаться к данным
Обратиться к активированной процедуре
Обратиться к объекту

Пример кода

Следующая программа получает номер клиента в качестве входного параметра и возвращает имя и адрес в качестве выходных параметров. Это наиболее примитивная версия синтаксиса RPG IV. Та же самая программа будет показана позже, но с постепенно более современными версиями синтаксиса и более мягкими правилами.

      * Исторически RPG носила колоночный характер, хотя свободное форматирование * разрешалось при определенных обстоятельствах. * Назначение различных строк кода определяется * буквенным кодом в столбце 6. * Звездочка (*) в столбце 7 обозначает строку комментария * Спецификации «F» (файл) определяют файлы и другие устройства ввода-вывода F ARMstF1 IF EK Disk Rename (ARMST: RARMST) * Спецификации «D» (данные) используются для определения переменных D pCusNo S 6p D pName S 30a D pAddr1 S 30a D pAddr2 S 30a D pCity S 25a D pState S 2a D pZip S 10a * Для исполняемых операторов используются спецификации «C» (вычисление) * Параметры определяются с использованием кодов операций plist и parm C * entry plist C parm pCusNo C parm pName C parm pAddr1 C parm pAddr2 C parm pCity C parm pState C parm pZip * Команда "цепочка" используется для произвольного доступа к файлу с ключом C pCusNo chain ARMstF1 * Если запись найдена, переместите поля из файла в параметры C, если% найдено C eval pName = ARNm01 C eval pAddr1 = ARAd01 C eval pAddr2 = ARAd02 C eval pCity = ARCy01 C eval pState = ARSt01 C eval pZip = ARZp15 C endif * RPG использует переключатели. Один переключатель «LR» изначально обозначал «последнюю запись» * LR отмечает программу и ее пространство данных как удаляемую из памяти C eval * InLR = * Вкл.

Та же программа, использующая бесплатные вычисления, доступная начиная с V5R1:

      * Спецификации "F" (файл) определяют файлы и другие устройства ввода-вывода FARMstF1 IF EK Disk Rename (ARMST: RARMST) * Спецификации "D" (данные) используются для определения переменных и параметров * "Прототипом" программы является в отдельном файле * позволяя другим программам вызывать его / копировать cust_pr * «Интерфейс процедуры» описывает * параметры ВХОДА D getCustInf PI D pCusNo 6p 0 const D pName 30a D pAddr1 30a D pAddr2 30a D pCity 25a D pState 2a D pZip 10a / free // Команда "цепочка" используется для произвольного доступа к цепочке файлов с ключами pCusNo ARMstF1; // Если запись найдена, переместить поля из файла в параметры if% found; pName = ARNm01; pAddr1 = ARAd01; pAddr2 = ARAd02; pCity = ARCy01; pState = ARSt01; pZip = ARZp15; endif; // RPG использует переключатели. Один переключатель «LR» изначально обозначал «последнюю запись» // LR фактически отмечает программу и ее пространство данных как удаляемые из памяти. * InLR = * Вкл; / без конца

Предположим, что примерная таблица ARMSTF1 была создана с использованием следующего оператора SQL:

Создайте Таблица armstf1(arcnum десятичная дробь(7,0), имя char(30), aradd1 char(30), aradd2 char(30), арктика char(25), Arstte char(2), arzip  char(10))

Та же программа, использующая бесплатные вычисления и встроенный SQL:

      * RPG IV больше не требует использования индикатора * INLR для завершения программы. * используя ключевое слово MAIN в спецификации «H» (заголовок) и определяя «главное» или * имя процедуры входа, программа будет начинаться и заканчиваться обычным образом без использования * цикла RPG десятилетней давности и вместо этого более «C» как «начало и конец логики. H MAIN (getCustInf) * Спецификации «D» (данные) используются для определения переменных и параметров * «Прототип» программы находится в отдельном файле * позволяет другим программам вызывать его / копировать cust_pr * «Интерфейс процедуры» описывает параметры * ENTRY P getCustInf BD getCustInf PI D pCusNo 6p 0 const D pName 30a D pAddr1 30a D pAddr2 30a D pCity 25a D pState 2a D pZip 10a / free exec sql select arName, arAddr1, arAdd2, arCityZ into pName,: pAddr1,: pAddr2,: pCity,: pState,: pZip из ARMstF1, где arCNum =: pCusNo для выборки только выборка первой 1 строки, оптимизация только для 1 строки с помощью CS; / end-free P GetCustInf E

Начиная с версии V7R1 операционной системы, вышеуказанной программе не обязательно нужен прототип в отдельном файле, поэтому ее можно полностью записать как:

     ЧАС основной(GetCustInf)     D ARMSTF1       E DS     п GetCustInf      B     D GetCustInf      ПИ                  extpgm('CUS001')     D  inCusNo                            любить(arCNum) const     D  outName                            любить(arName)     D  outAddr1                           любить(arAdd1)     D  outAddr2                           любить(arAdd2)     D  outCity                            любить(дуга)     D  OutState                           любить(arStte)     D  outZip                             любить(arZip)      /свободный       exec sql Выбрать arName, arAdd1, arAdd2, дуга, arStte, arZip                в  :outName, :outAddr1, :outAddr2, :outCity, :OutState,                      :outZip                от   ARMSTF1                где  arCNum = :inCusNo                принести первый 1 ряд только                с участием CS                использовать В настоящее время совершенный;      /конец-свободный     п GetCustInf      E

Наконец, если вы примените технологию обновления 7 (TR7), относящуюся к PTF компилятора, к своей операционной системе 7.1, то указанная выше программа может быть полностью написана в свободной форме следующим образом:

       ctl-выбрать основной(GetCustInf);       dcl-ds ARMSTF1 доб конец-ds;       dcl-proc GetCustInf;         dcl-Пи *п extpgm('CUS001');           inCusNo любить(arCNum) const;           outName любить(arName);           outAddr1 любить(arAdd1);           outAddr2 любить(arAdd2);           outCity любить(ARCity);           OutState любить(arStte);           outZip любить(arZip);         конец-Пи;         exec sql Выбрать arName, arAdd1, arAdd2, дуга, arStte, arZip                  в  :outName, :outAddr1, :outAddr2, :outCity, :OutState,                        :outZip                  от   ARMSTF1                  где  arCNum = :inCusNo                  принести первый 1 ряд только                  с участием CS                  использовать В настоящее время совершенный;         вернуть;       конец-proc;

Смотрите также

использованная литература

  1. ^ «... IBM 1401 и генератор программ отчетов (RPG) внесли значительный вклад в этот успех ...», Система обработки данных IBM 1401/1959
  2. ^ «Центр знаний IBM - Дом документации по продуктам IBM». Ibm.com. Получено 26 марта 2019.
  3. ^ но там написано 1965 год, а не упомянутый здесь 1959 год.
  4. ^ «Генерация случайных чисел в ILE RPG с использованием API CEERAN0», IBM.com
  5. ^ «Как мы пропустили Coming of Age из RPG IV?», ibmsystemsmag.com
  6. ^ Пэрис, Джон; Гантнер, Сьюзен. «Абсолютно бесплатная ролевая игра». Журнал IBM Systems. Получено 8 марта 2014.
  7. ^ «Руководство пользователя RPG / 400» (PDF). Ibm.com. Получено 6 августа 2017.
  8. ^ "EASY400 CGIDEV2". Easy400.net. Получено 26 марта 2019.
  9. ^ Ты и я: Ты и я 7.1. Ibmsystemsmag.blogs.com (13 апреля 2010 г.). Проверено 10 августа 2013.
  10. ^ Смит, Крис (16 мая 2012 г.). "Глубокая логика разрушает мифы, окружающие Rational Open Access: RPG Edition". Mcpressonline.com. Получено 12 апреля 2016.
  11. ^ «Скотт Клемент присоединяется к команде Profound Logic». Itjungle.com. 16 июля 2012 г.. Получено 12 апреля 2016.

дальнейшее чтение

внешние ссылки