Красные REBOLюционные штаны
Архив
Этот ценный рубин из особого здесь родника,
Этот жемчуг единственный светит особой печатью,
И загадка любви непонятной полна благодатью,
И она для разгадки особого ждет языка.
Омар Хайям
В статье «Отблеск зари на жемчужине» («КТ» #355), посвященной языку Ruby, я уже попытался объяснить, почему, несмотря на доминирование графического интерфейса пользователя на десктопе, для нормальной работы с компьютером по-прежнему необходимы языки программирования (в частности, скриптовые языки). Выбор языка для повседневного использования - дело сугубо индивидуальное, поэтому продолжу тему описанием языка REBOL.
REBOL (Relative Expression-Based Object Language - «относительный [или все же «родственный»?], основанный на выражениях объектный язык») был разработан Карлом Сассенратом (Carl Sassenrath), задавшимся целью создать простой язык, очень близкий («родственный») к естественному человеческому, некий диалект (понятно, что речь идет об английском языке). Это скриптовый язык, подобный Perl, Ruby, Tcl, Python, но очень простой и маленький (размер дистрибутива составляет около 250 Кбайт для REBOL/Core и около 400 Кбайт для REBOL/View). Особенностью языка является ориентация на Интернет, поэтому не должно удивлять, что в REBOL встроена поддержка сетевых протоколов HTTP, FTP, SMTP, NNTP, POP3 (то есть не нужны никакие расширения, модули или библиотеки), и, например, операция чтения read может в качестве аргумента получить и имя файла на локальном диске, и URL. Это позволяет загрузить и сохранить HTML-страницу или послать письмо, написав буквально одну строчку кода. Другая особенность REBOL - его интерпретатор работает уже под двадцатью операционными системами на сорока двух платформах без изменения исходников, что позволяет говорить о его платформонезависимости (подобно Java). Все это дает право разработчикам из фирмы REBOL Technologies называть язык средством распределенных коммуникаций (distributed communications), позволяющим не только обмениваться файлами и сообщениями между различными системами (компьютерами), но и обеспечивающим взаимодействие между человеком и компьютером.
Рис.1. Слева внизу - панель REBOL/View, его файловый менеджер (доступ осуществляется к серверу REBOL Technologies, но файлы кэшируются, поэтому к скриптам можно обращаться off-line). Вверху - примеры программ для настройки отображения шрифтов и настройки параметров вывода изображения. Клетчатый шарик на переднем плане на самом деле летает и вращается. |
Основы
Прежде чем приступить к небольшому введению в основы языка, опишу процесс установки интерпретатора. С сайта REBOL Technologies скачивается zip-файл и разворачивается в каком-нибудь каталоге. Несколько секунд и все. REBOL к работе готов!
В приведенных ниже примерах символ >> - это приглашение интерпретатора, а после == выдается результат вычисления. Так происходит только в режиме «командной строки». Если записать выражения в файл (в начале которого помещается описательный блок REBOL […]) с расширением r, то получается скрипт REBOL, который из интерпретатора запускается на исполнение командой do. При исполнении скрипта результаты вычисления не выводятся, и, чтобы что-то увидеть, нужно использовать операцию print. Обращаю внимание - пробелы в выражениях существенны.
Интерпретатор REBOL вычисляет выражения. На первый взгляд - это простейший калькулятор, не правда ли?
>> 2 + 2
== 4
Если говорить об арифметических выражениях, то они имеют странную особенность - приоритет у операций слева направо:
>> 2 + 2 * 3
== 12
Немного непривычно, но можно использовать скобки, и тогда все становится на свое место:
>> 2 + (2 * 3)
== 8
Посмотрим, что получается, если калькулятор немного усовершенствовать. Следующий шаг - можно объявить переменную и присвоить ей значение:
>> x: 2
== 2
>> type? x
== integer!
Во время присвоения значения переменная помимо собственно значения наделяется типом. И типов этих в языке много, вот только некоторые из них: integer (целое), decimal (действительное), time (время), date (дата), money (деньги), logic (булева логика, да/нет), char (символ), string (строка), email (адрес e-mail), file (имя файла), url, block (блок), list (список), tag (тег), word (слово). Для явного преобразований типа применяются специальные операторы.
Тип word - особый тип, это символ, ссылка на переменную. Он позволяет организовать нечто очень похожее на указатель. Оператор do осуществляет разыменование (аналог rvalue *px из C/C++), а оператор set позволяет изменить значение x (аналог lvalue *px).
>> x: 2
== 2
>> px: ‘x
== x
>> type? px
== word!
>> do px
== 2
>> set px 3
== 3
>> x
== 3
Следующий важный тип - блок, и задается он как перечисление чего-нибудь внутри квадратных скобок. y/2 - это не деление, а получение значения второго элемента, 2 - это индекс! Следующий шаг - мы фактически описали процедуру z и исполнили ее! Третий шаг - не что иное, как цикл по значениям из списка, где i используется как переменная цикла, а в теле цикла используется конструкция either, эквивалентная устаревшей конструкции if/else (условие) [действие1] [действие2]. Если второе действие не требуется, то используется условный оператор if.
>> y: [ 1 2 3 ]
== [ 1 2 3]
>> y/2 ; обращение ко второму элементу
== 2
>> z: [ print y ] ; содержимое квадратных скобок не вычисляется
== [print y]
>> do z ; а вот теперь вычисляется
== 1 2 3
>> foreach i x [ either (i == 2) [ print «Hi!» ] [ print i ] ]
1
Hi!
3
На самом деле управляющих конструкций в REBOL много. Например, цикл можно организовать с помощью until, while, loop, for, а выбор из альтернатив - с помощью switch.
Объекты в REBOL тоже есть, не зря же это объектный язык, и создаются они с помощью make. Объекты могут включать в себя переменные, функции, другие объекты. В нижеприведенном примере exobj2 - потомок exobj1, изменяющий значение var1 и дополняющий его переменной var3 и функцией calc; это не что иное, как наследование. Доступ к составляющим объекта осуществляется указанием пути.
exobj1: make object! [
var1: 10
var2: now/time
]
exobj2: make exobj1 [
var1: 30
var3: now/time
calc: func [value] [ var1: value + 10 ]
]
print exobj2/var2 ; доступ к переменной объекта
print exobj2/calc 2 ; вызов метода объекта
exobj3: make exobj2 [] ; создание экземпляра
Вот примеры взаимодействия с Интернетом.
Запуск скрипта, хранящегося на Web-сайте (этот пример позволяет загрузить файл с руководством по языку REBOL):
do http://www.rebol.com/users-guide.r
или скрипта, хранящегося на ftp-сервере:
do ftp://www.somewhere-on-the-web.com/hello.r
А вот так можно прочитать из Интернета страницу и сохранить ее на диске, % - это префикс типа file:
page: read http://www.computerra.ru
write %kthome.html page
или даже короче
write %kthome.html read http://www.computerra.ru
Картинки страница за собой не потащит, но можно написать скрипт, который читает саму страницу, разбирает ее текст в поисках URL картинок (ориентируясь на тег <img>) и сохраняет их вместе со страницей.
А вот так можно послать простенькое письмо (чтобы это сработало, нужно правильно настроить параметры в user.r), только не злоупотребляйте примером, а то я взвою:
send teleman@elnet.msk.ru «Hello!»
Не правда ли, просто? Конечно, это только самые основы. С сайта можно скачать прекрасное руководство пользователя объемом почти 600 страниц в формате PDF, и, изучив язык, даже новички смогут творить чудеса.
Ой, Вань, гляди-ка - попугайчики!
Может показаться, что REBOL - нечто спартанское, но это не совсем так. Особенность языка - в возможности создавать свои собственные «диалекты», подъязыки специального назначения (и в этом смысле REBOL/View - пример такого диалекта). На том же сайте можно скачать экспериментальную версию REBOL/View примерно того же размера, что и REBOL/Core. Что это за зверь? Это все тот же REBOL, но дополненный графическими возможностями: расширениями, которые позволяют создавать приложеньица с окнами (диалогами), кнопками, рисунками, полями ввода и т. д. При этом REBOL превращается в язык создания вполне полноценных графических приложений. Чтобы почувствовать вкус и богатство его возможностей, взгляните на скриншоты.
Единственный существенный недостаток REBOL/View - пока доступна лишь экспериментальная версия. Поэтому через некоторое время он перестает запускаться, и приходится скачивать его заново.
Рис. 2. Примеры программ для градиентной закраски, реализации кнопочек и визуальных эффектов. Это лишь малая часть того арсенала средств, которые можно использовать при создании собственных приложений. Ведь все эти программы - скрипты, написанные на REBOL. |
Тем, кто любит погорячее
Интерпретатор REBOL/Core и экспериментальную версию REBOL/View можно скачать бесплатно. Есть и более мощный интерпретатор - REBOL/Command, но за него уже придется заплатить. Он включает такие возможности, как доступ к внешним библиотекам (DLL), запуск программ (и скриптов) операционной системы, доступ к базам данных через ODBC. В стадии разработки находится REBOL/Apache - модуль для http-сервера Apache, что облегчит использование REBOL для написания CGI-скриптов. Кроме того, предлагаются решения на основе REBOL (REBOL/Express, REBOLink, REBOL/Serve и REBOL/Author).
Надо сказать, уже стало традицией, что если хороший продукт выпускается не под лицензией GPL, то создается проект, который делает его аналог под GPL. REBOL не стал исключением - в конце сентября заявлено о запуске проекта OSCAR (Open Source Code Aka Rebol), имеющего целью создание клона интерпретатора REBOL.
[i37638]