Парадигма | языково-ориентированное программирование , обмен данными , функциональный , на основе прототипов , императивный |
---|---|
Разработано | Карл Сассенрат |
Разработчик | REBOL Technologies |
Впервые появился | 1997 |
Стабильный выпуск | 2.7.8 / январь 2011 г . |
Предварительный выпуск | 2.101.0 / декабрь 2012 г . |
Печатная дисциплина | динамичный , сильный |
Операционные системы | кроссплатформенный |
Лицензия | 2.7.8 является свободно распространяемым программным обеспечением , [1] 2.101.0 имеет лицензию Apache 2.0 [2] |
Расширения имени файла | .r, .reb [3] |
Веб-сайт | www |
Под влиянием | |
Я , Форт , Лисп , Логотип [4] | |
Под влиянием | |
JSON , [5] Красный | |
|
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 .
- REBOL Technologies была основана в 1998 году.
- REBOL 2 , интерпретатор, который стал ядром расширенных редакций интерпретаторов, был впервые выпущен в 1999 году.
- REBOL / Command , который добавил надежное шифрование и доступ ODBC , был выпущен в сентябре 2000 года.
- REBOL / View был выпущен в апреле 2001 года, добавляя графические возможности в основной язык.
- REBOL / IOS , расширяемая среда для совместной работы, построенная на REBOL, была выпущена в августе 2001 года.
- REBOL / SDK , предоставляющий выбор ядер для связывания, а также препроцессор, был выпущен в декабре 2002 года.
- 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 с графическими способностями должен понимать и интерпретировать многие диалекты. В таблице ниже перечислены наиболее важные из них в порядке значимости.
Название диалекта | Интерпретируется | Цель |
---|---|---|
Диалект обмена данными | load функция | представляет данные и метаданные; общая платформа для диалектов Rebol |
Диалект | do функция | программирование |
Разбирать диалект | parse функция | сопоставление с образцом |
Диалект спецификации функции | make функция | определение функции ; функциональное программирование |
Диалект спецификации объекта | make функция | определение / наследование объекта ; программирование на основе прототипов |
Диалект визуального интерфейса (VID) или RebGUI | layout функция или display функция | определяет графический интерфейс пользователя |
Нарисуйте диалект | view функция | определяет графические элементы (линии, многоугольники и т. д.) |
Диалект спецификации скрипта | do функция | определение сценария |
Диалект политики безопасности | secure функция | определяет политику безопасности |
Синтаксис [ править ]
Синтаксис 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
обычно оценивает аргументы перед их передачей в функцию. Итак, приведенное ниже выражение:
распечатать читать http://en.wikipedia.org/wiki/Rebol
сначала читает страницу 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]
См. Также [ править ]
- Доменный язык
- Языко-ориентированное программирование
Ссылки [ править ]
- ^ a b REBOL Technologies. Лицензия REBOL / View и REBOL / Core 2.7.8
- ^ Источник R3 на GitHub
- ^ «Блог Карла REBOL - Давайте переключимся на суффикс .reb» . Rebol.com. 18 августа 2013 . Проверено 23 января 2014 года .
- ^ Б с д е е г Голдман, Е., Blanton, J. (2000). REBOL: Официальное руководство. McGraw-Hill Osborne Media. ISBN 0-07-212279-X .
- ^ a b c Крокфорд, Дуглас . Сага о JSON , jsonsaga.ppt. Архивировано 4 октября 2012 г. на Wayback Machine.
- ^ Б с д е е г ч я J к л Робертс, Ральф (2000). REBOL для чайников. Голодные умы. ISBN 0-7645-0745-1 .
- ^ a b Оверло, Оливье (2001). Rebol Программирование. Глазки. ISBN 2-212-11017-0 .
- ^ a b Сассенрат, Карл (1 июля 2000 г.). «Внутри скриптового языка REBOL» . Журнал доктора Добба .
- ^ «REBOL, чтобы стать открытым исходным кодом» . Rebol.com. 25 сентября 2012 . Проверено 23 января 2014 года .
- ^ Sassenrath, Карл (12 декабря 2012). "Комментарии к: Выпущен исходный код R3!" . Проверено 14 августа 2014 года .
Вы, наверное, думали, что релиз исходного кода никогда не будет?
Я прав?
Что ж, теперь он находится на github по адресу github.com/rebol/rebol.
- ^ "Вызов REBOL Rebol?" . 14 декабря 2012 года Архивировано из оригинала на 3 декабря 2013 года . Проверено 2 декабря 2013 года .
- ^ Сассенрат, Карл. «Кросс-компиляция Rebol для вашей любимой встраиваемой платы» . Проверено 16 сентября 2016 года .
- ^ «Исходный код интерпретатора Rebol» . ребол / ребол GitHub . Проверено 14 марта 2017 года .
- ^ Проект rebol-orca в Freecode
- ^ Красный проект на GitHub
Дальнейшее чтение [ править ]
- Майкс, Нора (20 ноября 1999 г.). «Вторжение REBOL: это не язык сценариев, не язык программирования - и не новая Amiga. Или нет?» . LinuxWorld . Архивировано из оригинального 24 марта 2005 года.
- История, Деррик (27 августа 1999 г.). «Ребол может стать языком для всех нас» . Веб-обзор . Архивировано из оригинального 12 октября 1999 года.
Внешние ссылки [ править ]
- REBOL в Curlie
- Учебник REBOL
- Rebol 3 Учебник