Curl (язык программирования)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:04, 9 июня 2016.
Curl
fraimed
Парадигма мультипарадигменный объектно-ориентированный
Спроектировано Steve Ward, Curl, Inc., Sumisho Computer Systems Corp., SCSK Corporation
Печать дисциплины строгая
OS кроссплатформенный
Лицензия бесплатно для некоммерческого использования
Портал: http://www.curl.com
Диалект
нет

Curl — (произносится [ kɜːl ])рефлексивный объектно-ориентированный язык программирования, созданный для написания интерактивных веб-приложений. Он объединяет в себе возможности разметки текста (как у HTML), написание скриптов (как JavaScript), а также достаточно мощный вычислительный механизм (как у Java, C# и C++), причем все это внутри одного унифицированного фреймворка. Язык используется главным образом для решений внутрикорпоративных задач, B2B- и B2C-приложений.

История

Язык программирования Curl - разработан Curl Corporation (http://www.curl.com), основанной 12 сотрудниками MIT в Кембридже в 1998 году. Язык разрабатывался специально для применения в Интернете и в частности в World Wide Web. Разработка проводилась при финансировании и участии Массачусетского Технологического Института (Massachusetts Institute of Technology (MIT)). Curl Corporation "за разработку программного языка нового поколения для компьютеров и коммуникаций" получила гранд, учрежденный World Wide Web Consortium (W3C). По утверждению администрации компании, технология Curl универсальна и обеспечивает явные преимущества, как для конечных пользователей, так и для разработчиков и интернет-провайдеров. Первая коммерческая версия языка увидела свет весной 2001 г. - спустя ровно шесть лет после появления Java.

Curl в переводе с английского означает «локон, завиток». Такое название было выбрано по той причине, что конструкции языка заключаются в фигурные (по-английски «кудрявые - curly») скобки.

Описание

Язык Curl ориентирован одновременно на программирование и на формирование информационного продукта (content). В Curl любой символ, не заключенный в фигурные скобки, трактуется как обычный текст и непосредственно отображается на экране. Все, что заключено в фигурные скобки, трактуется как выражение на языке Curl. Такие скобки могут быть вложенными. Язык оперирует понятиями значений (скалярные типы, в частности целые и вещественные числа, байты и т.п.) и объектов (ссылки на значения). С точки зрения объектной модели Curl имеет много общего с языком Java. Принципиальная разница между Curl и Java состоит в том, что Java является языком объектно-ориентированного программирования (ООП), тогда как Curl сочетает в себе ООП с форматированием текстов и созданием сценариев. В отличие от Java язык Curl поддерживает множественное наследование, а также использует параметризованные типы, которые работают аналогично шаблонам языка С++. Curl поддерживает развитые средства макрообработки (часть из них пока только на бумаге), включая выражение include для вставки фрагментов исходного текста. Для языка характерны расширяемый синтаксис и поддержка строгой типизации одновременно с сохранением бездекларированного использования переменных. Как отмечают авторы языка, значительное влияние на проектирование Curl оказали Lisp, С++, Tcl/Tk, TeX и HTML. Генерирование исполняемого кода осуществляется «на лету» с помощью встроенного в специальный подключаемый модуль Surge динамического компилятора (JIT). Инструментальная система Curl и компилятор написаны на самом Curl (поставляются в исходных текстах). Система безопасности строится вокруг разновидности модели песочницы, принятой в Java. Важной особенностью реализации языка является то, что при компиляции учитывается (наследуется) контекст среды (в зависимости от полномочий и установок формируется и соответствующий код). Для хранения информации на компьютере пользователя в Curl предусмотрен механизм хранения долговременных данных (persistent data), гораздо более гибкий, чем известные средства cookie-файлов. А вот обработка исключений, схожая с Java, реализована в несколько ограниченной форме.

Основы языка

Язык Curl сочетает в себе возможности форматирования текста, сходные с использованием тегов HTML, и программную функциональность. Правила форматирования текста могут определяться как в самом документе, так и быть загружены или импортированы из внешних файлов.

Форматирование текста и разметка

Ниже дано описание некоторых операторов языка:

  • {curl 8.0 applet} - определитель языка Curl, который указывает на то, что файл содержит аплет, написанный на API 8.0, который может исполняться на Surge plug-in версии 8.0.
  • || - оператор комментария, данный оператор ставится в начале строки; текст который стоит после него, но до конца строки является комментарием.
  • {title font-family="Font name", font-size=Npt, color="color", text } - оператор описывающий заглавие текста, где font-family - имя шрифта, font-size - размер шрифта, color - цвет текста, text - текст заглавия; определители font-family, font-size и color являются необязательными и если они не описаны, то будут приняты значения текста по умолчанию.
  • {paragraph font-style="style", text} - оператор описывающий параграф текста, где font-style - стиль шрифта, text - текст заглавия. Может использоваться со следующими операторами text, italic, bold, itemize.
  • {heading level = N, font-family="Font name", font-size=Npt, color="color", text } - оператор для описания заголовков, где level - предустановленный тип заголовка, font-family - имя шрифта, font-size - размер шрифта, color - цвет текста, text - текст заглавия.
  • {italic text} - оператор, устанавливающий на текст атрибут курсива.
  • {bold text} - оператор, устанавливающий на текст атрибут увеличенной толщины символов.
  • {text font-style="style" text} - оператор, устанавливающий на текст определенный стиль.
  • {itemize {item text1} {item text2} {item text3}} - оператор, позволяющий отформатировать текст как список.
  • {center object} - оператор, выравнивающий объект по центру документа.
  • {image source={url "image.jpg"}, width=Nin, height=Min} - оператор, включающий в документ файлы с изображениями.
  • {hrule color="color", height=Npt} - оператор, отображающий в документе горизонтальный разделитель.

Типы данных

Каждая переменная внутри программы на 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 не открывает, однако в нем есть все, к чему привыкли программисты на C++: классы поддерживают множественное наследование, существует поддержка абстрактных и параметризованных классов. Все прочее, касающееся функций доступа и модификаторов, доведено до совершенства.Модификаторы, управляющие использованием класса, бывают четырех видов:abstract, сообщающий пользователю, что класс - абстрактный; final, запрещающий наследование от класса с таким модификатором;sealed - только подклассы в «домашнем пакете» класса с таким модификатором могут наследовать от него. Правда, существует лазейка, позволяющая наследовать от класса с таким модификатором и за пределом «домашнего пакета»;shared - аналог виртуального класса в C++.Все понятия выражены в синтаксисе, например:{define-class public Mule {inherits Horse, Donkey} || описания }Кроме того, в Curl существует специальный абстрактный класс Object, от которого неявно порождаются все классы этого языка. Таким образом, всякая иерархия в Curl имеет лишь один корень.
  • Процедуры – в Curl вполне возможно и программирование с применением обычного процедурного подхода, для чего используется ключевое слово define-proc. Процедуры в Curl очень похожи на процедуры в других языках, но есть и отличия: во-первых, процедуры в Curl являются типом данных, а во-вторых, существует понятие анонимной процедуры.

Примеры кода

Форматирование и разметка страницы

Как и в HTML, в Curl можно проектировать графику и текст с разметкой непосредственно в исходном коде:

{curl 8.0 applet}

{set-document-properties
    margin=0.5in,
    background="beige",
    border-width=5pt,
    border-color="blue"
}

{title
    font-family="Times New Roman Bold Italic",
    font-size=24pt,
    color="green",
    Fruit}

{center {image source={url "images/logo.gif"}}}

{paragraph
    {bold font-style="italic", Definition}: Many fruits!! }

{heading
    font-size=14pt,
    color="black",
    Types of Fruits}

|| Second level heading
{heading level = 2,
    {Frame 
		width=100pt,
		height=30pt,
		background="yellow"}
	{EllipseGraphic width=30pt, height=40pt, fill-color="orange"}
}

В начале программы был объявлен специальный оператор {set-document-properties margin=Npt, background={url "image.jpg"}, border-width=Mpt, border-color="color"}, где margin - отступ слева, backgroud - фон документа (вместо файла с изображением как параметр может использоваться и цвет фона), border-width - ширина обрамления документа, border-color - цвет обрамления документа. Далее использовались операторы title, center, image, paragraph и heading, которые были описаны ранее а так же Frame и EllipseGraphic, первый из которых создает отдельную область, а второй рисует эллипс. Результат работы примера:

Объектно–ориентированное программирование

Curl позволяет работать в объектно-ориентированной среде:

{curl 8.0 applet}

{define-class public Foo
	{method public {hello}:void
		{popup-message "Hi!"}
	}
}

{define-class public Bar {inherits Foo}
	{method public {hello}:void
		{popup-message "Hello World!!"}
	}
}

{do
	let foo:Foo = {Foo}
	{foo.hello}	let bar:Foo = {Bar}
	{bar.hello}
}

В начале программы был объявлен класс Foo и его наследник класс Bar {inherits Foo} с переопределенным методом hello. После чего были созданы по одному экземпляру этих классов и у обоих вызван этот метод. Результат работы примера:

Событийное программирование

В Curl есть возможность обрабатывать различные события, например нажатие на кнопку:

{curl 8.0 applet}

{CommandButton
	label = "Push me!",
	{on Action do
		{popup-message
			"Noooo!!"
		}
	}
}

Была объявлена кнопка CommandButton с надписью "Push me!" и обработчик нажатия on Action do внутри которого описывалось всплывающее окно с надписью "Noooo!!". Результат работы примера:

Применение языка

Основная идея создания такого языка заключалась в его универсальности для всех типов браузеров, которые на основе полученного кода могли бы автоматически "подгонять" страницы под формат браузера (self-describing format), чтобы сам язык был компактным, понятным и удобным в использовании. Curl может использоваться как замена HTML для представления форматированного текста, с другой стороны, его возможности охватывают не уступают возможностям компилируемых, строго типизированным объектно-ориентированным системным языкам программирования. Как «украшательства» (HTML-уровень), так и программные конструкции Curl могут быть расширены в пользовательском коде. Таким образом Curl является той средой, которая объединяет вместе все популярные WEB технологии - HTML, CSS, JavaScript - в единое целое и дает возможность удобно работать в единой среде разработки. На данный момент поддержка и разработка Curl ведется в японской корпорации SCSK(японский).

Полезные ссылки