НОВОЕ: OS/2 GURU - Вопросы и ответы

Reviews / articles about OS/2

Operating systems:
ArcaOS, eComStation, IBM OS/2 Warp
Мифы о eComStation 

Unsorted

 

 

Обновите ArcaOS до уровня NeoWPS

  • Установите набор PNG иконок, нарисованных дизайнером, специализирующемся на оформлении OS/2
  • Установите eSchemes 2018, чтобы менять цвета и кнопки на рабочем столе

REXX - потенциал платформы OS/2


TITLE: REXX - потенциал платформы OS/2

DATE: 2002-01-14 23:04:36

AUTHOR: Basil A. Sidorov

Что такое REXX? Какова его концепция?

Абревиатура REXX расшифровывается как REstructure eXtended eXecutor и созвучна с латинским REX (король). История создания изложена автором, Майком Колишау (Mike Cowlishaw) в "Rexx brief history".

А началась эта история 29 марта 1979, когда была опубликована первая спецификация нового языка. После обсуждения концепций, в конце 1979 года Майк реализовал первый интерпретатор. Первоначально новый язык был доступен только внутри IBM, что с одной стороны позволяло учесть мнения и пожелания большого числа людей, а с другой - делало возможным внесение достаточно кардинальных изменений.

К 1982 году язык оформился в его теперешнем виде и получил вторую букву "X".

В OS/2 REXX появился с версии 1.2, сначала в расширенной (EE), а с версии 1.3 - и в стандартной редакции системы.

REXX - скриптовый язык и применяется там же, где применяются любые скриптовые языки: когда возможности встроенного языка пакетной обработки уже исчерпаны, а переход на "традиционное" программирование себя еще не оправдывает.

Каждый скриптовый язык использует ту или иную концепцию. Основная концепция REXX - "все есть строка". Другая весьма важная особенность - отсутствие зарезервированых слов. Она гарантирует, что Ваши скрипты не перестанут работать только потому, что в новой версии появилось новое ключевое слово или встроенная функция, имена которых конфликтуют с именами в Ваших скриптах.

В повседневной деятельности возникают задачи, которые могут быть прекрасно решены с помощью REXX. Например, маленький шедуллер, обработчик текста, работа с WPS. Каков этот круг задач?

Тривиальный пример работы с WPS - создание программных объектов с помощью SysCreateObject() штатной библиотеки расширения RexxUtil. Или SysOpenObject() с помощью которой можно запустить на исполнение (DOS)программу с требуемыми настройками. А вообще, на www.os2.spb.ru лежит коллекция самых разных скриптов "на все случаи жизни".

Когда мне понадобилось скопировать "всё, что можно" с плохо читаемого компакт-диска - написание скрипта заняло примерно полчаса. Вместе со всеми украшательствами. Думаю, что поиски "чего-нибудь готового" заняли бы больше времени:)

Какие REXX'ы бывают?

Можно выделить три ветви - Classic REXX, Object REXX и NetRexx. Первые два входят в штатную поставку OS/2 начиная с Warp4. Пользователи Warp3 могут установить Object REXX из архива на хоббесе. Эту же версию я рекомендую и для мерлина, а "сладкую парочку" RexxCRT.DLL/RexxUtil.DLL из него - всем, кроме пользователей ACP1+.

Наиболее современная версия классического рекса это, видимо, Regina Rexx, развиваемый Марком Хесслингом (Mark Hessling) и существующий как проект на SourceForge.

Объектный рекс начал разрабатываться внутри IBM в начале 1990-х годов и, насколько я понимаю, позиционируется IBM'ом как основной диалект и заменитель "классики".

NetRexx был создан и развивается Майком Колишау и представляет язык Java-программирования с рексоподобным синтаксисом.

Где можно найти твои статьи про Object REXX?

Статьи опубликованы на сайте RDM/2, архив 1999 года. Первая из них дублирует :) чти.мя ACP1, вторая сравнивает возможности ввода/вывода классического и объектного REXX'ов.

Могут ли другие скриптовые языки (perl, vb) заменить REXX?

Мне сложно ответить на этот вопрос, т.к. я весьма шапочно знаком с Perl'ом и еще меньше - с Visual Basic'ом.

Однако, читая "Изучаем Perl" Р.Л.Шварца и Т.Кристиансена, нельзя не обратить внимание на сильную привязку Perl'а к юниксоподобным системам, а VB раздражает большим числом своих инкарнаций.

Кроме того, рекс не просто общецелевой скриптовый язык, это еще и "универсальный клей", используемый самыми разными компонентами OS/2 и различными прикладными программами. Заменить его в этом качестве может только другой рекс.

В частности, REXX используется инсталятором OS/2, широко применяется при CID-инсталяции различных программ. Некоторые LanServer'овские утилиты - тоже rexx-скрипты.

С чего начать изучение REXX?

Изучение REXX'а начинается с того же, что и все остальное - с чтения штатной документации. Для тех, кому удобнее читать русское руководство - нужен либо "русский Мерлин" либо (c)rexx.inf из него.

Руководство должно быть прочитано полностью. Особенно - раздел "Встроенные функции". Это позволит не изобретать велосипеды типа wordpos() или space().

В части синтаксиса нужно помнить об открывающей скобке: length(string) - вызов функции "length" с аргументом "string", а length (string) - объединение (через пробел) двух строк.

Некоторую сложность могут представлять кортежи (stem) с их правилами подстановки "хвостовых" значений.

Но если воспользоваться rexxtry (интерактивный скрипт из штатной поставки) - большинство вопросов выясняются легко и быстро.

'REXX Tips and Tricks' - этот текст будет полезен начинающим?

Безусловно. Причем читать его нужно и тем, кто не собирается использовать REXX, а просто хочет расширить свои познания об штатных утилитах, языке пакетной ("обычные" .cmd) обработки и т.п. Скажем, классическое: "SomeProg 2>&1 > nul" проще всего найти именно там. Версия периодически меняется, так что искать лучше по слову "rxtt".

Что можно сказать о производительности? Какого размера бывают рексовые скрипты?

"Пузомеркой" интерпретатора является RexxCPS, который измеряет время исполнения некоторых типичных операций. Но говоря о производительности, следует помнить, что скорость работы процессоров постоянно растет. Как следствие, использование скриптовых языков вообще и REXX, в частности, становится все более удобным.

Размеры скриптов бывают самыми разными: от однострочного

	/* SAY.CMD */ interpret 'say' arg(1)

до многосоткилобайтовых монстров типа PPWizard.

Практически же оптимальным является скрипт до 10-15 килобайт. Дело в том, что интерпретация REXX-скриптов в OS/2 является двухстадийной. На первой стадии строится так называемый токенизированый образ, на второй - интерпретируется результат токенизации.

Если скрипт достаточно мал и токенизированый образ оказался менее 64Кб, он сохраняется в расширенных атрибутах файла, что ускоряет все последующие запуски скрипта.

Если образ настолько велик, что не помещается в расширенных аттрибутах, то первая стадия будет повторятся каждый раз, существенно увеличивая общее время запуска скрипта. В такой ситуации (утилитой rexxc) можно сохранить токенизированный образ как дисковый файл. Если файлу присвоить расширение .cmd - он будет исполняться как обычный текстовый скрипт.

Используя такую технику следует помнить, что формат токен-образа не стандартизирован и зависит от версии интерпретатора. Таким образом токенизированые скрипты (обычно) не годятся для распространения как самостоятельная программа.

Здесь я бы отметил ещё одно преимущество Object Rexx - написание модульных скриптов становится тривильным: аттрибут public для общедоступных классов/процедур и директива requires в скриптах, которые будут ими пользоваться. Для классов есть и более изощрённая техника, которая позволит избавиться от накладных расходов, связанных с директивой requires.

Что нужно сделать, чтобы использовать REXX в своей программе на Си?

Все необходимое (руководство, хедеры, примеры) есть в OS/2 Tookit. Само API реализовано в рамках проекта SAA как SAA Rexx API и достаточно универсально для использования самыми разными интерпретаторами.

... А если я хочу использовать REXX, как внутренний скриптовый язык своей программы? Например, пользователь делает описание "3D-сцены" на рексе (параметры объектов и сцены). Дальше, остается воспользоваться готовым решением - запустить интерпретатор рекса. При выполнении скрипта, вызываются функции программы (расстановка объектов и т.п.)

Совет простой - читать RexxPG/смотреть примеры/хедеры всё того же ToolKit'а. Интерпретатор REXX'а имеет различные хуки, которые позволяют определять собственные команды/функции, манипулировать пулом переменных и вводом/выводом, перехватывать обработку ошибок и даже подменять интерпретатор, если это нужно.

Лично я этим не занимался, но вот несколько примеров:

Есть ли REXX в других ОС? Какие у них ограничения?

Здесь сложно что-либо добавить к информации с авторского сайта. Интерпретаторы рекса есть практически везде - от майнфреймов до наладонных компьютеров. Я работал с рексом в PCDOS, с Региной (Win32/DOS32), классикой и объектным рексом в OS/2. Если исключить интерпретатор PCDOS (с крайне неприятным ограничением <64Кб на значение переменной), то написание универсальных скриптов вполне реально.

Вместе с тем, я считаю, что наиболее перспективным является Object REXX, несмотря на то, что пока(?) он развивается исключительно фирмой IBM и свободно доступен только для OS/2 и Linux'а.

Как ты думаешь, есть ли смысл предлагать REXX, как язык для начинающих программистов? вместо Паскаля? (например, в школах) ...

Сложно сказать. С одной стороны и Pascal и Rexx - алгоритмические языки, с другой - Pascal знает гораздо большее:) число преподователей.

... идея сумасшедшая, но зато какие просторы для творчества открываются перед "малышом"?!! (обновлять на десктопе объекты, доступ к SOM)

Если это десктоп OS/2 - безусловно:)

Есть ли гарантии, что REXX никуда не исчезнет?

"Полную гарантию может дать только страховой полис":) На самом деле в "Философия Java" Брюса Эккеля есть такой (примерно) текст: "На одном из моих семинаров Алан Голуб доказывал, что наиболее используемые в настоящее время языки - Rexx и Cobol, в указанном порядке".


На вопросы отвечал: Василий А. Сидоров

Вопросы задавал: Eugene Gorbunoff

Попробуй программу:

Widescreen activator - включает широкие режимы для Intel.

Комментарии:

Timur Kazimirov
2002-01-15 02:01:58

Класс!!! Пора книгу выпускать.

Eugene Gorbunoff
2002-01-15 02:22:09

Рано еще. Первая страница не закончена =)

Timur Kazimirov
2002-01-15 09:13:44

Ну тогда еще лучше - будем продолжения ждать

Alexander Lapshin
2002-01-15 20:19:57

Очень интересно!

Когда следующее интервью?

Может проинтервьюировать еще ребят lgs.kiev.ua ?

Сергей
2002-01-19 05:42:40

В свежей статье на os2ezine

[url] сказано, что "At one time Rexx was going away to be replaced by Visual Basic, IBM's new corporate scripting language; IBM's basic is dead and Rexx still survives."

Как обстоят дела на самом деле? IBM выбрал VB или REXX останется жив?

stellar
2002-10-16 15:07:21

"шапочно знаком с Perl, на настораживает его сильная привязка к

юниксоподобным системам".

-- идиот

Дмитрий
2003-04-04 17:06:09

Rexx - не типизированный язык, поэтому интерпретатор иногда понимает строку не так, как задумывалось автором программы. В чем-то это является большим недостатком, объяснимым древностью языка.

В полуоси cmd.exe определяет тип батника (простой батник или rexx-программа) по первой строке. У rexx-программ она является символом комментария. У меня вопрос к специалистам: это поведение прошито в cmd.exe или как-то настраивается. В частности, как прикручивается Perl?

Стажёр
2004-03-30 17:31:15

С одной стороны, я бы не стал покупать книгу про REXX, написанную Василием Сидоровым, с другой стороны...

Если бы в мире компьтеров чаще думали головой, то не было бы PHP и Java, а были бы REXX и FORT ;-)

Калачихин Владимир

Старшина
2005-05-30 14:25:26

>> Если бы в мире компьтеров чаще думали головой, то не было бы PHP и Java, а были бы REXX и FORT ;-)

Правильно, уважаю, мыслишь как стажер. Подрастешь - поймешь побольше.

Chuk
2005-05-31 12:14:26

О чем вы спорите. Каждый язык хорош для того для чего он создавался. И Perl и Java и C# и Delphi и C++ для своих целей просто супер. За другие языки не могу сказать потому что не работал.

disputant
2010-08-21 22:08:20

"Полную гарантию может дать только страховой полис"

Учите классику :) - Бендер говорил о СПОКОЙСТВИИ, а не о гарантии...

eComStation 2.0 - это десятки лицензированных драйверов устройств + современные качественные прозрачные иконки

 


 

(C) OS2.GURU 2001-2021