Компания Google анонсировала [4] новый язык структурированного программирования для Web - Dart [5], который в долгосрочной перспективе позиционируется [6] как более прогрессивная замена для языка JavaScript, решающая все имеющиеся в настоящее время проблемы с расширяемостью, производительностью и поддержкой разработки сложных приложений. Код нового языка доступен [7] для свободной загрузки и распространяется под лицензией BSD. Кроме достаточно обширной стандартной библиотеки [8] и интерфейсной библиотеки DOM, для Dart поставляется набор инструментов для компиляции, запуска кода в виртуальной машине, проверки кода и отладки.
Язык имеет достаточно привычный синтаксис (похож на Java и Си) и обладает нестрогой типизацией (не обязательно явно определять типы). Dart может использовать как для создания серверных, так и для клиентских приложений. Для запуска внутри браузера код на языке Dart может быть преобразован в JavaScript-представление (пока поддерживаются только браузеры Chrome, Safari 5+ и Firefox 4+) или запущен напрямую под управлением специального JavaScript-интерпретатора Dartboard. На стороне сервера приложение на языке Dart может быть выполнено внутри специальной виртуальной машины, которая обеспечивает производительность выполнения близкую к компилируемым в машинный код языкам. Виртуальную машину Dart планируется интегрировать в будущие версии браузера Chrome, что позволит выполнять приложения на языке Dart без компиляции в JavaScript. Дополнительно поддерживается [9] встраивание Dart-кода в HTML, используя mime-тип "application/dart".
Язык подходит как для разработки одним программистом небольших скриптов без жесткой структуры, так и для создания высоко масштабируемых больших модульных проектов, поддерживаемых большим коллективом и требующих более явной типизации для того чтобы избежать неразберихи и ошибок. При этом явное задание типов не обязательно, например, можно начать разработку без указания типов, а в дальнейшем при необходимости добавить их (например, изначально написать "var x", а потом заменить на "num x"). Из поддерживаемых типов отмечаются [8] различныхе виды хэшей, массивов и списков, очереди, числовые и строковые типы, типы для определения даты и времени, регулярные выражения (RegExp). Возможно создание своих [10] типов.
Код Dart всегда выполняется только в рамках одного потока, для организации параллельного выполнения предлагается использовать классы с атрибутом isolate. Код, определенный в блоке isolate, выполняется полностью в изолированном пространстве в отдельной области памяти, взаимодействуя с основным процессом через отправку сообщений. В каждом скрипте используется собственное пространство имён, для использования внешних объектов, функций или переменных следует их явно импортировать при помощи конструкции "import". Все переменные по умолчанию действуют только в пределах текущего скрипта и не экспортируются глобально.
При проектировании языка преследовались следующие цели:
Ключевые особенности:
Проблемы web-разработки, которые решены в Dart:
Язык разработан при участии двух известных экспертов: Гилада Брача (Gilad Bracha [12]), автора объектно-ориентированного функционального языка программирования Newspeak [13], и разработчика (в соавторстве с Джеймсом Гослингом и Билом Джоем) второй и третьей редакции спецификаций на язык Java, и Ларса Бака (Lars Bak [14]), одного из основоположников использования виртуальных машин, руководившего разработкой виртуальных машин HotSpot и Java ME, а также возглавляющего разработку JavaScript-движка V8.
Ссылки:
[1] http://htfl.ru/cat-news-google
[2] http://htfl.ru/cat-news-novosti
[3] http://htfl.ru/cat-news-yazyki-programirovaniya
[4] /out.php?link=http://googlecode.blogspot.com/2011/10/dart-language-for-structured-web.html
[5] /out.php?link=http://www.dartlang.org
[6] http://htfl.ru/news/v-dolgosrochnoi-perspektive-google-rassmatrivaet-yazyk-dart-kak-zamenu-javascript
[7] /out.php?link=https://code.google.com/p/dart/wiki/GettingTheSource
[8] /out.php?link=http://www.dartlang.org/docs/api/index.html
[9] /out.php?link=http://www.dartlang.org/articles/embedding-in-html/
[10] /out.php?link=http://www.dartlang.org/articles/optional-types/
[11] /out.php?link=http://www.dartlang.org/samples/index.html
[12] /out.php?link=http://en.wikipedia.org/wiki/Gilad_Bracha
[13] /out.php?link=http://newspeaklanguage.org/
[14] /out.php?link=http://en.wikipedia.org/wiki/Lars_Bak_%28computer_programmer%29