Curl (язык программирования)
Последнее изменение этой страницы: 00:04, 9 июня 2016.
Парадигма | мультипарадигменный объектно-ориентированный |
---|---|
Спроектировано | 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(японский).
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.