stringtranslate.com

Ребол

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

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

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

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

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

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

Этимология

Первоначально Rebol был аббревиатурой языка относительных выражений , основанных на объектах , написанного заглавными буквами. [6] [8] Чтобы соответствовать современным тенденциям в именовании языков, например, заменой исторического названия LISP на Lisp , программисты прекратили практику написания REBOL заглавными буквами. В конце концов Сассенрат вынес вопрос об названии на обсуждение сообщества в своем блоге. [11] В последующем написании Сассенрат принял соглашение о написании названия языка как Rebol . [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 с графическим пользовательским интерфейсом:

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

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

просмотреть [ текст  «Привет, мир!»  кнопка  «Выход»  on- действие [ quit ]]

Диалекты

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

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

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

Синтаксис

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

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

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

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

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

Семантика

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

делать

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

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

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

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

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

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

абс -2 + 3

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

2  +  3  *  4

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

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

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

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

анализировать

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

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

Также могут быть включены действия, которые необходимо выполнять в процессе синтаксического анализа, а parseфункцию можно использовать для обработки блоков или строк. На уровне синтаксического анализа строкparse должен обрабатываться «низкий уровень» синтаксического анализа с учетом символов и разделителей. Анализ блоков — это более высокий уровень, обрабатывающий сканирование на уровне значений Rebol. [6]

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

Цифра:  набор символов [ #"0"  -  #"9" ] Значение: [ некоторая  цифра  |  "("  Выраж  ")" ] Продукт: [ Значение  любое [[ "*" |  "/" ] Значение ]] Сумма: [ Товар  любой [[ "+" |  "-" ] Продукт ]] Выражение: анализ  суммы / все  "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 обеспечивает независимый от платформы доступ к графике и звуку, а также поставляется с собственным набором оконных инструментов и расширяемым набором стилей ( виджеты графического интерфейса ). Расширенные выпуски, такие как Rebol/Command 2.7.8 или Rebol/SDK 2.7.8, требуют платной лицензии; они добавляют такие функции, как доступ к данным ODBC и возможность создавать автономные исполняемые файлы. [ нужна цитата ]

Наследие

Смотрите также

Рекомендации

  1. ^ ab REBOL Technologies. Лицензия REBOL/View и REBOL/Core 2.7.8.
  2. ^ Исходный код R3 на GitHub .
  3. ^ «Блог Карла REBOL - давайте перейдем на суффикс .reb» . Rebol.com. 18 августа 2013 года . Проверено 23 января 2014 г.
  4. ^ abcdefg Голдман, Э., Блэнтон, Дж. (2000). REBOL: Официальное руководство. Макгроу-Хилл Осборн Медиа. ISBN 0-07-212279-X
  5. ^ abc Крокфорд, Дуглас . The JSON Saga , jsonsaga.ppt. Архивировано 4 октября 2012 г. на Wayback Machine.
  6. ^ abcdefghijkl Робертс, Ральф (2000). РЕБОЛ для чайников. Голодные умы. ISBN 0-7645-0745-1
  7. ^ аб Оверло, Оливье (2001). Программа Ребол. Эйроль. ISBN 2-212-11017-0
  8. ^ аб Сассенрат, Карл (1 июля 2000 г.). «Внутри языка сценариев REBOL». Журнал доктора Добба .
  9. ^ «REBOL станет открытым исходным кодом» . Rebol.com. 25 сентября 2012 года . Проверено 23 января 2014 г.
  10. Сассенрат, Карл (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. ^ Проект Red на GitHub .

дальнейшее чтение

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