Jump to content

Рекс

(Перенаправлено с REXX )

Рекс
Парадигма мультипарадигмальность : процедурная , структурированная
Разработано Майк Коулишоу
Разработчик Майк Коулишоу, IBM
Впервые появился 1979 год ; 45 лет назад ( 1979 )
Стабильная версия
АНСИ Х3.274 / 1996 ; 28 лет назад ( 1996 )
Дисциплина набора текста Динамический
Расширения имен файлов .cmd, .bat, .exec, .rexx, .rex, EXEC
Основные реализации
ВМ/СП Р3, [1] TSO/E V2, SAAREXX, ARexx , BREXX, Регина, [2] Персональный REXX, REXX/imc
Диалекты
NetRexx , Object REXX , теперь ooREXX , KEXX
Под влиянием
ПЛ/И , АЛГОЛ , ВЫПОЛНЕНИЕ , ВЫПОЛНЕНИЕ 2
Под влиянием
NetRexx , Объект REXX

Rexx ( Restructured Extended Executor ) — это язык программирования, который можно интерпретировать или компилировать . Он был разработан в IBM Майком Коулишоу . [3] [4] Это структурированный язык программирования высокого уровня, разработанный для простоты изучения и чтения. Собственные интерпретаторы Rexx и с открытым исходным кодом Rexx интерпретаторы существуют для широкого спектра вычислительных платформ; существуют компиляторы для мейнфреймов IBM . [5]

Rexx — полноценный язык, который можно использовать в качестве языка сценариев , макросов и языка разработки приложений. Он часто используется для обработки данных и текста и создания отчетов; это означает, что Rexx хорошо работает в программировании Common Gateway Interface (CGI) и используется для этой цели, как и более поздние языки, такие как Perl . Rexx является основным языком сценариев в некоторых операционных системах, например OS/2 , MVS , VM , AmigaOS , а также используется в качестве внутреннего языка макросов в некоторых других программах, таких как SPF/PC , KEDIT , THE и ZOC. эмулятор терминала . Кроме того, язык Rexx можно использовать для сценариев и макросов в любой программе, использующей языки сценариев ActiveX узла сценариев Windows (например, VBScript и JScript), если установлен один из механизмов Rexx.

Rexx поставляется с VM/SP версии 3 или выше, TSO/E версии 2 или выше, OS/2 (1.3 и новее, где он официально называется «Process Language/2» ), AmigaOS версии 2 или выше, PC DOS ( 7.0 или 7.0 или более поздняя версия). 2000 ), АркаОС , [6] и Windows NT 4.0 (Resource Kit: Retina). Сценарии REXX для CMS используют общий тип файла EXEC с EXEC и EXEC2, а первая строка сценария определяет используемый интерпретатор. Скрипты REXX для MVS могут [а] быть признан квалификатором низкого уровня EXEC или может [б] распознаваться по контексту и первой строке. Сценарии REXX для OS/2 имеют расширение имени файла .cmd, как и другие языки сценариев, и в первой строке сценария указывается используемый интерпретатор. Макросы REXX для приложений, поддерживающих REXX, используют расширения, определяемые приложением. В конце 1980-х годов Rexx стал распространенным языком сценариев для архитектуры приложений IBM Systems , где он был переименован в «Язык процедур SAA REXX».

В программировании мэйнфреймов сценарий или команду Rexx иногда называют EXEC в честь типа файла CMS, используемого для EXEC . [7] ИСПОЛНИТЕЛЬ 2 [8] и сценарии REXX на CP/CMS и VM/370 через z/VM .

Особенности [ править ]

Rexx имеет следующие характеристики и особенности:

  • Простой синтаксис
  • Возможность маршрутизации команд в несколько сред
  • Возможность поддержки функций, процедур и команд, связанных с конкретной вызывающей средой.
  • Встроенный стек с возможностью взаимодействия со стеком хоста, если таковой имеется.
  • Небольшой набор инструкций, содержащий всего два десятка инструкций.
  • произвольной формы Синтаксис
  • Токены без учета регистра, включая имена переменных
  • символьной строки Основа
  • Динамическая типизация данных , без объявлений
  • Никаких зарезервированных ключевых слов , за исключением местного контекста.
  • Нет возможностей включения файлов
  • Произвольная числовая точность
  • Десятичная арифметика, с плавающей запятой
  • Богатый выбор встроенных функций, особенно строковой и текстовой обработки.
  • Автоматическое управление хранилищем
  • Защита от сбоев
  • Структуры данных, адресуемые по содержимому
  • Ассоциативные массивы
  • Прямой доступ к системным командам и средствам
  • Простая обработка ошибок, встроенные средства трассировки и отладчика.
  • Несколько искусственных ограничений
  • Упрощенные средства ввода-вывода
  • Нетрадиционные операторы
  • Лишь частично поддерживает параметры командной строки в стиле Unix, за исключением конкретных реализаций.
  • Не обеспечивает базового управления терминалом как часть языка, за исключением конкретных реализаций.
  • Не предоставляет общего способа включения функций и подпрограмм из внешних библиотек, за исключением конкретных реализаций.

У Рекса всего двадцать три, в основном самоочевидные инструкции (например, call, parse, и select) с минимальными требованиями к пунктуации и форматированию. По сути, это язык почти свободной формы , имеющий только один тип данных — строку символов; эта философия означает, что все данные видимы (символичны), а отладка и отслеживание упрощены.

Синтаксис Rexx похож на PL/I , но имеет меньше обозначений; это усложняет анализ (программой), но упрощает использование, за исключением случаев, когда привычки PL/I могут привести к неожиданностям. Одной из целей дизайна REXX был принцип наименьшего удивления . [9]

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

до 1990 года [ править ]

Rexx был разработан и впервые реализован на языке ассемблера как собственный проект в период с 20 марта 1979 года по середину 1982 года Майком Коулишоу из IBM, первоначально как язык программирования сценариев для замены языков EXEC и EXEC 2 . [3] Он был разработан как язык макросов или сценариев для любой системы. Таким образом, Rexx считается предшественником Tcl и Python . Создатель Rexx также задумывал его как упрощенную и легкую для изучения версию языка программирования PL/I . Однако некоторые отличия от PL/I могут сбить с толку неосторожных.

Впервые он был описан публично на конференции SHARE 56 в Хьюстоне, штат Техас, в 1981 году. [10] где реакция клиентов, поддержанная Тедом Джонстоном из SLAC , привела к тому, что в 1982 году он стал поставляться как продукт IBM.

На протяжении многих лет IBM включала Rexx почти во все свои операционные системы ( VM/CMS , MVS TSO/E , IBM OS/400 , VSE/ESA , AIX , PC DOS и OS/2 ) и сделала версии доступными для Novell. NetWare , Windows , Java и Linux .

Первая версия, созданная не IBM, была написана для PC DOS Чарльзом Дейни в 1984/5 году. [4] и продается компанией Mansfield Software Group (основанной Кевином Дж. Кирни в 1986 году). [3] Первая версия компилятора появилась в 1987 году и была написана для CMS Лундином и Вудраффом. [11] Другие версии также были разработаны для Atari , AmigaOS , Unix (множество вариантов), Solaris , DEC , Windows , Windows CE , Pocket PC , DOS , Palm OS , QNX , OS/2 , Linux , BeOS , EPOC32 / Symbian , AtheOS , ОпенВМС , [12] : стр.305 Apple Macintosh и Mac OS X. [13]

Версия Rexx для Amiga , названная ARexx , была включена в AmigaOS 2 и более поздних версиях и была популярна для создания сценариев, а также для управления приложениями. Многие приложения Amiga имеют встроенный «порт ARexx», который позволяет управлять приложением из Rexx. Один единственный сценарий Rexx может даже переключаться между разными портами Rexx, чтобы управлять несколькими запущенными приложениями.

1990 по настоящее время [ править ]

В 1990 году Кэти Дэйгер из SLAC организовала первый независимый симпозиум Rexx, который привел к созданию Языковой ассоциации REXX. Симпозиумы проводятся ежегодно.

несколько бесплатных Доступно версий Rexx. В 1992 году появились два наиболее широко используемых порта с открытым исходным кодом : REXX/imc Яна Коллиера для Unix и Regin Андерса Кристенсена. [2] (позже принят Марком Хесслингом) для Windows и Unix. BREXX хорошо известен благодаря платформам WinCE и Pocket PC и был «обратно портирован» на VM/370 и MVS .

OS/2 имеет систему визуальной разработки от Watcom VX-REXX . Другим диалектом был VisPro REXX от Hockware.

Portable Rexx от Kilowatt и Personal Rexx от Quercus — это два интерпретатора Rexx, разработанные для DOS, которые также можно запускать под Windows с использованием командной строки. С середины 1990-х годов появились два новых варианта Rexx:

  • NetRexx : компилируется в Java байт-код через исходный код Java; он вообще не имеет зарезервированных ключевых слов и использует объектную модель Java и поэтому обычно не совместим с «классическим» Rexx.
  • Object REXX : объектно-ориентированная версия Rexx, совместимая с предыдущими версиями.

В 1996 году Американский национальный институт стандартов (ANSI) опубликовал стандарт для Rexx: ANSI X3.274–1996 «Информационные технологии – язык программирования REXX». [14] С 1985 года было опубликовано более двух десятков книг о Рексе.

20 марта 2004 года Rexx отметил свое 25-летие, которое отмечалось на 15-м Международном симпозиуме REXX Языковой ассоциации REXX в Бёблингене, Германия, в мае 2004 года.

12 октября 2004 года IBM объявила о своем плане выпустить Object REXX исходные коды реализации под лицензией Common Public License . Последние выпуски Object REXX содержат механизм сценариев ActiveX Windows Scripting Host (WSH), реализующий эту версию языка Rexx.

22 февраля 2005 г. было объявлено о первом публичном выпуске Open Object Rexx (ooRexx). Этот продукт содержит механизм сценариев WSH, который позволяет программировать операционную систему Windows и приложения с помощью Rexx таким же образом, как Visual Basic и JScript реализуются с помощью установки WSH по умолчанию, а также Perl , Tcl , Python сторонних механизмов сценариев .

По состоянию на январь 2017 г. REXX вошел в индекс TIOBE как один из пятидесяти языков, входящих в сотню лучших, не входящих в топ-50. [15]

В 2019 году 30-й симпозиум Ассоциации языков Rexx отметил 40-летие Rexx. Симпозиум проводился в Херсли, Англия, где Rexx был впервые разработан и реализован. [16]

Наборы инструментов [ править ]

Инструментарий RexxUtil — это пакет функций, доступный для большинства реализаций Rexx и большинства хостовых операционных систем. [17] [18] [19] RexxUtil — это пакет функций файлов и каталогов, оконного ввода-вывода и функций для доступа к системным службам, таким как WAIT и POST.

Rexx/Tk, набор инструментов для графики, который можно использовать в программах Rexx так же, как Tcl/Tk, широко доступен.

Для Windows была разработана среда разработки Rexx RxxxEd. [12] Был разработан RxSock для сетевого взаимодействия, а также другие дополнения и реализации Retina Rexx, а интерпретатор Rexx для командной строки Windows поставляется в большинстве Resource Kits для различных версий Windows и работает под всеми из них, а также ДОС.

Орфография и использование заглавных букв [ править ]

Первоначально язык назывался Rex ( Reformed Executor ); был добавлен дополнительный «X», чтобы избежать конфликтов с названиями других продуктов. Первоначально REX был полностью написан в верхнем регистре, потому что код мэйнфрейма был ориентирован на верхний регистр. В те дни принято было писать имена заглавными буквами, отчасти потому, что почти весь код тогда еще писался заглавными буквами. Для продукта это название было REXX, и в обоих изданиях книги Майка Коулишоу используются заглавные буквы. Расширение REstructured eXtended eXecutor было использовано для системного продукта в 1984 году. [9]

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

Цикл [ править ]

Структура управления циклом в Rexx начинается с DO и заканчивается END но бывает нескольких разновидностей. NetRexx использует ключевое слово LOOP вместо DO для цикла, а ooRexx обрабатывает LOOP и DO как эквивалент при зацикливании.

Условные циклы [ править ]

Rexx поддерживает множество традиционных циклов структурного программирования при проверке условия либо до ( do while) или после ( do until) список инструкций выполняется:

 do while [condition]
 [instructions]
 end
 do until [condition]
 [instructions]
 end

Повторяющиеся циклы [ править ]

Как и большинство языков, Rexx может выполнять цикл при увеличении индексной переменной и останавливаться при достижении предела:

 do index = start [to limit] [by increment] [for count]
 [instructions]
 end

Приращение может быть опущено и по умолчанию равно 1. Предел также может быть опущен, что заставляет цикл продолжаться вечно.

Rexx допускает циклы со счетчиком, в которых выражение вычисляется в начале цикла, а инструкции внутри цикла выполняются определенное количество раз:

 do expression
 [instructions]
 end

Rexx может даже зацикливаться до тех пор, пока программа не завершится:

 do forever
 [instructions]
 end

Программа может выйти из текущего цикла с помощью leave инструкция, которая является обычным способом выхода из do forever петлю или можно закоротить ее с помощью iterate инструкция.

Комбинированные петли [ править ]

Как и PL/I , Rexx позволяет комбинировать в одном цикле как условные, так и повторяющиеся элементы: [20]

 do index = start [to limit] [by increment] [for count] [while condition]
 [instructions]
 end
 do expression [until condition]
 [instructions]
 end

Условные предложения [ править ]

Условия тестирования с IF:

 if [condition] then
 do
 [instructions]
 end
 else
 do
 [instructions]
 end

The ELSE пункт является необязательным.

Для отдельных инструкций DO и END также можно опустить:

 if [condition] then
 [instruction]
 else
 [instruction]

Отступы не являются обязательными, но они помогают улучшить читаемость.

Тестирование на несколько условий [ править ]

SELECT Rexx — это структура CASE , полученная из ВЫБИРАТЬ; форма [с] ЛП Оператор ВЫБРАТЬ . Как и некоторые реализации конструкций CASE в других динамических языках, Rexx Предложения WHEN определяют полные условия, которые не обязательно должны быть связаны друг с другом. В этом отношении они больше похожи на каскадные наборы IF-THEN-ELSEIF-THEN-...-ELSE код, чем они похожи на C или Java оператор переключения .

 select
 when [condition] then
 [instruction] or NOP
 when [condition] then
 do
 [instructions] or NOP
 end
 otherwise
 [instructions] or NOP
 end

The Инструкция NOP не выполняет «никаких операций» и используется, когда программист не хочет ничего делать в месте, где потребуются одна или несколько инструкций.

The Предложение OTHERWISE не является обязательным. Если он опущен и условия WHEN не выполняются, то возникает условие SYNTAX.

Простые переменные [ править ]

Переменные в Rexx не имеют типов и изначально оцениваются как их имена в верхнем регистре. Таким образом, тип переменной может меняться в зависимости от ее использования в программе:

 say hello /* => HELLO */
 hello = 25
 say hello /* => 25 */
 hello = "say 5 + 3"
 say hello /* => say 5 + 3 */
 interpret hello /* => 8 */
 drop hello
 say hello /* => HELLO */

Составные переменные [ править ]

В отличие от многих других языков программирования, классический Rexx не имеет прямой поддержки массивов переменных, адресованных числовым индексом. Вместо этого он предоставляет составные переменные . [21] Составная переменная состоит из основы, за которой следует хвост. А . (точка) используется для соединения стебля с хвостом. Если используемые хвосты являются числовыми, легко добиться того же эффекта, что и массива.

 do i = 1 to 10
 stem.i = 10 - i
 end

После этого существуют следующие переменные со следующими значениями: stem.1 = 9, stem.2 = 8, stem.3 = 7...

В отличие от массивов, индекс основной переменной не обязательно должен иметь целочисленное значение. Например, допустим следующий код:

 i = 'Monday'
 stem.i = 2

В Rexx также можно установить значение по умолчанию для основы.

 stem. = 'Unknown'
 stem.1 = 'USA'
 stem.44 = 'UK'
 stem.33 = 'France'

После этих заданий срок stem.3 будет производить 'Unknown'.

Весь стебель также можно удалить с помощью оператора DROP.

 drop stem.

Это также приведет к удалению любого ранее установленного значения по умолчанию.

По соглашению (а не как часть языка) составное слово stem.0 часто используется для отслеживания количества элементов в основе, например, процедура добавления слова в список может быть закодирована следующим образом:

 add_word: procedure expose dictionary.
 parse arg w
 n = dictionary.0 + 1
 dictionary.n = w
 dictionary.0 = n
 return

Также возможно иметь несколько элементов в хвосте составной переменной. Например:

 m = 'July'
 d = 15
 y = 2005
 day.y.m.d = 'Friday'

Для создания эффекта многомерного массива можно использовать несколько числовых элементов хвоста.

Функции, аналогичные составным переменным Rexx, встречаются во многих других языках (включая ассоциативные массивы в AWK , хэши в Perl и Hashtables в Java ). Большинство этих языков предоставляют инструкцию для перебора всех ключей (или хвостов в терминах Rexx) такой конструкции, но в классическом Rexx этого нет. Вместо этого необходимо сохранять вспомогательные списки хвостовых значений по мере необходимости. Например, в программе для подсчета слов можно использовать следующую процедуру для записи каждого появления слова.

 add_word: procedure expose count. word_list
 parse arg w .
 count.w = count.w + 1 /* assume count. has been set to 0 */
 if count.w = 1 then word_list = word_list w
 return

а потом позже:

 do i = 1 to words(word_list)
 w = word(word_list,i)
 say w count.w
 end

За счет некоторой ясности можно объединить эти методы в одну основу:

 add_word: procedure expose dictionary.
 parse arg w .
 dictionary.w = dictionary.w + 1
 if dictionary.w = 1 /* assume dictionary. = 0 */
 then do
 n = dictionary.0+1
 dictionary.n = w
 dictionary.0 = n
 end
 return

и позже:

 do i = 1 to dictionary.0
 w = dictionary.i
 say i w dictionary.w
 end

Rexx здесь не обеспечивает никакой страховки, поэтому, если одно из слов окажется на целое число меньше dictionary.0 эта техника таинственным образом потерпит неудачу.

Недавние реализации Rexx, включая IBM Object REXX и реализации с открытым исходным кодом, такие как ooRexx, включают новую языковую конструкцию , упрощающую итерацию по значению основы или по другому объекту коллекции, например массиву, таблице или списку.

 do i over stem.
 say i '-->' stem.i
 end

В общем, составные переменные предоставляют механизм для создания практически любой структуры данных в Rexx. К ним относятся списки или простые массивы, n-мерные массивы, разреженные или плотные массивы, сбалансированные или несбалансированные деревья, записи и многое другое.

Инструкции по ключевым словам [ править ]

ПАРСИ [ править ]

The PARSE обучение особенно мощно; он сочетает в себе некоторые полезные функции обработки строк. Его синтаксис:

parse [upper] origin [template]

где origin указывает источник:

  • arg (аргументы, в конце командной строки на верхнем уровне)
  • linein (стандартный ввод, например, клавиатура)
  • pull (очередь данных Rexx или стандартный ввод)
  • source (информация о том, как выполнялась программа)
  • value (выражение) with: ключевое слово with требуется, чтобы указать, где заканчивается выражение
  • var (переменная)
  • version (номер версии/выпуска)

и шаблон может быть:

  • список переменных
  • разделители номеров столбцов
  • буквальные разделители

upper является необязательным; если указано, данные перед анализом будут преобразованы в верхний регистр.

Примеры [ править ]

Использование списка переменных в качестве шаблона

myVar = "John Smith"
parse var myVar firstName lastName
say "First name is:" firstName
say "Last name is:" lastName

отображает следующее:

First name is: John
Last name is: Smith

Использование разделителя в качестве шаблона:

myVar = "Smith, John"
parse var myVar LastName "," FirstName
say "First name is:" firstName
say "Last name is:" lastName

также отображает следующее:

First name is: John
Last name is: Smith

Использование разделителей номеров столбцов:

myVar = "(202) 123-1234"
parse var MyVar 2 AreaCode 5 7 SubNumber
say "Area code is:" AreaCode
say "Subscriber number is:" SubNumber

отображает следующее:

Area code is: 202
Subscriber number is: 123-1234

Шаблон может использовать комбинацию переменных, буквенных разделителей и разделителей номеров столбцов.

ПЕРЕВОД [ править ]

Инструкция INTERPRET оценивает свой аргумент и рассматривает его значение как оператор Rexx. Иногда INTERPRET является наиболее понятным способом выполнения задачи, но он часто используется там, где возможен более понятный код, например, value().

Другими вариантами использования INTERPRET являются арифметика произвольной точности Rexx (десятичная) (включая нечеткие сравнения), использование оператора PARSE с программными шаблонами, массивами с основой и разреженными массивами. [ как? ]

 /* demonstrate INTERPRET with square(4) => 16 */
 X = 'square'
 interpret 'say' X || '(4) ; exit'
 SQUARE: return arg(1)**2

Это отобразит 16 и выйдет. Поскольку содержимое переменных в Rexx представляет собой строки, включая рациональные числа с показателями степени и даже целые программы, Rexx предлагает интерпретировать строки как вычисленные выражения.

Эту функцию можно использовать для передачи функций в качестве параметров функции , например, для передачи SIN или COS в процедуру вычисления интегралов.

Rexx предлагает только базовые математические функции, такие как ABS, DIGITS, MAX, MIN, SIGN, RANDOM, а также полный набор шестнадцатеричных и двоичных преобразований с битовыми операциями. Более сложные функции, такие как SIN, были реализованы с нуля или получены из сторонних внешних библиотек . Некоторые внешние библиотеки, обычно реализованные на традиционных языках, не поддерживали повышенную точность.

Поддержка более поздних версий (неклассических) CALL variable конструкции. Вместе со встроенной функцией VALUE, CALL можно использовать вместо многих случаев INTERPRET. Это классическая программа:

 /* terminated by input "exit" or similar */
 do forever ; interpret linein() ; end

Чуть более сложный «калькулятор Рекса»:

 X = 'input BYE to quit'
 do until X = 'BYE' ; interpret 'say' X ; pull X ; end

PULL это сокращение от parse upper pull. Так же, ARG это сокращение от parse upper arg.

Возможности инструкции INTERPRET имели и другие применения. Программный пакет Valor опирался на интерпретативные способности Rexx для реализации среды ООП . Другое применение было найдено в невыпущенном Westinghouse продукте под названием Time Machine , который смог полностью восстановиться после фатальной ошибки.

ЦИФРОВОЙ [ править ]

 say digits() fuzz() form() /* => 9 0 SCIENTIFIC */
 say 999999999+1 /* => 1.000000000E+9 */
 numeric digits 10 /* only limited by available memory */
 say 999999999+1 /* => 1000000000 */

 say 0.9999999999=1 /* => 0 (false) */
 numeric fuzz 3
 say 0.99999999=1 /* => 1 (true) */
 say 0.99999999==1 /* => 0 (false) */

 say 100*123456789 /* => 1.23456789E+10 */
 numeric form engineering
 say 100*123456789 /* => 12.34567890E+9 */

 say 53 // 7   /* => 4   (rest of division)*/
  Рассчитывает 2 Вычисляет е
код
 numeric digits 50
 n=2
 r=1
 do forever /* Newton's method */
 rr=(n/r+r)/2
 if r=rr then leave
 r=rr
 end
 say "sqrt" n ' = ' r
 numeric digits 50
 e=2.5
 f=0.5
 do n=3
 f=f/n
 ee=e+f
 if e=ee then leave
 e=ee
 end
 say "e =" e
выход кврт 2 = 1,414213562373095048801688724209698078569671875377 е = 2,7182818284590452353602874713526624977572470936998

СИГНАЛ [ править ]

Команда SIGNAL предназначена для нештатных изменений в потоке управления (см. следующий раздел). Однако его можно использовать неправильно и обращаться с ним так же, как с оператором GOTO , встречающимся в других языках (хотя он не является строго эквивалентным, поскольку завершает циклы и другие конструкции). Это может привести к созданию трудночитаемого кода.

Обработка ошибок и исключения [ править ]

В Rexx можно перехватывать и обрабатывать ошибки и другие исключения, используя инструкцию SIGNAL. Существует семь системных состояний: ОШИБКА, ОТКАЗ, ОСТАНОВКА, НОВОЕ ЗНАЧЕНИЕ, НЕГОТОВО, ПОТЕРЯННЫЕ ЦИФРЫ и СИНТАКСИС. Обработку каждого из них можно включать и выключать в исходном коде по желанию.

Следующая программа будет работать до тех пор, пока ее не закроет пользователь:

 signal on halt;
 do a = 1
	 say a
	 do 100000 /* a delay */
	 end
 end
 halt:
 say "The program was stopped by the user"
 exit

А signal on novalue оператор перехватывает использование неопределенных переменных, которые в противном случае получили бы собственное имя (в верхнем регистре) в качестве значения. Независимо от состояния NOVALUE условие, состояние переменной всегда можно проверить встроенной функцией SYMBOL возврат VAR для определенных переменных.

The VALUE функцию можно использовать для получения значения переменных без запуска NOVALUE условие, но его основная цель — читать и устанавливать переменные среды , аналогично POSIX. getenv и putenv.

Условия [ править ]

ERROR
Положительный RC от системной команды
FAILURE
Отрицательный RC для системной команды (например, команда не существует)
HALT
Аномальное завершение
NOVALUE
Была ссылка на неустановленную переменную
NOTREADY
Ошибка ввода или вывода (например, попытки чтения за пределами файла)
SYNTAX
Неверный синтаксис программы или какая-либо другая ошибка.
LOSTDIGITS
Значимые цифры потеряны (ANSI Rexx, нет во втором издании TRL)

Когда условие обрабатывается SIGNAL ON, SIGL и RC системные переменные можно проанализировать, чтобы понять ситуацию. RC содержит код ошибки Rexx, а SIGL содержит номер строки, в которой возникла ошибка.

Начиная с версии 4 Rexx, условия могут получать имена, а также есть CALL ON построить. Это удобно, если внешние функции не обязательно существуют:

 ChangeCodePage: procedure /* protect SIGNAL settings */
 signal on syntax name ChangeCodePage.Trap
 return SysQueryProcessCodePage()
 ChangeCodePage.Trap: return 1004 /* windows-1252 on OS/2 */

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

Примечания [ править ]

  1. ^ Команда TSO EXEC с неполным именем набора данных и без опции CLIST или EXEC проверяет квалификатор нижнего уровня или EXEC.
  2. ^ Если первая строка сценария, полученного из SYSPROC, представляет собой комментарий, содержащий REXX, то он обрабатывается как REXX, а не CLIST. Сценарий, полученный из SYSEXEC, должен быть REXX.
  3. ^ Rexx не имеет эквивалента ВЫБРАТЬ ( выражение ); форма ВЫБОР.

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

  1. ^ ИБМ (1999). «Справочник по REXX/VM» (PDF) . МАНМРК . Проверено 29 мая 2023 г.
  2. ^ Jump up to: Перейти обратно: а б Марк Хесслинг (25 октября 2012 г.). «Переводчик Регина Рекс» . SourceForge Проект regina-rexx . Проверено 10 февраля 2014 г.
  3. ^ Jump up to: Перейти обратно: а б с М. Ф. Коулишоу . «Краткая история IBM REXX» . ИБМ . Проверено 15 августа 2006 г.
  4. ^ Jump up to: Перейти обратно: а б Мелинда Вариан. «Симпозиум REXX, май 1995 г.» .
  5. ^ «Каталог всех документов (filter=rexx)» . IBM Библиотечный сервер . 2005. Архивировано из оригинала 15 февраля 2013 года . Проверено 10 февраля 2014 г.
  6. ^ «Включает ли ArcaOS поддержку REXX?» . Проверено 3 сентября 2020 г.
  7. ^ IBM Virtual Machine Facility /370: Руководство пользователя EXEC (PDF) (второе изд.). Международная корпорация бизнес-машин. Апрель 1975 г. GC20-1812-1.
  8. ^ Справочник EXEC 2 (PDF) (второе изд.). Международная корпорация бизнес-машин. Апрель 1982 г. с. 92. SC24-5219-1. Архивировано из оригинала (PDF) 2 апреля 2020 г. Проверено 28 марта 2019 г.
  9. ^ Jump up to: Перейти обратно: а б М. Ф. Коулишоу (1984). «Дизайн языка REXX» (PDF) . Системный журнал IBM (PDF) . 23 (4). IBM Research : 333. doi : 10.1147/sj.234.0326 . Проверено 23 января 2014 г. Может ли новая функция вызывать сильное удивление? Если пользователь случайно неправильно применил функцию и приводит к непредсказуемому результату, эта функция имеет высокий фактор удивления и, следовательно, нежелательна. Если необходимая функция имеет высокий коэффициент удивления, может потребоваться ее перепроектирование.
  10. ^ М. Ф. Коулишоу (18 февраля 1981 г.). «REX — командный язык программирования» . ДЕЛИТЬСЯ . Проверено 15 августа 2006 г.
  11. ^ Лундин, Ли; Вудрафф, Марк (23 апреля 1987 г.). «T/REXX, компилятор REXX для CMS» . Бюро авторских прав США (TXu000295377). Вашингтон, округ Колумбия: Независимая разведывательная корпорация. Архивировано из оригинала 3 марта 2016 года . Проверено 20 февраля 2010 г.
  12. ^ Jump up to: Перейти обратно: а б Говард Фосдик (2005). Справочник программиста Rexx . Издательство Уайли . п. 390. ИСБН  0-7645-7996-7 .
  13. ^ «Реализации Rexx» . РексЛ.А. Архивировано из оригинала 24 сентября 2006 года . Проверено 15 августа 2006 г.
  14. ^ Хотя ANSI INCITS 274-1996/AMD1-2000 (R2001) и ANSI INCITS 274-1996 (R2007) являются платными, черновой вариант можно скачать бесплатно: «Американский национальный стандарт информационных систем - язык программирования REXX» (PDF) . X3J18-199X.
  15. ^ «Следующие 50 языков программирования» . Индекс ТИОБЕ . tiobe.com. 2017. Архивировано из оригинала 19 января 2017 года . Проверено 10 января 2017 г.
  16. ^ «RexxLA — Расписание симпозиума» .
  17. ^ «Глава 8. Утилиты Rexx (RexxUtil)» . Откройте объект Рекс . Проверено 13 октября 2023 г.
  18. ^ «Советы и рекомендации по REXX: функции REXXUTIL» . EDM2: Электронный журнал разработчиков для OS/2 . Проверено 14 октября 2023 г.
  19. ^ «Переводчик Регина Рекс» . Сорсфордж . Проверено 14 октября 2023 г.
  20. ^ М. Ф. Коулишоу (1990). Язык Rexx - практический подход к программированию (2-е изд.). Прентис Холл . ISBN  0-13-780651-5 .
  21. ^ «Как кодировать массивы и другие структуры данных в Rexx» (PDF) .

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

  • Каллауэй, Меррилл. Поваренная книга ARexx: учебное руководство по языку ARexx на персональном компьютере Commodore Amiga . Уайтстоун, 1992. ISBN   978-0963277305 .
  • Каллауэй, Меррилл. Поваренная книга Rexx: учебное руководство по языку Rexx в OS/2 и Warp на персональном компьютере IBM . Уайтстоун, 1995. ISBN   0-9632773-4-0 .
  • Коулишоу, Майкл. Язык Rexx: практический подход к программированию . Прентис Холл, 1990. ISBN   0-13-780651-5 .
  • Коулишоу, Майкл. Язык NetRexx . Прентис Холл, 1997. ISBN   0-13-806332-X .
  • Дэйни, Чарльз. Программирование в REXX . МакГроу-Хилл, Техас, 1990 г. ISBN   0-07-015305-1 .
  • Эндер, Том. Объектно-ориентированное программирование с помощью Rexx . Джон Уайли и сыновья, 1997. ISBN   0-471-11844-3 .
  • Фосдик, Ховард. Справочник программиста Rexx . Вили/Рокс, 2005. ISBN   0-7645-7996-7 .
  • Гарджуло, Габриэль. REXX с функциями OS/2, TSO и CMS . MVS Training, 1999 г. (третье издание, 2004 г.). ISBN   1-892559-03-X .
  • Голдберг, Габриэль и Смит, Филип Х. Справочник по Рексу . МакГроу-Хилл, Техас, 1992 г. ISBN   0-07-023682-8 .
  • Горан, Ричард К. Сводный справочный справочник по REXX . CFS Nevada, Inc., 1997. ISBN   0-9639854-3-4 .
  • Красные книги IBM. Реализация поддержки Rexx в Sdsf . Верванте, 2007. ISBN   0-7384-8914-X .
  • Кизель, Питер К. Рекс: Передовые методы для программистов . МакГроу-Хилл, Техас, 1992 г. ISBN   0-07-034600-3 .
  • Марко, Лу Разработка ISPF/REXX для опытных программистов . Книги CBM, 1995. ISBN   1-878956-50-7
  • О'Хара, Роберт П. и Гомберг, Дэвид Роос. Современное программирование с использованием Rexx . Прентис Холл, 1988 год. ISBN   0-13-597329-5 .
  • Радд, Энтони С. «Практическое использование TSO REXX». Креатеспейс, 2012. ISBN   978-1475097559 .
  • Шиндлер, Уильям. Спускаясь на Землю, Рекс . Идеальное нишевое программное обеспечение, 2000. ISBN   0-9677590-0-5 .

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

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