Почему язык Dart не имеет будущего

Давайте сначала рассмотрим особенности языка

Классы и интерфейсы

На первый взгляд Dart похож на Java. Синтаксис очень похож: обращение к методам через точку, фигурные скобки, точка с запятой, функция main(). Запрещено множественное наследование, есть интерфейсы. Отдельная глава посвящена фабрикам (такое впечатление, что возвращается 97-й год). Введение паттернов на уровне синтаксиса языка - это все-таки плохо. Почему-то другие более современные паттерны не введены.

Слабая типизация

В спецификации зыка сказано, что программы могут быть проверены перед выполнением, но ошибки проверки не прерывают компиляцию и не блокируют запуск. Другими словами - это не фича языка, а просто помощь разработчику типа jsLint для javascript.
Отсутствие жесткой проверки типов означает, что невозможно будет оптимизировать программу на этапе компиляции. И зачем тогда нужны интерфейсы, которые имеет смысл использовать только в языках строгой типизации?

Booleans

Очень странно, что для булевского типа только одна константа: true. Все остальное считается false. Это означает, что 1=false и нет неявного преобразования к boolean. Вы должны писать if (1=1) вместо if(1). Довольно неудобно. Вдобавок они придумали перегрузку оператора ==. Так что иногда a==a может вернуть false.

Преобразование типов

В языке нет неявного преобразования между типами numeric, string и boolean. Целые и дробные являются разными типами. Для преобразования в строки есть такой способ: int foo = 42; String bar = "${foo)";.  Различие между строками и числами позволяет использовать оператор + для складывания и конкатенации. Однако, без строгой типизации это не выглядит блестящей идеей.

Исключения

В языке есть множество классов-исключений, определенных на уровне ядра. Похоже создатели языка так и не научились на опыте java, что исключения кидаются для исключительных событий, а не для возвращения результата.

Изоляция и потоковая модель

В спецификации говорится, что код выполняется всегда в одном потоке. Аналогичный подход используется сейчас и javascript. В этом есть свои плюсы, но для нового языка необходимо уже иметь многопоточную модель. Современные веб-приложения уже довольно сложны и часто требуют выполнения параллельных действий. Новый язык мог бы предложить встроенную многопоточную модель вместо того, чтобы придумывать костыли, которые есть сейчас в javascript.

Области видимости

Dart предлагает нам использовать пространства имен в отличие от javascript. Когда вы импортируете библиотеку, вы можете определить для нее пространство имен (или префикс). Это достаточно удобное нововведение. Также можно определять приватные имена, начиная их подчеркивания.

Заключение

Похоже разработчики не научились ничему из возрождения в последние годы динамических языков, ничего не взяли из функционального программирования, а также нет ничего, чтобы решало проблемы параллелизма. Вместо Dart я бы лучше смотрел в сторону Node.js и Coffeescript, на фоне которых Dart смотрится довольно отстало.

Подготовлено на основе заметок одного любителя перла.

Комментарии