Свежий номер №47-48 (376-377) / Красные REVOLюционные штаны Сергей Козлов, teleman@elnet.msk.ru 20.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), позволяющим не только обмениваться файлами и сообщениями между различными системами (компьютерами), но и обеспечивающим взаимодействие между человеком и компьютером.
Основы Прежде чем приступить к небольшому введению в основы языка, опишу процесс установки интерпретатора. С сайта 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 - пока доступна лишь экспериментальная версия. Поэтому через некоторое время он перестает запускаться, и приходится скачивать его заново.
Тем, кто любит погорячее Интерпретатор 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]
|