Из Википедии, свободной энциклопедии
  (Перенаправлено с REBOL )
Перейти к навигации Перейти к поиску

Rebol ( / R ɛ б əl / РЭП -əl ; исторически REBOL ) является кросс-платформенный [6] обмен данными языка и мульти-парадигмы языка динамического программирования разработан Carl Сассенрат для сетевых коммуникаций и распределенных вычислений . Он вводит концепцию диалектирования : небольшие, оптимизированные , предметно-ориентированные языки для кода и данных [6] [7], что также является наиболее заметным свойством языка, по мнению его разработчика.Карл Сассенрат :

Хотя его можно использовать для программирования, написания функций и выполнения процессов, его самая сильная сторона - это способность легко создавать предметно-ориентированные языки или диалекты.

-  Карл Сассенрат [8]

Дуглас Крокфорд , известный своим участием в разработке JavaScript , описал Rebol как «более современный язык, но с некоторыми очень похожими на Lisp идеями, поскольку все он построен на представлении данных, которые затем могут быть выполнены в виде программ» и как одно из влияний JSON . [5]

Изначально язык и его официальная реализация были проприетарными и с закрытым исходным кодом, разработанными REBOL Technologies. После обсуждения с Лоуренс Розен , [9] Rebol версии 3 интерпретатор был выпущен под 2.0 лицензии Apache на 12 декабря 2012 года [10] Более старые версии доступны только в двоичной форме, и не релиз источника для них не планируется.

Rebol использовался для программирования Интернет- приложений (как клиентских, так и серверных ), приложений баз данных , утилит и мультимедийных приложений. [6]

Этимология [ править ]

Rebol был первоначально аббревиатурой R elative Е Xpression B Ased O ▪ Таблица L anguage написан заглавными буквами. [6] [8] Чтобы соответствовать современным тенденциям в области именования языков, например, путем замены исторического названия LISP на Lisp , программисты отказались от практики написания REBOL заглавными буквами. В конце концов, Сассенрат поставил вопрос об именовании на обсуждение сообщества в своем блоге. [11] В последующем письме Сассенрат принял соглашение о написании названия языка как Ребол . [12]

История [ править ]

Впервые выпущенный в 1997 году, Rebol разрабатывался в течение 20 лет Карлом Сассенратом, архитектором и основным разработчиком AmigaOS , на основе его исследования денотационной семантики и использования концепций языков программирования Lisp , Forth , Logo и Self .

  1. REBOL Technologies была основана в 1998 году.
  2. REBOL 2 , интерпретатор, который стал ядром расширенных редакций интерпретаторов, был впервые выпущен в 1999 году.
    1. REBOL / Command , который добавил надежное шифрование и доступ ODBC , был выпущен в сентябре 2000 года.
    2. REBOL / View был выпущен в апреле 2001 года, добавляя графические возможности в основной язык.
    3. REBOL / IOS , расширяемая среда для совместной работы, построенная на REBOL, была выпущена в августе 2001 года.
    4. REBOL / SDK , предоставляющий выбор ядер для связывания, а также препроцессор, был выпущен в декабре 2002 года.
  3. Rebol 3 [R3], новейшая версия интерпретатора , имеет альфа-версии, выпущенные REBOL Technologies с января 2008 года. С момента его выпуска в качестве проекта Apache 2 в декабре 2012 года он разрабатывается сообществом Rebol. [13]

Дизайн [ править ]

Легкость использования [ править ]

Один из принципов дизайна Rebol - «делать простые вещи простыми способами». [6] В следующем примере диалект визуального интерфейса используется для описания простой программы Hello world с графическим пользовательским интерфейсом:

просмотреть  макет [ текст  «Hello world!»  кнопка  «Выйти» [ выход ]]

Вот так похожий пример выглядит в R3-GUI:

view [ текст  "Hello world!"  Кнопка  «Выход»  on - действия [ выйти ]]

Диалекты [ править ]

Доменные языки Rebol , называемые диалектами , представляют собой микроязыки, оптимизированные для определенной цели. Диалекты могут использоваться для определения бизнес-правил, графических пользовательских интерфейсов или последовательностей экранов во время установки программы. Пользователи могут определять свои собственные диалекты, повторно используя любое существующее слово Rebol и придавая ему конкретное значение на этом диалекте. [6] Диалекты интерпретируются функциями, обрабатывающими блоки Rebol (или анализирующими строки) определенным образом.

Пример диалектных способностей Ребола можно увидеть на слове return. В обмене данными диалект return - это просто слово, не имеющее особого значения. В сделай диалекте , returnявляется глобальной переменной со ссылкой на нативной функции , проходящей назад результирующее значение функции. [4] В визуальном интерфейсе диалекте (VID) , returnявляется ключевым слово вызывает макет двигатель для имитации возврата каретки , перемещая «рендеринг перо» вплоть до начала следующей строки. [7]

Переводчик Rebol с графическими способностями должен понимать и интерпретировать многие диалекты. В таблице ниже перечислены наиболее важные из них в порядке значимости.

Синтаксис [ править ]

Синтаксис Rebol имеет произвольную форму и не требует определенного позиционирования. Однако отступы часто используются, чтобы лучше передать структуру текста читателям.

Синтаксические свойства разных диалектов могут отличаться. Общей платформой для всех диалектов Rebol является диалект обмена данными ; другие диалекты обычно происходят от него. Помимо того, что это общая платформа для всех диалектов, диалект обмена данными напрямую используется для представления данных и метаданных, заполнения структур данных, отправки данных через Интернет и сохранения их в хранилище данных.

В отличие от языков программирования, таких как C , диалект обмена данными не состоит из объявлений , операторов , выражений или ключевых слов. Действительного обмен данных говора текст поток представляет собой древовидную структуру данных , состоящая из блоков (корневой блок подразумевается, субблоки являются разделителями с помощью квадратных скобок ), скобок (разделяются круглыми скобками ), строки (разделяются двойными кавычками или фигурными скобками , подходящими для мульти -строчные строки; обозначение каретки используется для непечатаемых символов),URL -адреса, адреса электронной почты, файлы, пути или другие составные значения . В отличие от блоков ALGOL, блоки Rebol представляют собой составные значения, аналогичные заключенным в кавычки s-выражениям в Лиспе . Тот факт, что код написан в виде блоков Rebol, делает язык гомоиконным . [4]

Блоки, а также скобки могут содержать другие составные значения (блок может содержать подблоки, скобки, строки и т. Д.) Или скалярные значения, такие как слова, set-words (слова с суффиксом двоеточие ), get-words (слова с префиксом двоеточие), световые слова (слова с префиксом апострофа ), числа, деньги, символы и т. д., разделенные пробелом . Обратите внимание, что в словах разрешены специальные символы, a+bа также слово «непохожее» a + b, которое представляет собой последовательность из трех слов, разделенных пробелами.

Комментарии могут стоять после точки с запятой до конца строки. Многострочные комментарии или комментарии, не игнорируемые лексическим синтаксическим анализатором, могут быть написаны с использованием «обычных» типов данных, таких как многострочные строки. [4]

Семантика [ править ]

Блоки, содержащие предметно-ориентированный язык, могут быть представлены в качестве аргументов для определенных функций оценщика . [6]

сделать [ редактировать ]

Наиболее часто используемым оценщиком является doфункция. Он используется по умолчанию для интерпретации ввода текста в консоль интерпретатора .

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

Слова используются как переменные без учета регистра . Как и во всех языках с динамической типизацией , переменные не имеют связанного типа, тип связан со значениями. Результат, то есть оценка слова, возвращается, когда слово встречает функция. Для присвоения может использоваться устоявшаяся словесная форма слова . При отсутствии операторов присваивание вместе с функциями с побочными эффектами может использоваться для императивного программирования . [4]do

Подблоки корневого блока оцениваются сами по себе. Это свойство используется для блоков данных ручек, для структурного программирования путем подачи блоков в качестве аргументов управления функциями , как if, either, loopи т.д., а также для dialecting, когда блок передается функции конкретных интерпретатора. [6]

Следует отметить особую проблему, заключающуюся в том, что составные значения, присвоенные переменным, не копируются. Чтобы сделать копию, значение необходимо передать copyфункции. [4]

doФункция обычно следует префикс стиль оценки , где функция обрабатывает аргументы , которые следуют за ней. Однако существует и инфиксная оценка с использованием инфиксных операторов . Вычисление инфикса имеет приоритет над вычислением префикса. Например,

абс -2 + 3

возвращает 1, поскольку инфиксное сложение имеет приоритет над вычислением абсолютного значения. При оценке инфиксных выражений порядок оценки слева направо, ни один оператор не имеет приоритета над другим. Например,

2  +  3  *  4

возвращает 20, тогда как оценка, дающая приоритет умножению, даст 14. Все операторы имеют префиксные версии. Doобычно оценивает аргументы перед их передачей в функцию. Итак, приведенное ниже выражение:

сначала читает страницу Wikipedia Rebol, а затем передает результат printфункции. Скобки можно использовать для изменения порядка оценки. Используя префиксную нотацию , можно избежать использования круглых скобок в выражениях. [4]

Оба простых правила приоритета являются преимуществом:

  • Нет необходимости "сверяться" с таблицами приоритета при написании выражений.
  • Нет необходимости переписывать таблицы приоритетов при определении нового оператора
  • Выражения можно легко транслитерировать из инфиксной записи в префиксную и наоборот.

а также недостаток:

  • Пользователи, привыкшие к более традиционным правилам приоритета, могут легко ошибиться [6]

анализировать [ редактировать ]

parseФункция предпочтительно используется для определения, проверки преобразования и интерпретации диалекты. Это достигается путем сопоставления синтаксических выражений во время выполнения. [6]

Выражения синтаксического анализа записываются на диалекте синтаксического анализа , который, как и диалект do , является ориентированным на выражения подъязыком диалекта обмена данными . В отличии от делать диалект , то синтаксический анализ диалектными использует ключевые слова , представляющие оператор и наиболее важные нетерминалы , инфиксный разбор операторы не имеют префиксы эквивалентов и правила использования старшинства ( последовательность имеет более высокий приоритет , чем выбор ). [6]

Действия могут быть включены в процесс синтаксического анализа, а parseфункция может использоваться для обработки блоков или строк. На уровне синтаксического анализа строкиparse необходимо обрабатывать "низкоуровневый" синтаксический анализ с учетом символов и разделителей. Парсинг блоков находится на более высоком уровне, обрабатывая сканирование на уровне значений Rebol. [6]

Диалект синтаксического анализа принадлежит к семейству грамматик, представленных языком синтаксического анализа сверху вниз или грамматикой синтаксического анализа (PEG). Основное сходство - наличие операторов последовательности и выбора у всех членов семьи. Синтаксис синтаксического анализа диалекта и сходства между синтаксическим диалектом и PEG иллюстрируются этой транслитерацией примера PEG, который анализирует арифметическое выражение:

Цифра:  кодировка [ # "0"  -  # "9" ] Значение: [ некоторая  цифра  |  "("  Expr  ")" ] Продукт: [ Значение  любое [[ "*" |  "/" ] Значение ]] Сумма: [ Продукт  любой [[ "+" |  "-" ] Продукт ]] Выражение:  синтаксический анализ суммы / все  "12 + 13"  Выражение

Реализации [ править ]

Официальная реализация Rebol 2.7.8 доступна в нескольких редакциях ( / Core , / View , / Command , / SDK и / IOS ). Обе версии / Core и / View являются свободно распространяемым программным обеспечением . [1]

Среда выполнения хранится в одном исполняемом файле. Rebol / Core 2.7.8, версия для консоли, имеет размер около 300 КБ, а Rebol / View 2.7.8, версия с графическим пользовательским интерфейсом , имеет размер около 650 КБ.

Rebol / View обеспечивает доступ к графике и звуку, не зависящим от платформы , и поставляется с собственным набором оконных инструментов и расширяемым набором стилей ( виджеты GUI ). Для расширенных выпусков, таких как Rebol / Command 2.7.8 или Rebol / SDK 2.7.8, требуется платная лицензия; они добавляют такие функции, как доступ к данным ODBC и возможность создания автономных исполняемых файлов. [ необходима цитата ]

Наследие [ править ]

  • Rebol был назван Дугласом Крокфордом одним из вдохновителей нотации объектов JavaScript . [5]
  • Rebol вдохновил проект Orca с открытым исходным кодом, который представляет собой интерпретируемый язык, подобный Rebol. [14]
  • Boron - это интерпретируемый гомоиконный язык, вдохновленный и похожий на Rebol, который предназначен для встраивания языков, специфичных для предметной области. Он реализован как библиотека C, лицензированная в соответствии с условиями LGPLv3.
  • Язык программирования Red был непосредственно вдохновлен Rebol, однако варианты реализации Red были специально ориентированы на преодоление его предполагаемых ограничений. [15]

См. Также [ править ]

  • Доменный язык
  • Языко-ориентированное программирование

Ссылки [ править ]

  1. ^ a b REBOL Technologies. Лицензия REBOL / View и REBOL / Core 2.7.8
  2. ^ Источник R3 на GitHub
  3. ^ «Блог Карла REBOL - Давайте переключимся на суффикс .reb» . Rebol.com. 18 августа 2013 . Проверено 23 января 2014 года .
  4. ^ Б с д е е г Голдман, Е., Blanton, J. (2000). REBOL: Официальное руководство. McGraw-Hill Osborne Media. ISBN 0-07-212279-X . 
  5. ^ a b c Крокфорд, Дуглас . Сага о JSON , jsonsaga.ppt. Архивировано 4 октября 2012 г. на Wayback Machine.
  6. ^ Б с д е е г ч я J к л Робертс, Ральф (2000). REBOL для чайников. Голодные умы. ISBN 0-7645-0745-1 . 
  7. ^ a b Оверло, Оливье (2001). Rebol Программирование. Глазки. ISBN 2-212-11017-0 . 
  8. ^ a b Сассенрат, Карл (1 июля 2000 г.). «Внутри скриптового языка REBOL» . Журнал доктора Добба .
  9. ^ «REBOL, чтобы стать открытым исходным кодом» . Rebol.com. 25 сентября 2012 . Проверено 23 января 2014 года .
  10. ^ Sassenrath, Карл (12 декабря 2012). "Комментарии к: Выпущен исходный код R3!" . Проверено 14 августа 2014 года . Вы, наверное, думали, что релиз исходного кода никогда не будет? Я прав? Что ж, теперь он находится на github по адресу github.com/rebol/rebol.
  11. ^ "Вызов REBOL Rebol?" . 14 декабря 2012 года Архивировано из оригинала на 3 декабря 2013 года . Проверено 2 декабря 2013 года .
  12. ^ Сассенрат, Карл. «Кросс-компиляция Rebol для вашей любимой встраиваемой платы» . Проверено 16 сентября 2016 года .
  13. ^ «Исходный код интерпретатора Rebol» . ребол / ребол GitHub . Проверено 14 марта 2017 года .
  14. ^ Проект rebol-orca в Freecode
  15. ^ Красный проект на GitHub

Дальнейшее чтение [ править ]

  • Майкс, Нора (20 ноября 1999 г.). «Вторжение REBOL: это не язык сценариев, не язык программирования - и не новая Amiga. Или нет?» . LinuxWorld . Архивировано из оригинального 24 марта 2005 года.
  • История, Деррик (27 августа 1999 г.). «Ребол может стать языком для всех нас» . Веб-обзор . Архивировано из оригинального 12 октября 1999 года.

Внешние ссылки [ править ]

  • REBOL в Curlie
  • Учебник REBOL
  • Rebol 3 Учебник