Rebol

редактировать

Rebol
Rebol logo.png
Paradigm языково-ориентированное программирование, обмен данными, функционально, на основе прототипов, императив
Разработано Карлом Сассенратом
Разработчиком REBOL Technologies
Впервые появилось1997; 23 года назад (1997 г.)
Стабильный выпуск 2.7.8 / январь 2011 г.; 9 лет назад (2011-01)
Предварительный выпуск 2.101.0 / декабрь 2012 г.; 7 лет назад (2012-12)
Дисциплина набора текста динамический, сильный
OS кроссплатформенный
Лицензия 2.7.8 - Свободно распространяемое программное обеспечение, 2.101.0 имеет лицензию Apache 2.0
Расширения имен файлов .r,.reb
Веб-сайтwww.rebol.com
Под влиянием
Self, Forth, Lisp, Logo
Influenced
JSON, Red

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

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

— Карл Сассенрат

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

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

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

Содержание
  • 1 Этимология
  • 2 История
  • 3 Дизайн
    • 3.1 Простота используйте
    • 3.2 Диалекты
    • 3.3 Синтаксис
    • 3.4 Семантика
      • 3.4.1 do
      • 3.4.2 parse
  • 4 Реализации
  • 5 Устаревшие
  • 6 См. также
  • 7 Ссылки
  • 8 Дополнительная литература
  • 9 Внешние ссылки
Этимология

Rebol изначально была аббревиатурой от R elative E xpression B ased O bject L язык написан заглавными буквами. Чтобы соответствовать современным тенденциям в области именования языков, например, путем замены исторического названия LISP на Lisp программисты отказались от практики написания REBOL заглавными буквами. В конце концов Сассенрат поставил вопрос об именовании на обсуждение сообщества в своем блоге. В последующих работах Сассенрат принял условное обозначение языка как Rebol.

История

Впервые выпущенный в 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. Последняя фиксация произошла в марте 2014 года, поэтому можно с уверенностью предположить, что разработка застопорилась.
Дизайн

Простота использования

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

view layout [text «Hello world!» кнопка "Quit" [quit]]

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

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

Пример R3-GUI Hello world

Диалекты

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

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

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

Имя диалектаИнтерпретируетсяЦель
Диалект обмена даннымиloadфункцияпредставляет данные и метаданные; общая платформа для диалектов Rebol
Do dialectdofunctionprogramming
Parse dialectparsefunctionсопоставление с образцом
Диалект спецификации функцииmakeфункцияфункция определение; функциональное программирование
Диалект спецификации объектаmakeфункцияобъект определение / наследование; программирование на основе прототипов
диалект визуального интерфейса (VID). или. RebGUIlayoutfunction. or. displayfunctionзадает графический интерфейс пользователя
Диалект рисованиявидфункцияопределяет графические элементы (линии, многоугольники и т. д.)
Диалект спецификации скриптаdoфункцияскрипт определение
Диалект политики безопасностиsecurefunctionопределяет политику безопасности

Синтаксис

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

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

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

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

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

Семантика

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

do

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

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

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

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

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

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

abs -2 + 3

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

2 + 3 * 4

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

print read http://en.wikipedia.org/w/Rebol 

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

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

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

, а также является недостатком :

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

parse

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

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

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

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

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

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

Среда выполнения хранится в одном исполняемом файле. 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 и возможность создания автономных исполняемых файлов.

Legacy
  • Rebol был назван Дугласом Крокфордом как один из вдохновителей JavaScript Object Обозначение.
  • Rebol вдохновил проект Orca с открытым исходным кодом, который представляет собой интерпретируемый язык, подобный Rebol.
  • Boron - интерпретируемый гомоиконический язык, вдохновленный Rebol и похожий на него, который предназначен для встраивания языков, специфичных для предметной области.. Он реализован как библиотека C, лицензированная в соответствии с условиями LGPLv3.
  • Язык программирования Red был непосредственно вдохновлен Rebol, однако выбор реализации Red был специально направлен на преодоление его воспринимаемого ограничения.
См. также
Ссылки
Дополнительная литература
Внешние ссылки
Последняя правка сделана 2021-06-03 10:15:17
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте