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