Jump to content

IBM РПГ

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

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

Платформы

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

Язык программирования RPG изначально был создан IBM для своих систем 1401. Позже IBM выпустила реализации для 7070/72/74. [4] [5] и Система/360 ; [6] RPG II стал основным языком программирования для их компьютеров среднего класса линейки ( System/3 , System/32 , System/34 , System/38 , System/36 и AS/400 ). Также были реализованы DEC 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. [7] и z/OS , операционные системы [8] Унисис МКП , [9] Microsoft Windows [10] и ОпенВМС . [11]

Первоначально разработанный IBM в 1959 году, название Report Program Generator описывало назначение языка: создание отчетов из файлов данных. [12] FOLDOC благодарит Уилфа Хей за работу в IBM, результатом которой стала разработка ролевой игры. [13] FARGO ( « -один автоматического Четырнадцать отчетов создания » Операция ) была предшественником RPG на IBM 1401 .

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

Позже IBM реализовала RPG (7070-RG-902), но не FARGO, на IBM 7070/72/74. [14] [15]

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

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

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

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

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 году большинство программистов ролевых игр прекратили использование цикла в пользу управления потоком программы с помощью стандартных конструкций циклов, хотя IBM продолжала обеспечивать обратную совместимость для цикла.

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

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

РПГ IV и ИЛЭ РПГ

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

РПГ IV , он же РПГ ИЛЭ [16] ) был выпущен в 1994 году как часть версии V3R2 OS/400 (теперь известной как IBM i). [17] [18]

С выходом RPG IV название RPG официально больше не было инициализмом . RPG IV предлагала большее разнообразие выражений в своей расширенной спецификации расчета коэффициента-2, а позже в своих спецификациях вычислений в свободном формате и синтаксисе процедур. RPG IV в рамках интегрированной языковой среды известен как ILE RPG, и в руководствах пользователя объясняются нюансы обоих. [19] [20] [21] RPG IV и ILE RPG поддерживаются IBM на текущей платформе IBM i. [22]

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

IBM Rational Developer for i (RDi), [24] Интегрированная среда Eclipse на базе разработки рекомендована IBM для разработки RPG. [25] Текстовый редактор Source Entry Utility (SEU) больше не рекомендуется для разработки RPG, и разработка была прекращена после IBM i 6.1. [26] Другие устаревшие инструменты разработчика включают CODE/400 (на основе IBM WorkFrame/2) и VisualAge для RPG .

Продолжающиеся улучшения языка

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

IBM продолжает совершенствовать язык RPG [27] посредством выпусков программного обеспечения и внутрирелизных «обновлений технологий» (TR). [28] [29] Добавлено больше встроенных функций (BIF). Он имеет возможность связываться с Java , объектами [30] IBM i и API ; его можно использовать для написания программ CGI с помощью веб-инструментария Cgidev2 от IBM , [31] RPG Toolbox и другие коммерческие веб-пакеты. Даже с учетом изменений она сохраняет значительную обратную совместимость, поэтому программа RPG, написанная 37 лет назад, может работать сегодня с небольшими изменениями или вообще без них.

Прекомпилятор SQL позволяет нынешним разработчикам ролевых игр воспользоваться преимуществами 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 не обеспечивает встроенную поддержку. [32]

Типы данных

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

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

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

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

Пример кода

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

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

      * Historically RPG was columnar in nature, though free-formatting
      * was allowed under particular circumstances.
      * The purpose of various lines code are determined by a
      * letter code in column 6.
      * An asterisk (*) in column 7 denotes a comment line

      * "F" (file) specs define files and other i/o devices
     F ARMstF1   IF   E       K     Disk    Rename(ARMST:RARMST)

      * "D" (data) specs are used to define variables
     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" (calculation) specs are used for executable statements
      * Parameters are defined using plist and parm opcodes
     C     *entry        plist
     C                   parm                    pCusNo
     C                   parm                    pName
     C                   parm                    pAddr1
     C                   parm                    pAddr2
     C                   parm                    pCity
     C                   parm                    pState
     C                   parm                    pZip

      * The "chain" command is used for random access of a keyed file
     C     pCusNo        chain     ARMstF1

      * If a record is found, move fields from the file into parameters
     C                   if        %found
     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 makes use of switches.  One switch "LR" originally stood for "last record"
      * LR flags the program and its dataspace as removable from memory

     C                   eval      *InLR = *On

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

      * "F" (file) specs define files and other i/o devices
     FARMstF1   IF   E        K     Disk    Rename(ARMST:RARMST)

      * "D" (data) specs are used to define variables and parameters
      * The "prototype" for the program is in a separate file
      * allowing other programs to call it
      /copy cust_pr
      * The "procedure interface" describes the *ENTRY parameters
     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
        // The "chain" command is used for random access of a keyed file
        chain pCusNo ARMstF1;

        // If a record is found, move fields from the file into parameters
        if %found;
           pName  = ARNm01;
           pAddr1 = ARAd01;
           pAddr2 = ARAd02;
           pCity  = ARCy01;
           pState = ARSt01;
           pZip   = ARZp15;
        endif;

      // RPG makes use of switches.  One switch "LR" originally stood for "last record"
      // LR actually flags the program and its dataspace as removable from memory.
        *InLR = *On;
      /end-free

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

create table 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 no longer requires the use of the *INLR indicator to terminate a program.
      * by using the MAIN keyword on the "H" (Header) spec, and identifying the "main" or
      * entry procedure name, the program will begin and end normally without using the
      * decades-old RPG Cycle and instead a more "C like" begin and end logic.
     H  MAIN(getCustInf)
      * "D" (data) specs are used to define variables and parameters
      * The "prototype" for the program is in a separate file
      * allowing other programs to call it
      /copy cust_pr
      * The "procedure interface" describes the *ENTRY parameters
     P getCustInf      B
     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
        exec sql select arName, arAddr1, arAdd2, arCity, arStte, arZip
                 into  :pName, :pAddr1, :pAddr2, :pCity, :pState, :pZip
                 from   ARMstF1
                 where  arCNum = :pCusNo
                 for fetch only
                 fetch first 1 row only
                 optimize for 1 row
                 with CS;
      /end-free
     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(arCity)
     D  outState                           like(arStte)
     D  outZip                             like(arZip)
      /free
       exec sql select arName, arAdd1, arAdd2, arCity, arStte, arZip
                into  :outName, :outAddr1, :outAddr2, :outCity, :outState,
                      :outZip
                from   ARMSTF1
                where  arCNum = :inCusNo
                fetch first 1 row only
                with CS
                use currently committed;
      /end-free
     P GetCustInf      E

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

       ctl-opt main(GetCustInf);
       dcl-ds ARMSTF1 ext end-ds;
       dcl-proc GetCustInf;
         dcl-pi *n extpgm('CUS001');
           inCusNo like(arCNum) const;
           outName like(arName);
           outAddr1 like(arAdd1);
           outAddr2 like(arAdd2);
           outCity like(arCity);
           outState like(arStte);
           outZip like(arZip);
         end-pi;
         exec sql select arName, arAdd1, arAdd2, arCity, arStte, arZip
                  into  :outName, :outAddr1, :outAddr2, :outCity, :outState,
                        :outZip
                  from   ARMSTF1
                  where  arCNum = :inCusNo
                  fetch first 1 row only
                  with CS
                  use currently committed;
         return;
       end-proc;
  1. ^ «РПГ ИЛЭ Введение» . ИБМ. Июнь 2012 г. Архивировано из оригинала 29 февраля 2024 г. Проверено 16 марта 2021 г.
  2. ^ Тони Баритц; Дэвид Данн (1991). AS/400 — концепции и возможности . МакГроу-Хилл. ISBN  978-0-07-018301-8 . Архивировано из оригинала 29 февраля 2024 г. Проверено 16 марта 2021 г.
  3. ^ Алекс Вуди (24 августа 2020 г.). «Пришло ли время переименовать RPG?» . itjungle.com . Архивировано из оригинала 23 апреля 2021 г. Проверено 16 марта 2021 г.
  4. ^ 7070/7074 Системы компиляции: Генератор программ отчетов . ИБМ . С28-6113.
  5. ^ Руководство по системному анализу программирования — Генератор программ отчетов IBM 7070 Series (PDF) . ИБМ . 1962. С28-6192. Архивировано (PDF) из оригинала 19 января 2024 г. Проверено 19 января 2024 г.
  6. ^ IBM System / 360 - Операционная система - Спецификации языка RPG - Номер программы 380S-RG-038 (OS) (PDF) (Седьмое изд.). ИБМ . Июль 1973 г. GC24-3337-6. Архивировано (PDF) из оригинала 19 января 2024 г. Проверено 19 января 2024 г.
  7. ^ «IBM DOS/VS RPG-II» . ИБМ. 03.08.2020. Архивировано из оригинала 17 апреля 2021 г. Проверено 17 марта 2021 г.
  8. ^ «Список поддерживаемых продуктов» . ИБМ. 16 марта 2021 г. Архивировано из оригинала 2 мая 2021 г. Проверено 17 марта 2021 г.
  9. ^ «ClearPath MCP Express» (PDF) . Unisys. 2017. Архивировано (PDF) из оригинала 12 ноября 2020 г. Проверено 17 марта 2021 г.
  10. ^ «Визуальная RPG для .NET» . asna.com . АСНА. Архивировано из оригинала 3 апреля 2022 года . Проверено 3 апреля 2022 г.
  11. ^ «Миграционная РПГ» . migrationspecialties.com . Архивировано из оригинала 17 мая 2021 г. Проверено 17 марта 2021 г.
  12. ^ «...IBM 1401 и генератор программ отчетов (RPG) внесли значительный вклад в этот успех...» Архивировано 24 января 2012 г. в Wayback Machine , Система обработки данных IBM 1401 / 1959 г.
  13. ^ но там указан 1965 год, а не упомянутый здесь 1959 год.
  14. ^ 7070/7074 Системы компиляции: Генератор программ отчетов . ИБМ . С28-6113.
  15. ^ Руководство по системному анализу программирования — Генератор программ отчетов IBM 7070 Series (PDF) . ИБМ . 1962. С28-6192. Архивировано (PDF) из оригинала 19 января 2024 г. Проверено 19 января 2024 г.
  16. ^ «Генерация случайных чисел в ILE RPG с использованием API CEERAN0» [ постоянная мертвая ссылка ] , IBM.com
  17. ^ «Как мы пропустили совершеннолетие RPG IV?» Архивировано 3 марта 2017 г. на Wayback Machine , ibmsystemsmag.com.
  18. ^ «РПГ/400» . IBM.com . Международная корпорация бизнес-машин. 8 мая 2018 г. Архивировано из оригинала 3 апреля 2022 г. . Проверено 4 апреля 2022 г.
  19. ^ «Справочник ИЛЭ по РПГ» . IBM.com . Международная корпорация бизнес-машин. Июнь 2012. Архивировано из оригинала 3 апреля 2022 года . Проверено 4 апреля 2022 г.
  20. ^ «Руководство программиста ILE RPG» . IBM.com . Международная корпорация бизнес-машин. Июнь 2012. Архивировано из оригинала 3 апреля 2022 года . Проверено 4 апреля 2022 г.
  21. ^ «Кому следует использовать это руководство» . IBM.com . Международная корпорация бизнес-машин. Июнь 2012. Архивировано из оригинала 3 апреля 2022 года . Проверено 4 апреля 2022 г.
  22. ^ «Языки высокого уровня» . IBM.com . Международная корпорация бизнес-машин. 8 мая 2018 г. Архивировано из оригинала 3 апреля 2022 г. . Проверено 4 апреля 2022 г.
  23. ^ Пэрис, Джон ; Гантнер, Сьюзен. «Совершенно бесплатная ролевая игра» . Журнал IBM Systems. Архивировано из оригинала 8 марта 2014 года . Проверено 8 марта 2014 г.
  24. ^ «IBM Rational Developer для i» . IBM.com . Международная корпорация бизнес-машин. Архивировано из оригинала 3 апреля 2022 года . Проверено 3 апреля 2022 г.
  25. ^ «5770-WDS IBM Rational Development Studio для i V7.4» . IBM.com . Международная корпорация бизнес-машин. Архивировано из оригинала 3 апреля 2022 года . Проверено 3 апреля 2022 г.
  26. ^ «5770-WDS IBM Rational Development Studio для i V7.4» . IBM.com . Международная корпорация бизнес-машин. Архивировано из оригинала 3 апреля 2022 года . Проверено 4 апреля 2022 г.
  27. ^ ИБМ. «РПГ-кафе» . IBM.com . Международная корпорация бизнес-машин. Архивировано из оригинала 3 апреля 2022 года . Проверено 3 апреля 2022 г.
  28. ^ ИБМ. «Обновления технологий IBM и» . IBM.com . Международная корпорация бизнес-машин. Архивировано из оригинала 12 апреля 2022 года . Проверено 3 апреля 2022 г.
  29. ^ ИБМ. «Обновление технологий IBM и технологий» . IBM.com . Международная корпорация бизнес-машин. Архивировано из оригинала 3 апреля 2022 года . Проверено 3 апреля 2022 г.
  30. ^ «Руководство пользователя RPG/400» (PDF) . IBM.com . Архивировано (PDF) из оригинала 7 августа 2017 года . Проверено 6 августа 2017 г.
  31. ^ «EASY400 CGIDEV2» . Easy400.net . Архивировано из оригинала 26 марта 2019 года . Проверено 26 марта 2019 г.
  32. ^ «Рациональный открытый доступ: издание RPG» . ИБМ. Архивировано из оригинала 29 февраля 2024 г. Проверено 17 марта 2021 г.

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

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 58aef584ccd6e53a6d0bc3a04e759b35__1719864480
URL1:https://arc.ask3.ru/arc/aa/58/35/58aef584ccd6e53a6d0bc3a04e759b35.html
Заголовок, (Title) документа по адресу, URL1:
IBM RPG - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)