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 изначально был аббревиатурой от R elative Expression B ased Object Language , написанной заглавными буквами . [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. В сентябре 2000 года был выпущен REBOL/Command , в котором реализовано надежное шифрование и доступ ODBC .
    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:

вид [ текст  "Привет, мир!"  кнопка  "Выйти"  на- действие [ выйти ]]

Диалекты

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

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

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

Синтаксис

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

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

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

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

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

Семантика

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

делать

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

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

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

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

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

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

пресс -2 + 3

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

2  +  3  *  4

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

Сначала читает страницу Wikipedia 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 обеспечивает независимый от платформы доступ к графике и звуку, а также поставляется с собственным набором инструментов для работы с окнами и расширяемым набором стилей ( виджеты GUI ). Расширенные версии, такие как 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: Официальное руководство. McGraw-Hill Osborne Media. ISBN 0-07-212279-X
  5. ^ abc Крокфорд, Дуглас . The JSON Saga , jsonsaga.ppt. Архивировано 4 октября 2012 г. на Wayback Machine.
  6. ^ abcdefghijkl Робертс, Ральф (2000). REBOL для чайников. Hungry Minds. ISBN 0-7645-0745-1
  7. ^ аб Оверло, Оливье (2001). Программа Ребол. Эйроль. ISBN 2-212-11017-0
  8. ^ ab Сассенрат, Карл (1 июля 2000 г.). «Внутри языка сценариев REBOL». Журнал доктора Добба .
  9. ^ "REBOL станет проектом с открытым исходным кодом". Rebol.com. 25 сентября 2012 г. Получено 23 января 2014 г.
  10. ^ Сассенрат, Карл (12 декабря 2012 г.). "Комментарии к: Выпущен исходный код R3!" . Получено 14 августа 2014 г. Вы , вероятно, думали, что исходный код никогда не выйдет? Я прав? Ну, теперь он есть на github по адресу github.com/rebol/rebol.
  11. ^ "Calling REBOL Rebol?". 14 декабря 2012 г. Архивировано из оригинала 3 декабря 2013 г. Получено 2 декабря 2013 г.
  12. ^ Сассенрат, Карл. "Кросс-компиляция Rebol для вашей любимой встроенной платы" . Получено 16 сентября 2016 г.
  13. ^ "Исходный код интерпретатора Rebol". rebol/rebol GitHub . Получено 14 марта 2017 г.
  14. ^ Проект rebol-orca на Freecode
  15. ^ Проект Red на GitHub

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

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