Компания Google представила новый язык web-программирования Dart

Компания Google анонсировала новый язык структурированного программирования для Web - Dart, который в долгосрочной перспективе позиционируется как более прогрессивная замена для языка JavaScript, решающая все имеющиеся в настоящее время проблемы с расширяемостью, производительностью и поддержкой разработки сложных приложений. Код нового языка доступен для свободной загрузки и распространяется под лицензией BSD. Кроме достаточно обширной стандартной библиотеки и интерфейсной библиотеки DOM, для Dart поставляется набор инструментов для компиляции, запуска кода в виртуальной машине, проверки кода и отладки.
Язык имеет достаточно привычный синтаксис (похож на Java и Си) и обладает нестрогой типизацией (не обязательно явно определять типы). Dart может использовать как для создания серверных, так и для клиентских приложений. Для запуска внутри браузера код на языке Dart может быть преобразован в JavaScript-представление (пока поддерживаются только браузеры Chrome, Safari 5+ и Firefox 4+) или запущен напрямую под управлением специального JavaScript-интерпретатора Dartboard. На стороне сервера приложение на языке Dart может быть выполнено внутри специальной виртуальной машины, которая обеспечивает производительность выполнения близкую к компилируемым в машинный код языкам. Виртуальную машину Dart планируется интегрировать в будущие версии браузера Chrome, что позволит выполнять приложения на языке Dart без компиляции в JavaScript. Дополнительно поддерживается встраивание Dart-кода в HTML, используя mime-тип "application/dart".
Язык подходит как для разработки одним программистом небольших скриптов без жесткой структуры, так и для создания высоко масштабируемых больших модульных проектов, поддерживаемых большим коллективом и требующих более явной типизации для того чтобы избежать неразберихи и ошибок. При этом явное задание типов не обязательно, например, можно начать разработку без указания типов, а в дальнейшем при необходимости добавить их (например, изначально написать "var x", а потом заменить на "num x"). Из поддерживаемых типов отмечаются различныхе виды хэшей, массивов и списков, очереди, числовые и строковые типы, типы для определения даты и времени, регулярные выражения (RegExp). Возможно создание своих типов.
Код Dart всегда выполняется только в рамках одного потока, для организации параллельного выполнения предлагается использовать классы с атрибутом isolate. Код, определенный в блоке isolate, выполняется полностью в изолированном пространстве в отдельной области памяти, взаимодействуя с основным процессом через отправку сообщений. В каждом скрипте используется собственное пространство имён, для использования внешних объектов, функций или переменных следует их явно импортировать при помощи конструкции "import". Все переменные по умолчанию действуют только в пределах текущего скрипта и не экспортируются глобально.
При проектировании языка преследовались следующие цели:

  • Структурированный, но гибкий язык для создания web-приложений;
  • Привычный и естественный для программистов, простой для изучения (кстати говоря, это отлично удалось, посмотрев примеры, возникает впечатление, что язык давно знаком);
  • Обеспечивающий быстрый запуск и высокую производительность для всех современных web-браузеров и различных типов окружений, от портативных устройств до мощных серверов.

Ключевые особенности:

  • Возможность определения классов и интерфейсов, позволяющих использовать инкапсуляцию и повторно использовать существующие методы и данные;
  • Необязательное указание типов, использовать или нет статические типы решает разработчик. Указание типов позволяет упростить отладку и выявление ошибок, делает код более ясным и читаемым;
  • Поддержка использования готовых и создания своих библиотек. Сторонние реализации фунуций могут подключаться в виде разделяемых библиотек;
  • Набор готовых инструментов для поддержки разработки на языке Dart, включая реализацию средств динамической разработки и отладки с исправлением кода на лету ("edit-and-continue").

Проблемы web-разработки, которые решены в Dart:

  • Небольшие скрипты, часто используемые в больших web-приложениях в неструктурированном виде, трудно поддерживать и отлаживать. Монолитные приложения проблематично разбить на части и поручить разработку каждой из частей отдельной команде программистов. Чем больше становится web-приложение, тем труднее его развивать и поддерживать;
  • Скриптовые языки популярны в основном в силу своей легковесной натуры и возможности очень быстро создать работающий код. Ценой такого подхода является проблема с восприятием логики работы по структуре самого кода, что требует написания комментариев для некоторых вещей, очевидных в строго типизированных языках. В итоге, сторонним разработчикам трудно разобраться с чужим кодом, обеспечить его поддержку и доработку;
  • Для существующих языков разработчик вынужден выбирать либо языки со статической типизацией, либо с динамической. Традиционные языки со статической типизацией требуют использования тяжелого инструментария и жесткого соблюдения стиля кодирования, из-за чего программист может чувствовать себя слишком ограниченным, а язык ощущаться как лишенный гибкости;
  • Разработчики не могли создавать однородные системы, охватывающие как клиентскую, так и серверную часть. Исключение составляют разве что Node.js и Google Web Toolkit (GWT);
  • Использование различных языков и форматов в проекте влечет за собой переключение контекста, что усложняет процесс кодирования и делает его громоздким.

Язык разработан при участии двух известных экспертов: Гилада Брача (Gilad Bracha), автора объектно-ориентированного функционального языка программирования Newspeak, и разработчика (в соавторстве с Джеймсом Гослингом и Билом Джоем) второй и третьей редакции спецификаций на язык Java, и Ларса Бака (Lars Bak), одного из основоположников использования виртуальных машин, руководившего разработкой виртуальных машин HotSpot и Java ME, а также возглавляющего разработку JavaScript-движка V8.



Яндекс.Метрика
Счётчик ТЦ#65533;Ц LiveRSS: Каталог русскоязычных RSS-каналов