Ребол
![]() | |
Парадигма | языково-ориентированное программирование , обмен данными , функциональное , прототипное , императивное |
---|---|
Разработано | Карл Сассенрат |
Разработчик | РЕБОЛ Технологии |
Впервые появился | 1997 год |
Стабильная версия | 2.7.8
/ Январь 2011 г |
Предварительный выпуск | 2.101.0
/ декабрь 2012 г |
Дисциплина набора текста | динамичный , сильный |
ТЫ | кроссплатформенный |
Лицензия | 2.7.8 — свободно распространяемое программное обеспечение . [1] 2.101.0 имеет лицензию Apache 2.0. [2] |
Расширения имен файлов | .р, .реб [3] |
Веб-сайт | www |
Под влиянием | |
Я , Форт , Лисп , Логотип [4] | |
Под влиянием | |
JSON , [5] Красный | |
|
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 .
- 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 с графическим пользовательским интерфейсом:
view layout [text "Hello world!" button "Quit" [quit]]
Вот как аналогичный пример выглядит в R3-GUI:
view [text "Hello world!" button "Quit" on-action [quit]]
Диалекты
[ редактировать ]Rebol Языки, специфичные для предметной области , называемые диалектами , представляют собой микроязыки, оптимизированные для определенной цели. Диалекты можно использовать для определения бизнес-правил, графических пользовательских интерфейсов или последовательности экранов во время установки программы. Пользователи могут определять свои собственные диалекты, повторно используя любое существующее слово Rebol и придавая ему определенное значение в этом диалекте. [6] Диалекты интерпретируются функциями, обрабатывающими блоки Rebol (или анализирующими строки) определенным образом.
Пример диалектных способностей Ребола можно увидеть на примере слова return
. На диалекте обмена данными return
это просто слово, не имеющее какого-либо конкретного значения. На до диалекте return
— глобальная переменная, ссылающаяся на встроенную функцию, передающую обратно значение результата функции. [4] В диалекте визуального интерфейса (VID ) return
— это ключевое слово, заставляющее механизм компоновки имитировать возврат каретки , перемещая «перо рендеринга» вниз к началу следующей строки. [7]
Переводчик Rebol с графическими способностями должен понимать и интерпретировать многие диалекты. В таблице ниже перечислены наиболее важные из них в порядке значимости.
Название диалекта | Интерпретировано | Цель |
---|---|---|
Диалект обмена данными | load функция
|
представляет данные и метаданные; общая платформа для диалектов Ребола |
Делать диалект | do функция
|
программирование |
Разбор диалекта | parse функция
|
сопоставление с образцом |
Диалект спецификации функции | make функция
|
функции определение ; функциональное программирование |
Диалект спецификации объекта | make функция
|
объекта определение/наследование ; программирование на основе прототипов |
Диалект визуального интерфейса (ВИД) или РебГИП |
layout функция или display функция
|
определяет графический интерфейс пользователя |
Рисовать диалект | view функция
|
определяет графические элементы (линии, полигоны и т. д.) |
Диалект спецификации сценария | do функция
|
определение сценария |
Диалект политики безопасности | secure функция
|
определяет политику безопасности |
Синтаксис
[ редактировать ]Rebol Синтаксис имеет произвольную форму и не требует специального позиционирования. Однако отступы часто используются, чтобы лучше передать структуру текста читателям.
Синтаксические свойства разных диалектов могут различаться. Общей платформой для всех диалектов Ребола является диалект обмена данными ; от него обычно происходят другие диалекты. Помимо того, что диалект обмена данными является общей платформой для всех диалектов, он напрямую используется для представления данных и метаданных, заполнения структур данных, отправки данных через Интернет и сохранения их в хранилище данных.
В отличие от языков программирования, таких как C , диалект обмена данными не состоит из объявлений , операторов , выражений или ключевых слов. Действительный диалекта обмена данными текстовый поток — это древовидная структура данных , состоящая из блоков (корневой блок неявный, подблоки разделены круглыми квадратными скобками ), круглых скобок (ограниченных скобками ), строк (ограниченных двойными кавычками или фигурными скобками, подходящими для нескольких -строчные строки; обозначение курсора для непечатаемых символов используется ), URL-адреса , адреса электронной почты, файлы, пути или другие составные значения . В отличие от ALGOL блоков , блоки Rebol представляют собой составные значения, аналогичные s-выражениям в кавычках в Lisp . Тот факт, что код написан в виде блоков Rebol, делает язык гомоиконичным . [4]
Блоки, а также круглые скобки могут содержать другие составные значения (блок может содержать подблоки, круглые скобки, строки и т. д.) или скалярные значения, такие как слова, заданные слова (слова с суффиксом двоеточия ) , get-слова (слова с префиксом двоеточие), лит-слова (слова с префиксом апострофа ) , цифры, деньги, символы и т. д., разделенные пробелом . В словах допускаются специальные символы, поэтому a+b
это слово, отличное от a + b
, который представляет собой последовательность из трех слов, разделенных пробелами.
Комментарии могут появляться после точки с запятой до конца строки. Многострочные комментарии или комментарии, не игнорируемые лексическим анализатором, могут быть написаны с использованием «обычных» типов данных, таких как многострочные строки. [4]
Семантика
[ редактировать ]Блоки, содержащие язык, специфичный для предметной области, могут быть переданы в качестве аргументов конкретным функциям оценки . [6]
делать
[ редактировать ]Наиболее часто используемым оценщиком является do
функция. По умолчанию он используется для интерпретации ввода текста в консоль переводчика .
Диалект до, интерпретируемый do
Функция — это ориентированный на выражение подъязык диалекта обмена данными . Основной семантической единицей языка является выражение . В отличие от императивных языков программирования, произошедших от АЛГОЛА , диалект do не имеет ни ключевых слов, ни операторов.
Слова используются как регистронезависимые переменные . Как и во всех динамически типизированных языках , переменные не имеют связанного типа, тип связан со значениями. Результат, т.е. оценка слова, возвращается, когда слово встречается do
функция. можно использовать словарную форму слова Для присваивания . Не имея операторов, присваивание вместе с функциями с побочными эффектами может использоваться для императивного программирования . [4]
Подблоки корневого блока оценивают сами себя. Это свойство используется для обработки блоков данных в структурированном программировании путем отправки блоков в качестве аргументов для управления , таких как функций if
, either
, loop
и т. д., а также для диалектирования, когда блок передается определенной функции интерпретатора. [6]
Стоит отметить особую проблему: составные значения, присвоенные переменным, не копируются. Чтобы сделать копию, значение должно быть передано в copy
функция. [4]
The do
Функция обычно следует префиксному стилю оценки , при котором функция обрабатывает аргументы, следующие за ней. Однако инфиксная оценка с использованием инфиксных операторов существует также . Оценка инфикса имеет приоритет над оценкой префикса. Например,
abs -2 + 3
возвращает 1, поскольку добавление инфикса имеет приоритет над вычислением абсолютного значения. При вычислении инфиксных выражений порядок вычислений слева направо, ни один оператор не имеет приоритета над другим. Например,
2 + 3 * 4
возвращает 20, тогда как оценка, отдающая приоритет умножению, даст 14. Все операторы имеют версии префикса. Do
обычно оценивает аргументы перед передачей их функции. Итак, выражение ниже:
print read http://en.wikipedia.org/wiki/Rebol
сначала читает страницу Rebol в Википедии, а затем передает результат в print
функция. Круглые скобки можно использовать для изменения порядка вычислений. Используя префиксную запись , можно избежать использования круглых скобок в выражениях. [4]
Простые правила приоритета являются преимуществом:
- Нет необходимости «консультироваться» с таблицами приоритета при написании выражений.
- Нет необходимости переписывать таблицы приоритетов при определении нового оператора.
- Выражения можно легко транслитерировать из инфиксной записи в префиксную и наоборот.
а также недостаток:
- Пользователи, привыкшие к более традиционным правилам приоритета, могут легко допустить ошибку. [6]
анализировать
[ редактировать ]The parse
Функция предпочтительно используется для определения, проверки, преобразования и интерпретации диалектов. Это достигается путем сопоставления выражений синтаксического анализа во время выполнения. [6]
Выражения синтаксического анализа записываются на диалекте синтаксического анализа , который, как и диалект do , является подъязыком, ориентированным на выражения, диалекта обмена данными . В отличие от диалекта do , диалект синтаксического анализа использует ключевые слова, представляющие операторы и наиболее важные нетерминалы , операторы инфиксного синтаксического анализа не имеют префиксных эквивалентов и используют правила приоритета ( последовательность имеет более высокий приоритет, чем выбор ). [6]
Также могут быть включены действия, которые необходимо предпринять в процессе синтаксического анализа, а также parse
Функция может использоваться для обработки блоков или строк. На разбора строк уровне parse
должен обрабатывать синтаксический анализ «низкого уровня», принимая во внимание символы и разделители. Анализ блоков — это более высокий уровень, обрабатывающий сканирование на уровне значений Rebol. [6]
Диалект синтаксического анализа принадлежит к семейству грамматик, представленных языком синтаксического анализа сверху вниз или грамматикой выражений синтаксического анализа (PEG). Основное сходство — наличие операторов последовательности и выбора , которые есть у всех членов семьи. Синтаксис диалекта синтаксического анализа и сходство между диалектом синтаксического анализа и PEG иллюстрируются этой транслитерацией примера PEG , который анализирует арифметическое выражение:
Digit: charset [#"0" - #"9"]
Value: [some Digit | "(" Expr ")"]
Product: [Value any [["*"| "/"] Value]]
Sum: [Product any [["+"| "-"] Product]]
Expr: Sum
parse/all "12+13" Expr
Реализации
[ редактировать ]Официальная реализация Rebol 2.7.8 доступна в нескольких редакциях ( /Core , /View , /Command , /SDK и /IOS ). Редакции /Core и /View являются свободно распространяемым программным обеспечением . [1]
Среда выполнения хранится в одном исполняемом файле. Rebol/Core Размер консольной версии Rebol/View 2.7.8, версии с графическим пользовательским интерфейсом 2.7.8 составляет около 300 КБ, а размер , составляет около 650 КБ.
Rebol/View обеспечивает независимый от платформы доступ к графике и звуку, а также поставляется с собственным набором оконных инструментов и расширяемым набором стилей ( виджеты графического интерфейса ). Расширенные выпуски, такие как 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]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б РЕБОЛ Технологии. REBOL/View и REBOL/Core 2.7.8. Лицензия
- ^ Исходный код R3 на GitHub.
- ^ «Блог Карла REBOL — давайте перейдем на суффикс .reb» . Rebol.com. 18 августа 2013 года . Проверено 23 января 2014 г.
- ^ Jump up to: а б с д и ж г Гольдман Э., Блэнтон Дж. (2000). REBOL: Официальное руководство. Макгроу-Хилл Осборн Медиа. ISBN 0-07-212279-X .
- ^ Jump up to: а б с Крокфорд, Дуглас . The JSON Saga , jsonsaga.ppt. Архивировано из оригинала 4 октября 2012 г. на Wayback Machine.
- ^ Jump up to: а б с д и ж г час я дж к л Робертс, Ральф (2000). РЕБОЛ для чайников. Голодные умы. ISBN 0-7645-0745-1 .
- ^ Jump up to: а б Оверло, Оливье (2001). Программирование Rebol. Эйроль. ISBN 2-212-11017-0 .
- ^ Jump up to: а б Сассенрат, Карл (1 июля 2000 г.). «Внутри скриптового языка REBOL» . Журнал доктора Добба .
- ^ «REBOL станет открытым исходным кодом» . Rebol.com. 25 сентября 2012 года . Проверено 23 января 2014 г.
- ^ Сассенрат, Карл (12 декабря 2012 г.). «Комментарии: опубликован исходный код R3!» . Проверено 14 августа 2014 г.
Вы, наверное, думали, что релиз исходного кода никогда не состоится? Я прав? Ну, теперь он есть на github по адресу github.com/rebol/rebol.
- ^ «Вызов РЕБОЛ Ребол?» . 14 декабря 2012. Архивировано из оригинала 3 декабря 2013 года . Проверено 2 декабря 2013 г.
- ^ Сассенрат, Карл. «Кросс-компиляция Rebol для вашей любимой встроенной платы» . Проверено 16 сентября 2016 г.
- ^ «Исходный код интерпретатора Rebol» . ребол/ребол GitHub . Проверено 14 марта 2017 г.
- ^ Проект rebol-orca в Freecode
- ^ Проект Red на GitHub.
Дальнейшее чтение
[ редактировать ]- Майкс, Нора (20 ноября 1999 г.). «Вторжение REBOL: это не язык сценариев, не язык программирования — и не новая Amiga. Или нет?» . LinuxWorld . Архивировано из оригинала 24 марта 2005 года.
- История, Деррик (27 августа 1999 г.). «Ребол может стать языком для всех нас» . Веб-обзор . Архивировано из оригинала 12 октября 1999 года.
Внешние ссылки
[ редактировать ]- Языки программирования
- Программное обеспечение АмигаОС 4
- Динамические языки программирования
- Динамически типизированные языки программирования
- Функциональные языки
- Языки программирования на основе прототипов
- Языки сценариев
- Языки программирования с расширяемым синтаксисом
- Ранее проприетарное программное обеспечение
- Языки программирования, созданные в 1997 году.
- Языки программирования высокого уровня
- Гомоиконические языки программирования