Dart - инновационный язык веб-программирования от Google
Новый структурированный язык для создания веб-приложений анонсирован корпорацией Google. Данный продукт называется Dart. Ожидается, что в долгосрочной перспективе новинка заменит язык JavaScript, в котором на данный момент наблюдаются трудноразрешимые проблемы с поддержкой, производительностью и расширяемостью сложных веб-приложений. Dart позволит избавиться от вышеуказанных сложностей.
При создании Dart команда разработчиков Google ставила следующие цели:
- Структурированный и одновременно с этим гибкий язык веб-программирования.
- Естественный и привычный для web-разработчиков, простой в изучении (следует отметить, данный пункт выполнен на пятерку с плюсом, беглый просмотр примеров вызывает впечатление, что этот язык хорошо знаком).
- Обеспечивающий высокую производительность и быстрый запуск для всех без исключения современных браузеров, а также разнотипных окружений от мощных серверов до портативных устройств.
Код нового языка распространяется согласно лицензии BSD и доступен для загрузки всем желающим. Для Dart поставляется довольно большая стандартная библиотека, DOM (интерфейсная библиотека), а также набор инструментов для запуска и компиляции кода на виртуальной машине, его отладки и проверки.
Синтаксис нового языка вполне привычный и очень похож на Си или Java. Типизация является нестрогой, то есть, разработчику не обязательно явно указывать типы. С помощью Dart можно создавать и клиентские, и серверные программы.
Код, написанный на этом языке, можно запустить внутри браузера напрямую (под управлением Dartboard - специального интерпретатора JavaScript) или путем преобразования в JavaScript-представление. Правда, последнюю возможность пока поддерживают лишь браузеры Firefox 4+, Safari 5+ и Chrome.
На сервере Dart-приложения могут выполняться в рамках специальной виртуальной машины. Она обеспечивает скорость, близкую к производительности программ на языках, компилируемых в машинный код.
Разработчики планируют интегрировать виртуальную машину для Dart в дальнейшие версии Chrome. Это позволит браузеру выполнять приложения без их компиляции в JavaScript. Также поддерживается встраивание фрагментов, написанных на Dart, в код HTML. Это реализуется с помощью mime-типа "application/dart".
Dart подходит для создания и маленьких скриптов с нежесткой структурой, и больших высокомасштабируемых модульных проектов, разрабатываемых целым коллективом веб-программистов, а поэтому требующих явной типизации, которая позволит избежать ошибок и неразберихи. При этом можно начать создание приложения без явного указания типов, и добавлять их по мере необходимости (например, сначала ввести "var x", затем вместо него прописать "num x").
В числе поддерживаемых типов следует отметить различные виды списков, массивов и хэшей, строковые и числовые типы, очереди, RegExp (регулярные выражения), типы для даты и времени. Также можно создавать собственные типы.
Код, написанный на новом языке, всегда выполняется однопоточно. Чтобы организовать параллельное выполнение, необходимо использовать классы со специальным атрибутом isolate. Код, указанный в блоке данного атрибута, будет выполняться в полностью изолированном пространстве, на которое в памяти выделяется отдельная область. С основным процессом такой код взаимодействует посредством отправки сообщений.
Каждый Dart-скрипт имеет свое пространство имен. Чтобы использовать их во внешних функциях, переменных или объектах, необходимо выполнить явный импорт имен посредством конструкции "import". По умолчанию все переменные действуют только в рамках текущего скрипта, глобальный экспорт не выполняется.
Ключевые особенности Dart:
- Возможность определять интерфейсы и классы, позволяющие повторно использовать имеющиеся данные и методы, выполнять инкапсуляцию.
- Неявная типизация. Разработчик сам решает, использовать ли ему статические типы. Но следует помнить, что указание типов упрощает отладку приложения и выявление ошибок, делает код более понятным и читабельным.
- Поддержка готовых библиотек и возможность создания собственных. К своему веб-приложению можно подключать в качестве разделяемых библиотек сторонние реализации функций.
- Наличие готового набора инструментов для разработки приложений на Dart. В их числе доступны средства для динамической разработки, а также откладки кода с исправлением на лету (другими словами edit-and-continue).
Какие проблемы веб-разработки решены в Dart:
- В масштабных веб-приложениях часто используют небольшие скрипты в неструктурированном виде, что затрудняет поддержку и отладку программы. Монолитные приложения трудно разбить на составляющие, чтобы поручить создание каждой из них отдельному программисту. Чем больше программа, тем сложнее ее поддерживать и развивать.
- Популярность скриптовых языков в основном определяется их легкостью и наличием возможности быстро создать работоспособный код. Но чтобы реализовать это, пришлось пожертвовать типизацией и некоторыми другими важными правилами. В результате возникают проблемы с пониманием структуры и логики кода. Необходимо писать комментарии с указанием вещей, которые в строго типизированных языках будут очевидными всем. Поэтому стороннему разработчику сложно обеспечить доработку и поддержку кода, написанного на скриптовом языке другим программистом.
- Разработчик должен выбирать язык либо с динамической типизацией, либо со статической. Традиционные языки из последней группы предусматривают использование сложного инструментария и точное соблюдение стиля кодирования. В итоге язык лишается гибкости, а программист чувствует себя ограниченным.
- Применение в проекте различных форматов и языков вызывает переключение контекста. Это делает громоздким процесс кодирования и значительно усложняет его.
- Веб-программисты не могли ранее разрабатывать однородные системы, которые охватывали бы и серверную, и клиентскую часть. Исключением является разве что GWT (Google Web Toolkit) и Node.js.
В разработке Dart участвовали два знаменитых эксперта: Ларс Бак (один из основоположников применения виртуальных машин, который руководил созданием машин Java ME и HotSpot, сейчас возглавляет разработку V8 - JavaScript-движка) и Гилард Брач (автор функционально объектно-ориентированного языка Newspeak, один из разработчиков 2-й и 3-й спецификаций на Java).