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

Завиток Интернета

Архив
автор : Юрий Кулешов   20.11.2001

Остановившийся на достигнутом - заживо мертвец. Вероятно, именно этим положением руководствовались сотрудники известной в околоинтернетовских кругах компания Curl, разрабатывая новый язык программирования. Основал компанию Тим Бернерс-Ли - знаменитый создатель HTML. Немного найдется людей, которые после изобретения такой эпохальной вещи пошли бы дальше…

Остановившийся на достигнутом - заживо мертвец. Вероятно, именно этим положением руководствовались сотрудники известной в околоинтернетовских кругах компания Curl, разрабатывая новый язык программирования (тоже названный Curl, по-английски - завиток). Основал компанию Тим Бернерс-Ли - знаменитый создатель HTML. Немного найдется людей, которые после изобретения такой эпохальной вещи пошли бы дальше…

Впечатление

Curl - принципиально новый язык для Web, позволяющий разработчику проделывать вещи, ранее неслыханные или требовавшие невероятной изобретательности в реализации своих идей: на страницах сайта в разделе «Демо» вы можете найти примеры, демонстрирующие распространение волн в упругой среде или наглядно показывающие результаты исследования Интернет-трафика. При сравнительно высокой сложности этих задач время написания программы (а Curl - настоящий, полноценный язык программирования) весьма мало. Разработчики утверждают, что на создание первого примера ушло чуть больше одного рабочего дня. Берусь утверждать, что аналогичных результатов нельзя достичь применением ни одной современной технологии «активизации» содержимого страниц. Даже после краткого знакомства с возможностями, которые предоставляет нынешняя, весьма далекая от финальной версия языка, мало у кого останутся сомнения в прогрессивности и удобстве Curl.

Текущая реализация

Сейчас Curl можно свободно скачать с вышеупомянутого сайта. Комплект «начального уровня» включает в себя «штепсель» для современных браузеров; кроме того, можно загрузить и установить средства и инфраструктуру разработки. Пока имеется только Curl для Windows (сurl-ps-1-6-0-1241-dor-signed.exe), но фирма обещает вскоре выпустить версии для Mac и Linux.

После установки системы целиком становятся доступен интерпретатор сurl-файлов, которые можно запускать и непосредственно, без браузеров, а также «штепсель» для браузеров, средства разработки и обширная документация (рис. 1).

Curl для пользователя

В принципе программы, написанные на Curl, могут выполняться тремя способами: в режиме апплета (applet) в окне браузера, в качестве независимого приложения, работающего вне браузера, или в виде сценария (script), который можно набрать в командной строке ОС. Однако в текущей версии 1.6 поддержки последних двух режимов нет, что легко объяснимо: Curl позиционируется прежде всего как новый язык для Web, и, видимо, поэтому проектировщики решили не распылять свои силы.

Апплет, написанный на Curl, может содержать любые комбинации следующих элементов: форматированный текст, графические файлы, «плоский» исполняемый код (вроде того, что нынче используется в VBScript и JScript) и объектный программный код (со своими классами, иерархиями и прочим). Не желая вводить в читателя заблуждение, скажу, что в отличие от апплетов на Java апплеты Curl не компилируются в P-код, а исполняются, интерпретируясь «на лету». Другими словами, текущая версия Curl - интерпретируемая, и механизм интерпретации, за исключением некоторых деталей (preprocessed Curl source files), не отличается от того, которым пользуются популярные скриптовые движки.

Текст и графика

Curl умеет все, что нужно для работы с текстом: он может отображать текст разными шрифтами и стилями, в чем значительно превосходит доступные ныне средства (dhtml + css); позволяет прекрасно управляться с двумерной графикой, но это, право, такой пустяк по сравнению с тем, что дает Curl проектировщику сложных сцен… Каждый, кто хоть раз создавал свой элемент управления ActiveX для Web, знает, как трудно добиться гладкого, качественного отображения, особенно если графические сцены требуют работы с источниками света и полупрозрачностью. Curl умеет работать с трехмерными сценами, где есть точечные и движущиеся источники света, а также движущиеся камеры. Жаль, что на бумаге невозможно отобразить то, что происходит в демонстрационном окне при выполнении апплетов, но все же посмотрите на несколько кадров, сгенерированных одним из апплетов, и обратите внимание на качество проработки (рис. 2).

Замечу, что размер файла, порождающего эту сцену и управляющего ею, едва превышает 6 Кбайт. (Исходные коды примеров вы найдете в полной версии статьи на сайте «СофтТерры». - Прим. ред.)

Работа с данными

Curl обладает богатыми возможностями для работы с XML-документами, поддерживает SAX (Simple API for XML) 1, что делает его подходящим средством и для разбора/отображения XML-документов в браузере. Обработка происходит в той же единообразной манере, да так, что чтение кода доставляет удовольствие. Посмотрите, как визуализируется следующий XML-документ (рис. 3):

<?xml version=”1.0"?>
<report xmlns=”some location”>
<title>Lockie</title>
<Z>It’s ok</Z>
</report>

Кроме того, в Curl поддерживается работа с файлами и каталогами посредством классов HttpFile, LocalFile, StringFile, LocalDirectory, HttpDirectory, ObjectDirectory. Нетрудно догадаться, для каких видов доступа они используются. К сожалению, язык пока не умеет работать с ftp-файлами и каталогами - вероятно из-за потенциальных проблем, связанных с возможностью применения вредоносных апплетов.

Сеть

Есть в Curl и средства работы с сетью. В частности, он может считывать файлы с сервера. Однако существуют ограничения на использование сетевого взаимодействия: запрещен прием входящих запросов на соединение, при исходящих запросах на соединение введены ограничения на использование некоторых портов TCP и UDP.

И что, спросите вы, Curl может сократить время разработки сайта? «Да», - уверенно отвечу я. Среди всех средств организации представлений для клиента Curl выглядит наиболее внушительно и эффектно. К его достоинствам можно отнести простоту синтаксиса и зрелость заложенных в язык концепций. Curl показывает себя с наилучшей стороны и при решении любых задач, связанных с программированием клиентской части Web-ориентированного ПО. Поддержка графики, мощный математический аппарат языка и скорость работы дают ему большое преимущество перед аналогами.

В то же время вряд ли Curl уготована судьба могильщика HTML, как об этом любят говорить его авторы. Скорее всего, он останется оригинальным, но малоприменимым средством - слишком уж поздно этот язык явился на свет. HTML ныне повсюду, а способов совместить одно с другим я, увы, не вижу.

[i42134]


1 (обратно к тексту) - Подробнее см. www.megginson.com/SAX.

Каждая переменная внутри программы на Curl связана с определенным типом данных. Предлагается большое количество встроенных, «примитивных» типов данных, а также все средства для конструирования классов и их применения.

Целочисленные типы

К целочисленным типам в Curl относят следующие: int, int8, int16, int32, int64, uint8, uint16, byte. Каждая объявленная переменная автоматически инициализируется в ноль. Если значение превышает верхнюю либо нижнюю границу, происходит «заворачивание», как и в большинстве современных языков программирования.

Числа
с плавающей точкой

Таких типов всего два: float и double. Они отличаются размерностью (32 и 64 бита, соответственно), имея при инициализации по умолчанию значение 0.0.

В том случае, когда для числа с плавающей точкой не указан суффикс, оно считается относщимся к типу double. Чтобы указать, что некоторое число имеет тип float, нужно использовать суффикс f.

Примечательно, что в Curl существует такое понятие, как бесконечность, причем бесконечности бывают и положительные, и отрицательные (+Ґ, -Ґ):

{value (1.0 / 0.0) == <infinity>} || true

Логические типы

Таковой только один: bool. Занимает 1 бит.

Символы

Размер одного символа в Curl - 16 бит, значение по умолчанию \u0000.

Величины

Похоже, авторы языка стремились охватить все возможные варианты применения Curl и в порыве энтузиазма додумались до такой вещи, как специальный тип для физических и математических величин. К встроенным относят Acceleration, Angle, Area, Distance, Fraction и многие другие. Их внутреннее представление - число в формате double или float, однако внешне это совершенно разные вещи, и вычесть из расстояния скорость у вас не получится. Существует возможность расширять список «предопределенных» значений, используя type-of.

Классы

Как и абсолютное большинство современных языков программирования, Curl предоставляет все средства для комфортной работы с классами. В поставке есть некоторое количество встроенных классов: для строк, массивов, множеств и хэш-таблиц. Поскольку класс также является типом данных, то для экземпляров этого типа существует значение по умолчанию - null.

Ничего нового в смысле классов Curl не открывает, однако в нем есть все, к чему привыкли (и от чего с приходом .NET будут понемногу отвыкать) программисты на C++: классы поддерживают множественное наследование, существует поддержка абстрактных и параметризованных классов. Все прочее, касающееся функций доступа и модификаторов, доведено до совершенства.

Модификаторы, управляющие использованием класса, бывают четырех видов:

  • abstract, сообщающий пользователю, что класс - абстрактный;

  • final, запрещающий наследование от класса с таким модификатором;

  • sealed - только подклассы в «домашнем пакете» класса с таким модификатором могут наследовать от него. Правда, существует лазейка, позволяющая наследовать от класса с таким модификатором и за пределом «домашнего пакета»;

  • shared - аналог виртуального класса в C++.

Все понятия выражены в синтаксисе, например:

{define-class public Mule {inherits Horse, Donkey}

|| описания

}

Замечу, что в Curl существует специальный абстрактный класс Object, от которого неявно порождаются все классы этого языка. Таким образом, всякая иерархия в Curl имеет лишь один корень.

Процедуры

В Curl вполне возможно и программирование с применением обычного процедурного подхода, для чего используется ключевое слово define-proc. Процедуры в Curl очень похожи на процедуры в других языках, но есть и отличия: во-первых, процедуры в Curl являются типом данных, а во-вторых, существует понятие анонимной процедуры.

Прочее

В Curl присутствуют и такие элементы, как исключения, потоки (правда, не реализованные в текущей версии), сборщик мусора (как в .NET’s CLR) и locales.

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