Архивы: по дате | по разделам | по авторам

Красные REBOLюционные штаны

Архив
автор : Сергей Козлов   26.12.2000

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

В статье «Отблеск зари на жемчужине» («КТ» #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]

© ООО "Компьютерра-Онлайн", 1997-2022
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.