Компания Google представила новый язык web-программирования Dart
10 октября 2011 года
Компания Google анонсировала новый язык структурированного программирования для Web - Dart, который в долгосрочной перспективе позиционируется как более прогрессивная замена для языка JavaScript, решающая все имеющиеся в настоящее время проблемы с расширяемостью, производительностью и поддержкой разработки сложных приложений. Код нового языка доступен для свободной загрузки и распространяется под лицензией BSD. Кроме достаточно обширной стандартной библиотеки и интерфейсной библиотеки DOM, для Dart поставляется набор инструментов для компиляции, запуска кода в виртуальной машине, проверки кода и отладки.
Язык имеет достаточно привычный синтаксис (похож на Java и Си) и обладает нестрогой типизацией (не обязательно явно определять типы). Dart может использовать как для создания серверных, так и для клиентских приложений. Для запуска внутри браузера код на языке Dart может быть преобразован в JavaScript-представление (пока поддерживаются только браузеры Chrome, Safari 5+ и Firefox 4+) или запущен напрямую под управлением специального JavaScript-интерпретатора Dartboard. На стороне сервера приложение на языке Dart может быть выполнено внутри специальной виртуальной машины, которая обеспечивает производительность выполнения близкую к компилируемым в машинный код языкам. Виртуальную машину Dart планируется интегрировать в будущие версии браузера Chrome, что позволит выполнять приложения на языке Dart без компиляции в JavaScript. Дополнительно поддерживается (Архивная копия от 2 ноября 2013 на Wayback Machine) встраивание 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.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.