Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Rexx и его значимость для AIX

Легкое и мощное средство написания скриптов, переносимых на различные платформы

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

Описание:  Около тридцати лет развития не исчерпали потенциала языка Rexx. Этот язык продолжает расширять свою функциональность и совместимость с различными платформами, что делает его особенно подходящим для AIX(R)

Дата:  25.04.2007
Уровень сложности:  средний
Активность:  2226 просмотров
Комментарии:  


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

Легко читаемый 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


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторе

Photo of Cameron Laird

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

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=212143
ArticleTitle=Rexx и его значимость для AIX
publish-date=04252007
author1-email=claird@phaseit.net
author1-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).