Насколько может быть полезен язык REstructured eXtended eXecutor (Rexx) для раработчика или администратора AIX®? Гораздо более, нежели Вы можете себе представить, особенно после первого официального релиза в 2006 году варианта Open Object Rexx ('открытый объектный Rexx' - ooRexx) специально для AIX.
Многое из того, что Вам потребуется знать об этом скриптовом языке, представлено в листинге 1:
Листинг 1. Подсчет числа слов с использованием Rexx
parse arg filein
count. = 0
do while lines(filein) > 0
input = linein(filein)
do n = 1 to words(input)
w = word(input, n)
count.w = count.w + 1
if count.w = 1 then word_list = word_list w
end
end
do i = 1 to words(word_list)
w = word(word_list, i)
say w count.w
end
|
Эта программа на Rexx, дана без комментариев.Можете ли Вы догадаться, какие действия она производит? Готов поспорить, что можете, даже если до сих пор Вы были совершенно не знакомы с этим языком. Эта программа:
- Открывает файл, имя которого указано в командной строке
- Считывает каждую строку в файле
- Разбивает каждую строку на слова
- Запускает счетчики по каждому слову
- Сообщает общее число вхождений каждого слова
На машине с UNIX® и с установленным Rexx при запуске командыRexx word_count.Rexx draft.xml, выдача выглядит так, как это показано в листинге 2.
Листинг 2. Типовая выдача программы подсчета слов.
.
.
.
included 3
in 55
file 3
.
.
.
|
Не беспокойтесь, если Rexx еще не установлен на вашем компьютере; в скором времени я вернусь к вопросу о его доступности и установке.
Главное, что нам показывает листинг 1, это то, что программы на Rexx легко читаемы: они во многом похожи на shell-программы, которые Вы уже умеете писать, но при этом в них лучше реализована арифметика и их ассоциативные массивы весьма функциональны. Ассоциативный массив (associative massive) также имеет названия хэш (hash), словарь (dictionary), основная переменная (stem variable). Это индексированный тип данных, индексом в котором может быть любая строка, а не только целые числа, используемые в массивах языка C. В примерной программе основная переменная count сопоставляет слову то число раз, которое это слово встретилось.
Для самомтоятельного эффективного использования Rexx, Вам необходимо освоить этот язык и иметь доступ к связанным с ним ресурсам . Это достаточно просто: существует множество доступных и бесплатных ресурсов по Rexx, включая как on-line документацию, так и печатную. Ниже, разделResources содержит в себе (включая несколько статей developerWorks) более, чем достаточно, ссылок для того, чтобы Вы смогли вступить на путь программирования на этом языке, обладающем почти тридцателетней историей.
Если Вы наберете, как это было описано вверху, Rexx word_count.Rexx draft.xml в командной строке , то, однако же, на большинстве машин вы обнаружите, что Rexx попросту не установлен. Но если лишь немногие современные компьютеры содержат Rexx в наборе компонентов, установленных по умолчанию, то стоит ли вообще тратить время на его изучение? Давайте рассмотрим другие существенные аспекты "культурной роли," языка Rexx, чтобы Вы вполне смогли потом рассудить об этом самостоятельно.
Rexx был крайне важен для персональных компьютеров Amiga и OS/2®, и он остается стадартным скриптовым языком для больших хостов IBM -- System z™, CICS®, и так далее. IBM предлагала Rexx в качестве продукта для AIX под различными условиями несколько раз за время существования этой операционной системы. Какими бы версиями ее Вы не пользовались, существуют по крайней мере две хорошо известные реализации (вероятнее всего, следует назвать Regina и ooRexx), которые могут быть использованы для Вашего хоста. Это еще один ключевой факт касательно Rexx: обязательно существует версия Rexx, доступная для Вашего компьютера , за редкими исключениями. Более того, наряду с "исконными" реализациями Rexx, любая система, в которой поддерживается Java™ Virtual Machine (JVM), может поддерживать Rexx, потому что разновидность NetRexx компилируется напрямую в бинарные коды Java.
Помимо всего прочего, такая переносимость означает, что если Вы работаете с Rexx на одном компьютере или в одной сети, то Вы сможете применить Ваши навыки работы с ним где угодно еще. Это особенно важно для тех, чья деятельность связана как с универсальными машинами, так и с меньшими системами, сильно отличающимися друг от друга в отношении программного обеспечения и технического обслуживания.
Интеграция в операционную систему
Давайте посмотрим, что еще демонстрирует нам листинг 1 . Предположим, что мы хотим отсортировать выдачу - как Rexx сделает это?
ANSI Standard Rexx не содержит такой операции, функции или ключевого слова, которые отвечают за сортировку. Это, должно быть, шокирует Вас, ведь сортировка требуется для многих даже самых простых приложений. Но, однако же, нельзя говорить о том, что разработчики Rexx попросту упустили этот момент из виду . Напротив, сущность Rexx отчасти состоит в тесной интеграции с командной средой операционной системы хоста. Rexx считает каждое выражение, которое не может быть проинтерпретировано как операция присваивания, за "исконную" команду. Чтобы приспособить листинг 1 для выдачи отсортированных результатов, Вам лишь необходимо написать следующее:
Листинг 3. Подсчет числа слов и сортировка результата с использованием Rexx
parse arg filein
count. = 0
do while lines(filein) > 0
input = linein(filein)
do n = 1 to words(input)
w = word(input, n)
count.w = count.w + 1
if count.w = 1 then word_list = word_list w
end
end
tmpfile = "/tmp/mytempfile"
stream(tmpfile, 'c', "open write replace")
do i = 1 to words(word_list)
w = word(word_list, i)
oneline = w count.w
call lineout tmpfile, oneline
end
command = "sort" tmpfile
address system command
do i = 1 while queued() \= 0
parse pull line
say line
end
|
В этом примере во вншний файл tmpfile выписывается таблица со словами и их числом, а затем вызывается внешняя системная команда sort для сортировки получившейся выдачи. В AIX и других ответвлениях UNIX в командную строку встроена утилита sort.
Листинг 4. Пример отсортированной выдачи программы из листинга 3
...
along 1
alongside 1
already 3
also 7
...
|
Большинство современных вариантов Rexx имеют свое собственное встроенное расширение для сортировки, а для не имеющих его будет легко самостоятельно определить стандартную подпрограмму, которая осуществляет быструю или 'пузырьковую' сортировку.Листинг 3 весьма показателен, так как в значительной мере использование Rexx связано с обработкой, управлением и перестройкой результатов работы других приложений. В системах, которые работают с большими объемами данных, имеет смысл использование какой-либо разновидности Rexx во взаимодействии со специальной внешней командой sort. Так что еще один важный факт, связанный с Rexx, состоит в том, что Rexx настроен на "партнерство" с системными коммандами.
Но не означает ли это, что Rexx, как язык программирования, созданн слишком неудобным и неполным? Программа на shell для получения отсортированного списка слов с их количеством может иметь следующий простой и краткий вид:
Листинг 5. Подсчет числа слов и сортировка результата с использованием shell
FILE=$1
TMPFILE=/tmp/$$
for word in `cat $FILE`
do
echo $word >> $TMPFILE
done
sort $TMPFILE | uniq -c
|
Не является ли это лучшим решением?
Для решения рассматриваемой задачи, действительно, лучше подходит shell; он эффективно использует встроенную командуuniq -c. Даже и при переформатировании выдачи, или при простой фильтрации данных, в исходникsh скорее всего понадобится добавить всего лишь одну дополнительную строчку.
Однако Shell начинает тормозить и ошибаться, если применить его для арифметических вычислений или для обработки структур данных, которые сложнее, чем разделенные пробелами записи. Rexx удобен для решения гораздо более серьезных задач, по сравнению с sh. ooRexx, в частности, содержит в себе ряд встроенных классов, таких, как:
- QUEUE (очередь)
- TABLE (таблица)
- ALARM (сообщение об ошибке)
- SET (множество)
- MESSAGE (сообщение)
ooRexx в полной мере реализует такие особенности объектно-ориентированного подхода, как полиморфизм и наследование, а также поддерживает такие важные библиотеки, как те, что обеспечиват работу TCP/IP и математических функций. Так что Rexx программы могут решать сложные и разнообразные задачи. Возможно даже программирование графических интерфейсов - для этого надо воспользоваться Rexx/Tk, Rexx/DW, или одной из других GUI библиотек.
Теперь Вы знаете самое главное о Rexx. Если вы уже хорошо освоили пару каких-нибудь динамических языков и современный shell, то Rexx, возможно, не будет Вам особенно полезен. Но если, напротив, Ваша сфера интересов находится в другой области и не требует от Вас мышления в терминах метапрограммирования и возобновляемой работы программ, и особенно если Ваша работа связана одновременно с целым рядом IBM систем, то Вас наверняка заинтересуют материалы раздела Resources, из которых Вы сможете больше узнать про Rexx.
Помните:
- Программы на Rexx легко читаемы
- Существует множество доступных и бесплатных ресурсов по Rexx.
- Лишь немногие современные компьютеры содержат Rexx в наборе компонентов, установленных по умолчанию
- Обязательно существует версия Rexx, доступная для Вашего компьютера
- Rexx настроен на "партнерство" с системными коммандами
- Rexx удобен для решения гораздо более серьезных задач, по сравнению с
sh.
Удачи Вам в освоении Rexx
Научиться
- Оригинал статьи:
Rexx and what it means for AIX
-
Веб-сайт Open Object Rexx : На этом сайте содержится ценная информация, и управляется он компетентными людьми. Чтобы сразу начать освоение программирования на Rexx, скачайте подходящую версию ooRexx со страницы загрузки. Отметим, что было такое время, когда пользователям AIX приходилось платить за Rexx, но теперь open source-версия "ooRexx для AIX находится в свободном доступе, начиная с релиза 3.1."
- "Rexx для каждого" (developerWorks, февраль 2004): Эта статья рассказывает о таких ключевых для Rexx понятиях, как стэки и интерпретация строк.
- Rexx работает на универсальных машинах, на портативных компьютерах, и практически на всем, что занимает среднее положение между ними, включая виртуальные вычислительные машины Java и веб-сервера Apache. Он даже имеет специальные средства для контраля баз данных DB2®, как рассказывается в написанной в 2005 году статье Говарда Фосдика (Howard Fosdick) "Скрипт для DB2 Universal Database с использованием Rexx: быстрый DB2 UDB скриптинг". Продукты Rexx не только поддерживают ряд определенных стандартов для доступа к системам управления базами данных (DBMSs - database management systems) "извне". Некоторые приложения DB2 также позволяют хранимым процедурам (хотя и не триггерам или функциям) быть записанными с помощью Rexx.
-
comp.lang.Rexx: эта веб-конференция в Usenet - один из моих любимых ресурсов по части изучения Rexx.
- "Awk на примере (developerWorks, январь 2001): Эта статья последовательно и без лишних деталей знакомит читателя с ассоциативными массивами. Rexx называет то же самое "основной переменной"как это проиллюстрировано в этом руководстве .
-
Rexx Language Association: Этот сайт содержит страницу про стандарты, включая созданную в 1996 в ANSI спецификацию X3.274-1996.
-
rexx/Tk и Rexx/DW: Rexx/TK и Rexx/DW являются ведущей GUI библиотекой.
- "NetRexx ... позволит Вам создавать приложения и апплеты для среды Java быстрее и гораздо проще, чем при программировании собственно на Java.": Это смелое утверждение, но IBM может себе его позволить -- NetRexx действительно хорош. NetRexx также предоставляет все стандартные функциональные возможности Rexx.
-
Документы по истории Rexx: Эти документы рассказывают о наиболее ярких вехах развития Rexx со времен его создания в 1979.
- Найдите AIX и UNIX® библиотеку по теме (EN):
- Системное администрирование
- Разработка приложений
- Производительность
- Переносимость
- Безопасность
- Подсказки
- Инструменты и утилиты
- Технология Java
- Linux®
- Open source
-
AIX и UNIX для новичков: Чтобы узнать больше об AIX и UNIX, посетите страницу "Для новичков в AIX и UNIX".
-
Семинары и обучение на IBM developerWorks Россия.
-
Книжный магазин Safari: Посетите эту электронную справочную библиотеку, чтобы найти специальные технические ресурсы.
-
Podcast-каналы: настройте приемники и поймайте волну технических экспертов IBM.
Получить продукты и технологии
-
Ознакомительные версии программного обеспечения IBM: Используйте в вашем следующем проекте по разработке программы, которые можно загрузить напрямую с developerWorks.
Обсудить
- Примите участие в обсуждении материала на форуме.
- Примите участиев блогах developerWorks и присоединяйтесь к сообществу developerWorks.
-
AIX Power Users Group: Примите участие и присоединитесь к соообществу AIX.
-
Примите участие в форумах AIX и UNIX (EN):
- AIX 5L -- специализированный форум
- Форум AIX для разработчиков
- Управление кластерными системами
- Ассистент поддержки IBM
- >Средства производительности -- специализированный
- Виртуализация -- специализированный
- Больше форумов AIX и UNIX

Кэмерон Лэйрд (Cameron Laird) - бывший обозревательэтого сайта и в течение длительного времени пишет для developerWorks. Он часто рассказывает про Open Source проекты, позволяющие его работодателям ускорить разработку технологий в области надежности и безопасности передачи информации. Кэмерон впервые начал использовать AIX двадцать лет назад, когда тот был все еще экспериментальным продуктом. Все это время Кэмерон был заинтересованным пользователем и разработчиком средств для отладки памяти. Вы можете связаться с ним по адресу claird@phaseit.net.