Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

RPG - это язык программирования высокого уровня для бизнес-приложений , представленный в 1959 году для IBM 1401 . Он наиболее известен как основной язык программирования линейки компьютерных продуктов IBM среднего уровня , включая операционную систему IBM i . [1] RPG традиционно имеет ряд отличительных концепций, таких как программный цикл и синтаксис, ориентированный на столбцы. [2] Самая последняя версия - RPG IV , которая включает в себя ряд функций модернизации, включая синтаксис свободной формы. [3]

Платформы [ править ]

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

Приложения RPG II по-прежнему поддерживаются операционными системами IBM z / VSE [4] и z / OS , [5] Unisys MCP , [6] Microsoft Windows и OpenVMS . [7]

Ранняя история [ править ]

Первоначально разработанное IBM в 1959 году, название Report Program Generator описывало цель языка: создание отчетов из файлов данных. [8] FOLDOC аккредитует Уилфа Хея на работу в IBM, результатом которой стала разработка RPG. [9] ФАРГО ( Р ourteen-о-один utomatic R ТЧЕТ G eneration O peration) был предшественником RPG на IBM 1401 .

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

Альтернативными языками, общедоступными в то время, были Ассемблер , COBOL или FORTRAN . Ассемблер и COBOL были более распространены в бизнес-операциях мэйнфреймов ( System / 360 модели 30 и выше), а RPG чаще использовались клиентами, которые переходили от оборудования для составления таблиц (System / 360 модель 20).

РПГ II [ править ]

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

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

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

РПГ III [ править ]

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

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

DE / RPG [ править ]

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

RPG / 400 [ править ]

RPG / 400 фактически представляла собой RPG 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.

Сторонние разработки [ править ]

Компания Amalgamated Software of North America (ASNA) в конце 1980-х годов выпустила сторонний компилятор для System / 36 под названием 400RPG. Другая компания под названием BPS создала сторонний препроцессор под названием RPG II-1/2. Оба этих продукта позволяли пользователям писать программы RPG II с кодами операций RPG III.

РПГ IV [ править ]

RPG IV , также известная как RPGLE или ILE RPG , [10] ) была выпущена в 1994 году как часть версии V3R2 OS / 400 (теперь известной как IBM i). [11] С выпуском RPG IV название RPG официально перестало быть инициализмом . RPG IV предлагала большее разнообразие выражений в своей Спецификации вычисления Расширенного Фактора-2, а позже - в Спецификации Вычисления в свободном формате и Синтаксисе Процедуры. RPG IV - единственная версия RPG, поддерживаемая IBM в ее длинной череде преемников системы AS / 400 ( iSeries , System i и т. Д.).

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

Хотя редактирование по-прежнему можно выполнять через SEU, простой редактор с зеленым экраном (хотя проверка синтаксиса не поддерживается для функций, представленных начиная с IBM i V7R1), с течением времени был разработан длинный ряд инструментов. Некоторые из них включают CODE / 400 и Visual Age for RPG, разработанные IBM. В настоящее время предпочтительной платформой редактирования является клиент IBM Websphere Development Studio (WDSc), который теперь называется RDi (Rational Developer for i), который представляет собой настраиваемую реализацию Eclipse. Eclipse, а следовательно, и RDi, в основном работают на персональных компьютерах и других устройствах. IBM постоянно расширяет свои возможности и добавляет больше встроенных функций (BIF). Он имеет возможность связываться с объектами Java [13] и API IBM i ; его можно использовать для написанияCGI программы с помощью IBM, Cgidev2 Web Toolkit, [14] в RPG Toolbox и других коммерческих веб-поддержкой пакетов. Даже с внесенными изменениями он сохраняет значительную обратную совместимость, поэтому программа RPG, написанная 37 лет назад, может работать сегодня с небольшими изменениями или без них.

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

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

В 2010 году IBM выпустила RPG Open Access , также известную как Rational Open Access: RPG Edition . Это позволяет программисту определять новые обработчики ввода-вывода, что позволяет считывать и записывать данные в источники данных, которые не имеют встроенной поддержки в RPG. [15]

Типы данных [ править ]

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

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

Пример кода [ править ]

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

 * Исторически RPG носила столбчатый характер, хотя и имела свободный формат. * было разрешено при определенных обстоятельствах. * Назначение различных строк кода определяется * буквенный код в столбце 6. * Звездочка (*) в столбце 7 обозначает строку комментария. * Спецификации "F" (файл) определяют файлы и другие устройства ввода-вывода F ARMstF1 IF EK Переименование диска (ARMST: RARMST) * Спецификации "D" (данные) используются для определения переменных D pCusNo S 6p D pName S 30a D pAddr1 S 30a D pAddr2 S 30a D pCity S 25a D p Состояние S 2a D pZip S 10a * Спецификации "C" (расчет) используются для исполняемых операторов * Параметры определяются с помощью кодов операций plist и parm C * список записей C parm pCusNo Параметр C pName Параметр C pAddr1 Параметр C pAddr2 C parm pCity Параметр C pState C parm pZip * Команда "цепочка" используется для произвольного доступа к ключевому файлу. C цепочка pCusNo 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 * РПГ использует переключатели. Один переключатель "LR" первоначально обозначал "последнюю запись". * LR помечает программу и ее пространство данных как удаляемые из памяти. C eval * InLR = * Вкл.

Эта же программа с бесплатными вычислениями доступна начиная с V5R1:

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

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

создать  таблицу  armstf1 ( arcnum  decimal ( 7 , 0 ),  arname  char ( 30 ),  aradd1  char ( 30 ),  aradd2  char ( 30 ),  arcity  char ( 25 ),  arstte  char ( 2 ),  arzip  char ( 10 ))

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

 * RPG IV больше не требует использования индикатора * INLR для завершения программы. * используя ключевое слово MAIN в спецификации "H" (заголовок) и определяя "main" или * имя процедуры входа, программа будет начинаться и заканчиваться нормально без использования * Цикл ролевой игры десятилетней давности и логика начала и конца, больше похожая на "C". H ГЛАВНАЯ (getCustInf) * Спецификации "D" (данные) используются для определения переменных и параметров. * «Прототип» программы находится в отдельном файле. * разрешение другим программам называть его / copy cust_pr * «Интерфейс процедуры» описывает * параметры ВХОДА P getCustInf B D getCustInf PI D pCusNo 6p 0 const D pName 30a D pAddr1 30a D pAddr2 30a D pCity 25a D p Состояние 2a D pZip 10a /бесплатно exec sql выберите arName, arAddr1, arAdd2, arCity, arStte, arZip в: pName,: pAddr1,: pAddr2,: pCity,: pState,: pZip из ARMstF1 где arCNum =: pCusNo только для получения получить только первую строку оптимизировать для 1 строки с CS; / без конца P GetCustInf E

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

 H  main ( GetCustInf )  D  ARMSTF1  E  DS  P  GetCustInf  B  D  GetCustInf  PI  extpgm ( 'CUS001' )  D  inCusNo  like ( arCNum )  const  D  outName  like ( arName )  D  outAddr1  like ( arAdd1 )  D  outAddr2  like ( arAdd2 )  D  outCity  like ( arAdd2 ) D outCity like arCity )  D outState  как ( arStte )  D  outZip  как ( arZip )  / свободный  Exec  SQL  выберите  arName ,  arAdd1 ,  arAdd2 ,  arCity ,  arStte ,  arZip  в  : outName ,  : outAddr1 ,  : outAddr2 ,  : загородный ,  : outState ,  : outZip  от  ARMSTF1 ,  где  arCNum  =  :inCusNo  выборки  первого  1  строку  только  с  CS  использование в  настоящее время  совершено ;  / end - бесплатно  P  GetCustInf  E

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

 ctl - opt  main ( GetCustInf );  dcl - ds  ARMSTF1  ext  end - ds ;  dcl - proc  GetCustInf ;  dcl - pi  * n  extpgm ( 'CUS001' );  inCusNo  как ( arCNum )  const ;  outName  like ( arName );  outAddr1  как ( arAdd1 );  outAddr2  как ( arAdd2 ); outCity  нравится ( arCity );  outState  как ( arStte );  как outZip  ( arZip ); конец - пи ; Exec SQL выберите arName , arAdd1 , arAdd2 , arCity , arStte , arZip в : outName , : outAddr1 , : outAddr2 , : загородной , : outState , : outZip из                   ARMSTF1 ,  где  arCNum  =  : inCusNo  выборки  первого  1  строку  только  с  CS  использование в  данный момент  совершено ;  возврат ;  конец - proc ;

См. Также [ править ]

  • IBM RPG II

Ссылки [ править ]

  1. ^ «Введение в RPG ILE» . IBM . Проверено 16 марта 2021 .
  2. ^ Тони Бариц; Дэвид Данн (1991). AS / 400 - концепции и возможности . Макгроу-Хилл. ISBN 978-0-07-018301-8.
  3. ^ Alex Woodie (2020-08-24). "Пора переименовать РПГ?" . itjungle.com . Проверено 16 марта 2021 .
  4. ^ "IBM DOS / VS RPG-II" . IBM. 2020-08-03 . Проверено 17 марта 2021 .
  5. ^ «Список поддерживаемых продуктов» . IBM. 2021-03-16 . Проверено 17 марта 2021 .
  6. ^ "ClearPath MCP Express" (PDF) . Unisys. 2017 . Проверено 17 марта 2021 .
  7. ^ «Миграция РПГ» . migrationspecialties.com . Проверено 17 марта 2021 .
  8. ^ "... IBM 1401 и Report Program Generator (RPG) внесли значительный вклад в этот успех ..." , IBM 1401 Data Processing System / 1959
  9. ^ но там написано 1965 год, а не упомянутый здесь 1959 год.
  10. ^ «Генерация случайных чисел в ILE RPG с использованием API CEERAN0» , IBM.com
  11. ^ "Как мы пропустили" Coming of Age из RPG IV? " , ibmsystemsmag.com
  12. ^ Пэрис, Джон ; Гантнер, Сьюзен. «Абсолютно бесплатная ролевая игра» . Журнал IBM Systems . Проверено 8 марта 2014 .
  13. ^ "Руководство пользователя RPG / 400" (PDF) . Ibm.com . Дата обращения 6 августа 2017 .
  14. ^ "EASY400 CGIDEV2" . Easy400.net . Проверено 26 марта 2019 .
  15. ^ «Rational Open Access: RPG Edition» . IBM . Проверено 17 марта 2021 .

Дальнейшее чтение [ править ]

  • «9PAC, Генератор отчетов» . История языков программирования (HOPL), Университет Мердока, Австралия. 2006. Архивировано из оригинала на 2010-12-24 . Проверено 1 апреля 2008 .
  • «РПГ, генератор программ отчетов» . История языков программирования (HOPL), Университет Мердока, Австралия. 2006. Архивировано из оригинала на 2011-04-15 . Проверено 1 апреля 2008 .
  • Дюшарм, Боб (26 февраля 2006 г.). «Извлечение данных из компьютеров в середине двадцатого и начале двадцать первого веков» .
  • Коззи, Роберт (1996). «Современный язык RPG IV» .
  • Шелли, Гэри Б.; Томас Дж. Кэшман (1977). Введение в компьютерное программирование RPG . Фуллертон, Калифорния: Издательская компания Анахайма. ISBN 0-88236-225-9.

Внешние ссылки [ править ]

  • Смит, Брайан Р .; Мартин Барбо; Сьюзан Гантнер; Джон Пэрис; Здравко Винцетич; Владимир Зупка (25 апреля 2000 г.). «Кто знал, что вы можете сделать это с помощью RPG IV? Руководство волшебника по доступу к системе и многому другому» (PDF) . Международная организация технической поддержки IBM . Проверено 18 февраля 2012 . «Эта красная книга посвящена RPG IV как современному, процветающему и богатому языку разработки приложений для 21 века».
  • Midrange.com  - здесь доступно большое количество примеров кода.
  • RPGPGM.COM  - обширный ресурс статей с примерами кода RPG и связанного с ним программирования.
  • RPG Open  - бесплатные ресурсы (с открытым исходным кодом) для разработки приложений RPG IV и IBM i.
  • IBM (1964). Руководство по IBM 1401 RPG (PDF) . C24-3261-1.
  • IBM (2016). Руководство программиста ILE RPG (PDF) . SC09-2507-10.
  • RPG II для MVS, OS / 390 и z / OS  - Статус продукта IBM RPG II в z / OS
  • Для старожилов  - онлайн-компилятор RPG I для небольших экспериментов и переделок
  • [1] программисты rpg
  • Руководство по RPGLE для начинающих - AS400i.com