Компания Google представила первую бета-версию проекта Dart, в рамках которого развивается язык структурированного программирования для Web, который в долгосрочной перспективе может стать прогрессивной заменой JavaScript, решающей имеющиеся в настоящее время проблемы с расширяемостью, производительностью и поддержкой разработки сложных приложений.
Язык обладает похожим на Java синтаксисом, не требует явного определения типов и может использоваться для создания серверных и клиентских приложений. Для упрощения разработки на языке Dart поставляется SDK, включающий в себя компилятор dart2js, виртуальную машину Dart VM, пакетный менеджер pub и набор библиотек. Для выполнения и отладки приложений на языке Dart, без компиляции в JavaScript, распространяется Dartium - сборка браузера Chromium с интегрированной виртуальной машиной Dart VM. Дополнительно доступен расширенный пакет Dart Editor, в который помимо SDK и Dartium включена специализированная среда разработки на языке Dart.
Из представленных в новом выпуске изменений отмечается проведение оптимизаций различных компонентов платформы. Обеспечена генерация более компактного JavaScript-кода, для некоторых типов программ удалось добиться сокращения размера до 3.7 раз за счёт реализации техники совместного использования кода, встречающегося в разных классах. Заметно увеличена производительность виртуальной машины, которая по сравнению с прошлым выпуском на 33% быстрее при выполнении теста DeltaBlue и на 40% быстрее в тесте Tracer. Для ускорения работы VM также реализована полноценная поддержка акселерации с использованием инструкций SIMD. Компилятор dart2js демонстрирует прирост производительности на 20% в тесте Richards, на 10% в тесте DeltaBlue, и на 8% в Tracer.
На 20% ускорена работа анализатора кода в редакторе Dart Editor, позволяющего выявлять ошибки и выводить предупреждения по мере кодирования, без необходимости отдельного выполнения unit-тестов. Добавлены новые инструменты рефакторинга для переименования библиотек и преобразования методов в геттеры и наоборот. Расширены средства подсветки синтаксиса. Упрощён процесс развёртывания web-приложений при помощи новой команды "pub deploy", которая создаёт директорию с кодом приложения и связанными с ним ресурсами, и производит подготовку кода для использования с выбранным web-сервером.
Особенности языка Dart:
- Привычный и простой для изучения синтаксис, естественный для программистов на JavaScript, Си и Java.
- Обеспечение быстрого запуска и высокой производительности для всех современных web-браузеров и различных типов окружений, от портативных устройств до мощных серверов;
- Возможность определения классов и интерфейсов, позволяющих использовать инкапсуляцию и повторно использовать существующие методы и данные;
- Необязательное указание типов, использовать или нет статические типы решает разработчик. Указание типов позволяет упростить отладку и выявление ошибок, делает код более ясным и читаемым, упрощает его доработку и анализ сторонними разработчиками.
- Среди поддерживаемых типов: различные виды хэшей, массивов и списков, очереди, числовые и строковые типы, типы для определения даты и времени, регулярные выражения (RegExp). Возможно создание своих типов;
- Для организации параллельного выполнения предлагается использовать классы с атрибутом isolate, код которых выполняется полностью в изолированном пространстве в отдельной области памяти, взаимодействуя с основным процессом через отправку сообщений;
- Поддержка использования библиотек, упрощающих поддержку и отладку больших web-проектов. Сторонние реализации функций могут подключаться в виде разделяемых библиотек. Приложения можно разбить на части и поручить разработку каждой из частей отдельной команде программистов;
- Набор готовых инструментов для поддержки разработки на языке Dart, включая реализацию средств динамической разработки и отладки с исправлением кода на лету ("edit-and-continue");
- Возможность создавать однородные системы, охватывающие как клиентскую, так и серверную часть. Использование одного языка и инструментария для клиентских и серверных компонентов упрощает процесс кодирования и избавляет от постоянной смены контекста.