stringtranslate.com

Объект REXX

Object REXX — это высокоуровневый , универсальный , интерпретируемый , объектно-ориентированный ( основанный на классах ) язык программирования .

Это продолжение и значительное расширение языка программирования Rexx (часто называемого «Classic Rexx»). Object REXX сохраняет все возможности и синтаксис «Classic Rexx», добавляя при этом возможности полного объектно-ориентированного программирования (ООП). Хотя Object REXX не реализует все аспекты стандарта «Информационные технологии – Язык программирования REXX» ANSI X3.274-1996 [1] , он предлагает много новых собственных возможностей.

Следуя влиянию "Classic Rexx", Object REXX разработан так, чтобы его было легко изучать, использовать и поддерживать. Доступно несколько объектно-ориентированных реализаций REXX, включая Open Object Rexx ("ooRexx") и Rexx Object Oriented ("roo!"). [2] : 311 

История

В 1988 году проект «Oryx» в IBM под техническим руководством Саймона К. Нэша экспериментировал со слиянием «Classic Rexx» с объектной моделью Smalltalk . [3] [4] Мотивацией проекта было перенести преимущества ООП в «Classic Rexx», сохранив совместимость и, таким образом, перенеся удобство использования «Classic Rexx» в ООП. [5] Вначале проекты были сосредоточены на аспектах ООП , таких как рассмотрение всего как объекта, объектно-ориентированная инкапсуляция и передача сообщений , объектно-ориентированный параллелизм , классы и наследование . [6]

Эта первоначальная работа позже привела под руководством Рика МакГвайра к первому прототипу Object REXX, который был представлен в 1992 году. В 1994 году IBM объявила, что Object REXX заменит «Classic Rexx» в качестве стандартного интерпретатора REXX в следующей версии OS/2 . [4] В 1996 году Object REXX [a] был выпущен как часть операционной системы OS/2 Warp 4. [7] В 1997 году последовали версии для Windows 95 , Windows NT и Linux . [8] [9] В 1999 году была выпущена версия Object REXX для AIX V4.1.5 или выше. [10] В 2000 году последовали версии для  zLinux и Sun/Solaris . Для Windows 2000 , Windows Me , Windows 98 и Windows NT 4.0 последнее крупное обновление для Object REXX было выпущено в 2001 году. [11]

12 октября 2004 года IBM объявила о прекращении разработки Object REXX и передала исходный код и лицензионные права [b] некоммерческой Special Interest Group (SIG), Rexx Language Association (RexxLA). В 2005 году RexxLA выпустила ooRexx как новое воплощение Object REXX как бесплатное и открытое программное обеспечение под лицензией Common Public License . [12] Эта первая версия ooRexx 3.0.0 была значительно переработана по сравнению с исходным кодом IBM с целью повышения читабельности. Позднее ядро ​​ooRexx было переписано на чистом C++ , а новая архитектура и собственный интерфейс были спроектированы и реализованы под техническим руководством Рика МакГвайра. Эта работа позволила RexxLA выпустить ooRexx 4.0.0 с поддержкой 64-бит в 2009 году. По сей день RexxLA продолжает разрабатывать, поддерживать и обслуживать ooRexx, а также "Classic Rexx" и NetRexx . Кроме того, RexxLA организует ежегодные симпозиумы. [13]

Оригинальный интерпретатор Object REXX компании IBM по-прежнему доступен в операционных системах на базе OS/2, таких как ArcaOS и eComStation .

Релизы

Следующая таблица содержит примечательные особенности и изменения основных версий интерпретатора Object REXX и ooRexx. Все выпуски ooRexx и необходимая документация доступны на Sourceforge . [14] [15] Для дистрибутивов на базе Arch Linux текущая и разрабатываемая версии доступны как Arch User Repository . Для ooRexx 5.0.0 доступен неофициальный порт для OS/2. Начиная с выпуска 5.0.0 доступны переносимые версии интерпретатора, которые позволяют использовать его без установки. Для Intellij IDEA ooRexxPlugin добавляет поддержку подсветки синтаксиса , проверки синтаксиса, автодополнения кода и поддержки документации по образцу Javadoc с использованием аннотаций . [16]

Легенда:
Старая версия
Старая версия, все еще поддерживается
Последняя версия
Последняя предварительная версия
Будущий релиз

Философия дизайна и особенности

ooRexx разработан с целью сохранения всех функций "Classic Rexx". Он соответствует [c] стандарту ANSI для языка Rexx (X3.274-1996, "Programming Language Rexx" [1] ), для взаимодействия на разных платформах с другими соответствующими реализациями. Таким образом, программы "Classic Rexx" обычно запускаются под ooRexx без каких-либо изменений. Это позволяет легко переносить как программный код, так и знания разработчиков из "Classic Rexx" в ooRexx. К этому ooRexx добавляет все функции ООП, такие как подклассы , полиморфизм и инкапсуляция данных . Дополнительные функции включают множественное наследование через mixin classes .

Код, который IBM выпустила с открытым исходным кодом в 2004 году, не включал классы для поддержки IBM System Object Model (SOM) и Workplace Shell (WPS). [31] Версия IBM Object REXX для OS/2 включает классы для поддержки SOM [32] и WPS. [33] Они также включены в первоначальный последующий продукт OS/2, eComStation, а также в его нынешнего потомка, ArcaOS. [34]

ooRexx следует философии дизайна «Classic Rexx», чтобы создать «ориентированный на человека» язык программирования, который легко изучать, кодировать, запоминать и поддерживать. Это достигается, отчасти, за счет сохранения небольшого размера языка и следования принципу наименьшего удивления . [2] [35] ooRexx 5.0.0, например, содержит всего тридцать ключевых инструкций. [36] Кроме того, это динамический язык программирования , который предлагает гибкость и позволяет сосредоточиться на разработке, а не на языковых ограничениях. Существует только один тип данных, строка символов , который не нужно объявлять, что снижает усилия программистов по сравнению со строго типизированными языками . [37]

Подобно «Classic Rexx», существуют инструкции присваивания, инструкции ключевых слов и инструкции команд. В отличие от многих других языков, ключевые слова не зарезервированы, поэтому нет необходимости запоминать длинный список зарезервированных слов . [38] В случаях, когда строка не является ни инструкцией присваивания, ни инструкцией ключевого слова, она считается инструкцией команды, что заставляет интерпретатор передавать ее операционной системе для выполнения и устанавливать переменную RCдля кода возврата. Кроме того, ADDRESSинструкция позволяет перенаправлять команды в определенные среды, такие как Bourne Shell , Bash , Z-Shell , Command Prompt и другие, а также перехватывать ошибки.

a = "привет мир" /* инструкция присваивания */   do  i = 1 to 2 /* ключевое слово инструкция "DO" */      сказать "раунд #" i ":" a /* ключевое слово инструкция "SAY" */    конец /* ключевое слово инструкция "END" */ "echo Hello World" /* команда операционной системе */ скажите "RC:" rc /* код возврата */   

Свободная форма

Как и «Classic Rexx», ooRexx имеет синтаксис свободной формы , где расположение программного кода не имеет значения. Перед выполнением интерпретатор объединяет несколько некавыченных пробелов в один, в то время как строка символов, заключенная в кавычки (одинарные или двойные), не изменяется. Конкатенацию можно запросить явно с помощью двух вертикальных черт ( ||), или неявно, разделяя термины пробелами или примыкая терминами. Поскольку язык свободной формы требует рассмотрения меньшего количества синтаксических правил, предполагается, что он облегчает процесс обучения за счет снижения внутренней когнитивной нагрузки . [39]

скажите "Привет, мир!" /* вывод: Привет, мир! */  сказать "Это" 'есть' "REXX!" /* вывод: Это REXX! */    скажи "До свидания""пока" || '!' /* вывод: До свидания! */    

Без учета регистра

Как "Classic Rexx", ooRexx является языком программирования, нечувствительным к регистру . Интерпретатор делает заглавными все символы вне кавычек перед их выполнением. Поскольку регистры не нужно различать, требуется изучать меньше дополнительных деталей, и удается избежать раздражающих синтаксических ошибок. [39]

a = "Это REXX!"  Скажите  A /* вывод: Это REXX! */ СКАЖИТЕ  / * вывод: Это REXX! */ 

Парадигма сообщения

Подобно парадигме обмена сообщениями, реализованной Аланом Кейем в Smalltalk, все в ooRexx является объектом, с которым можно общаться, отправляя сообщения, называя метод. Идея отправки сообщений объектам, как если бы они были живыми существами, помогает новичкам изучать концепции ООП. [38]

В отличие от Smalltalk, есть явный оператор сообщения, тильда ( ~), где принимающий объект помещается слева от него, а результат операции возвращается. Как и в Smalltalk, сообщения ooRexx могут быть каскадированы, если ~~используются две тильды ( ) вместо одной, возвращая объект, который получил метод, а не полученный результат. Поведение большинства методов по умолчанию можно изменить, указав опцию, которая может быть либо прописана полностью, либо сокращена и не чувствительна к регистру. Это обеспечивает буквальное понимание и снижает усилия по обучению для новичков. [39] Например, метод strip по умолчанию удаляет начальные и конечные пробелы. Это поведение можно изменить, например, указав "leading"или "l"в качестве опции. В то время как функции вложены в «Classic Rexx», сообщения можно объединять в цепочку в ooRexx, что улучшает читаемость оператора . [ 38]

a = "Я ooRexx!"  скажите  / * вывод: Я ooRexx! */ скажите  ~ Strip ( "Leading" ) /* вывод : Я ooRexx! */ скажи ~  полоска ( "l" ) ~ обратный /* вывод: ! xxeRoo ma I */ 

Парадигма обмена сообщениями позволяет одновременное выполнение нескольких методов на одном объекте, так что параллелизм возможен. Несколько объектов могут быть активны одновременно и обмениваться сообщениями друг с другом для коммуникации и синхронизации. [36]

Классы и методы

В дополнение к трем типам инструкций «Classic Rexx», ooRexx добавляет директивные инструкции, которые не являются исполняемыми, при этом первая директива отмечает конец исполняемой части программы. [36] Чтобы сделать директивные инструкции легко распознаваемыми, они вводятся с двумя последовательными двоеточиями, например ::CLASS classname, , что заставляет интерпретатор определять новый класс с именем «classname».

d = . dog ~ new /* создать и назначить собаку */   d ~ лай /* пусть собака лает */  :: класс  собака /* директива класса */ :: метод  bark /* директива метода */  скажи "гав!" /* вывод: гав! */  

Существует четыре различных типа классов: классы объектов, которые действуют как фабрика для создания объектов, классы-миксины , которые добавляют методы к другим классам, абстрактные классы, которые предоставляют определения для методов, и метаклассы , которые могут использоваться для создания других классов. [36]

Встроенные и внешние функции

ooRexx release 5.0.0 содержит 82 встроенные функции , число которых оставалось относительно стабильным на протяжении многих лет. [36] Используя ::requires директиву , внешние библиотеки функций могут быть интегрированы на уровне программ. Такие библиотеки обычно организованы вокруг доменно-специфичных функций.

Библиотека расширений Rexx предоставляет класс для чтения и записи файлов со значениями, разделенными запятыми (CSV), для создания и обработки данных JavaScript Object Notation (JSON) и среды подкоманд, которая частично эмулирует среду TSO / CMS . [40] Библиотека RxMath предлагает расширенные математические функции, такие как вычисление квадратного корня, показательная функция, логарифм, синус, косинус, тангенс, арксинус и вычисление мощности. [41] Библиотека RxSock позволяет включать протоколы TCP/IP , [42] в то время как библиотека RxFtp [43] специально предоставляет доступ к протоколу передачи файлов .

Мосты

Расширение Windows включает в себя Windows Script Host (WSH) Scripting Engine, который может использоваться для выполнения общих задач автоматизации. Он также включает в себя Object Linking and Embedding / ActiveX (OLE) поддержку, позволяющую взаимодействовать с программами Windows, такими как Microsoft Office через OLEObject. [44] ooSQLite предоставляет интерфейс для SQLite , внутрипроцессной библиотеки, которая реализует автономный, безсерверный, безконфигурационный, транзакционный SQL- движок базы данных. [45] Существует также внешняя библиотека, которая реализует двунаправленный мост Java , основанный на Bean Scripting Framework , называемый BSF4ooRexx, который позволяет использовать классы Java в программах ooRexx. [38]

Операционная система специфична

Для Windows ooRexx включает фреймворк OODialog, позволяющий создавать диалоговые окна Windows и, следовательно, графические пользовательские интерфейсы . [46] В дополнение к поддержке OLE расширение Windows может взаимодействовать с менеджером программ Windows, системным журналом событий , буфером обмена и реестром, а также запрашивать, редактировать и взаимодействовать с окнами, меню или подменю. [44]

Для POSIX -совместимых операционных систем библиотека классов nCurses позволяет писать текстовые пользовательские интерфейсы с использованием библиотеки программирования ncurses . [47] Библиотека RxUnixSys предоставляет функции для большинства систем Unix для взаимодействия с процессами и потоками, пользователями и группами пользователей, файлами и файловыми системами и т. д. [48]

Примечания

  1. ^ Включая интерфейсы к системной объектной модели (SOM) и рабочей оболочке (WPS)
  2. ^ За исключением пакетов SOM и WPS.
  3. ^ Object REXX и Open Object Rexx не включают в себя все новые функции стандарта ANSI Rexx.

Ссылки

  1. ^ ab "X3.274-1996 Американский национальный институт стандартов для языка программирования Rexx" (PDF) .
  2. ^ ab Fosdick, Howard (2005). Справочник программиста Rexx. Wiley Publishing. ISBN 0-7645-7996-7.
  3. ^ "7 причин, по которым Rexx все еще важен". SmartBear.com . Получено 2024-06-19 .
  4. ^ ab "IBM Object REXX - EDM2". www.edm2.com . Получено 2024-06-19 .
  5. ^ Нэш, Саймон К. (1990-06-11). "Объектно-ориентированный REXX" (PDF) . Труды симпозиума REXX для разработчиков и пользователей : 76-100.
  6. ^ Нэш, Саймон К. (2009-05-21). "An Object Rexx Retrospective" (PDF) . Труды 20-го симпозиума по языку Rexx .
  7. ^ "IBM Object REXX для OS/2 - EDM2". www.edm2.com . Получено 2024-06-19 .
  8. ^ "IBM Object REXX теперь работает на Windows NT и Windows 95". IBM. 1997-02-25.
  9. ^ Швейцер, Манфред; Бергер, Уве (2005-04-21). "От объекта REXX к ooRexx" (PDF) . Труды 16-го симпозиума по языку Rexx .
  10. ^ "IBM Object REXX для AIX — объектно-ориентированный язык сценариев для начинающих и продвинутых программистов". IBM. 1999-03-30.
  11. ^ "IBM Object REXX для Windows V2R1 — Объектно-ориентированное программирование для начинающих и продвинутых пользователей". IBM. 2001-03-20.
  12. ^ "Отзыв программного обеспечения и прекращение обслуживания: IBM Object REXX". IBM. 2004-10-12.
  13. ^ "RexxLA - Rexx Symposia". www.rexxla.org . Получено 2024-05-17 .
  14. ^ "ooRexx (Open Object Rexx) - Просмотрите /oorexx на SourceForge.net". sourceforge.net . Получено 2024-05-18 .
  15. ^ "ooRexx (Open Object Rexx) - Просмотрите /oorexx-docs на SourceForge.net". sourceforge.net . Получено 2024-05-18 .
  16. ^ Флэтшер, Рони Г. (2023). «Плагин IntelliJ IDEA ooRexxPlugin 2.2 для Rexx и ooRexx 5.0» (PDF) .
  17. ^ "IBM Object REXX для OS/2 - EDM2". www.edm2.com . Получено 2024-06-19 .
  18. ^ "IBM Object REXX теперь работает на Windows NT и Windows 95". IBM. 1997-02-25.
  19. ^ "IBM Object REXX для AIX — объектно-ориентированный язык сценариев для начинающих и продвинутых программистов". IBM. 1999-03-30.
  20. ^ "IBM Object REXX для Windows V2R1 — Объектно-ориентированное программирование для начинающих и продвинутых пользователей". IBM. 2001-03-20.
  21. ^ "ooRexx News". Sourceforge . Получено 18 мая 2024 г. .
  22. ^ Open Object Rexx Reference Version 3.0.0 Edition (PDF) . RexxLA. 24 марта 2005 г. . Получено 18 мая 2024 г. .
  23. ^ "ooRexx News". Sourceforge . Получено 18 мая 2024 г. .
  24. ^ "ooRexx News". Sourceforge . Получено 18 мая 2024 г. .
  25. ^ "ooRexx News". Sourceforge . Получено 18 мая 2024 г. .
  26. ^ "ooRexx 4.0.0: Readme" (PDF) . Получено 18 мая 2024 г.
  27. ^ "ooRexx 4.1.0: ReleaseNotes" . Получено 18 мая 2024 г. .
  28. ^ "ooSQLite: Readme" . Получено 18 мая 2024 г. .
  29. ^ "ooRexx 4.2.0: Изменения" . Получено 18 мая 2024 г. .
  30. ^ "ooRexx 5.0.0: Изменения" . Получено 18 мая 2024 г. .
  31. ^ Куда делась поддержка SOM в версии 4.0.0?
  32. ^ Уиллис Боутон (2004). "SOM и объект REXX". EDM/2 . Получено 2014-02-02 .
  33. ^ "Доступ к объектам Workplace Shell". Справочник по объектам REXX . IBM.
  34. ^ "Включает ли ArcaOS поддержку REXX?" . Получено 2020-09-03 .
  35. ^ Коулишоу, Майк (1987). «Проектирование языка REXX». ACM SIGPLAN Notices . 22 (2): 26–35. doi :10.1145/24686.24687.
  36. ^ abcde Эшли, У. Дэвид; Флэтшер, Рони Г.; Хесслинг, Марк; МакГвайр, Рик; Пидин, Ли; Симс, Оливер; Вольферс, Джон (2022). ooRexx Documentation 5.0.0 Open Object Rexx Reference (PDF) . RexxLA.
  37. ^ Stefik, Andreas; Siebert, Susanna (2013). «Эмпирическое исследование синтаксиса языка программирования». ACM Transactions on Computing Education . 13 (4): 1–40. doi :10.1145/2534973.
  38. ^ abcd Flatscher, Rony G.; Winkler, Till. «Использование парадигмы сообщений для облегчения изучения объектно-ориентированных концепций и программирования» (PDF) . В 2024 году 47-я конференция MIPRO по ИКТ и электронике (MIPRO) : 1244–1249.
  39. ^ abc Винклер, Тилл; Флэтшер, Рони Г. «Когнитивная нагрузка в обучении программированию: облегчение нагрузки на новичков с помощью REXX» (PDF) . Центральноевропейская конференция по информационным и интеллектуальным системам .
  40. ^ Эшли, У. Дэвид; Флэтшер, Рони Г.; Хесслинг, Марк; МакГвайр, Рик; Пидин, Ли; Симс, Оливер; Вольферс, Джон (2022). ooRexx Documentation 5.0.0 Rexx Extensions Library Reference (PDF) . RexxLA.
  41. ^ Эшли, В. Дэвид; Флэтчер, Рони Г.; Хесслинг, Марк; Макгуайр, Рик; Пидин, Ли; Симс, Оливер; Вулферс, Джон (2022). Документация ooRexx 5.0.0 Справочник по математическим функциям RxMath (PDF) . РексЛ.А.
  42. ^ Эшли, У. Дэвид; Флэтшер, Рони Г.; Хесслинг, Марк; МакГвайр, Рик; Пидин, Ли; Симс, Оливер; Вольферс, Джон (2022). Справочник по функциям сокета TCP/IP RxSock ooRexx Documentation 5.0.0 (PDF) . RexxLA.
  43. ^ Эшли, У. Дэвид; Флэтшер, Рони Г.; Хесслинг, Марк; МакГвайр, Рик; Пидин, Ли; Симс, Оливер; Вольферс, Джон (2022). Справочник по библиотеке классов ooRexx Documentation 5.0.0 RxFtp (PDF) . RexxLA.
  44. ^ ab Эшли, У. Дэвид; Флэтшер, Рони Г.; Хесслинг, Марк; МакГвайр, Рик; Пидин, Ли; Симс, Оливер; Симс, Оливер; Вольферс, Джон (2022). Справочник по расширениям Windows 5.0.0 документации ooRexx (PDF) . RexxLA.
  45. ^ Эшли, В. Дэвид; Флэтчер, Рони Г.; Макгуайр, Рик; Мисфельд, Марк; Пидин, Ли; Симс, Оливер; Вулферс, Джон (2022). Документация ooRexx 1.0.0 Справочник по ooSQLite (PDF) . РексЛ.А.
  46. ^ Эшли, В. Дэвид; Флэтчер, Рони Г.; Макгуайр, Рик; Пидин, Ли; Симс, Оливер; Вулферс, Джон (2019). Документация ooRexx 4.2.4 Справочник по ooDialog (PDF) . РексЛ.А.
  47. ^ Эшли, В. Дэвид; Флэтчер, Рони Г.; Хесслинг, Марк; Макгуайр, Рик; Пидин, Ли; Симс, Оливер; Стейнбёк, Эрих; Вулферс, Джон (2022). Документация ooRexx 5.0.0 Справочник по библиотеке классов nCurses (PDF) . РексЛ.А.
  48. ^ Эшли, В. Дэвид; Флэтшер, Рони Г.; Хесслинг, Марк; МакГвайр, Рик; Пидин, Ли; Симс, Оливер; Стейнбёк, Эрих; Вольферс, Джон (2022). Справочник функций расширений Unix ooRexx Documentation 5.0.0 (PDF) . RexxLA.

Внешние ссылки