Comments 27
За воодушевляющим началом
С Dart 2 мы значительно усилили и упростили систему типов, очистили синтаксис и переписали большую часть инструментария с нуля
Следует только описание необязательных new и const. Неужели не нашлось большего числа интересных фич, достойных упоминания?
В Dart 2 состоит из следующих компонентов:
- серьезно переработанная система типов (strong mode, которая включает в себя generic methods, локальный вывод типов, изменения в семантике
dynamic
иvoid
); int
больше не является целым числом произвольного размера (aka bigint), а ограничен 64-битами;- мелкие изменения в языке (optional new/const, async functions start synchronously);
- большое число новых методов в core библиотеках (см CHANGELOG.md);
- важное инфраструктурное изменение: введение Общего Фронтенда и Kernel, унифицированного формата представления и сериализации Dart AST — все тулы будут использовать один и тот же парсер Dart написанный на Dartе, даже VM.
- Когда запилят eval? Ведь существуют не только мобильные приложения и фротенды. Так, из-за этого отсутствует вменяемый repl в Dart SDK.
- Добавят ли возможность ждать завершения выполнения async кода в sync функциях? Особенно полезно в небольших CLI утилитах.
- В stagehand не хватает шаблона бекенд+фронтенд, который идеально подходит для небольших приложений.
Это всё, чего мне не хватает в Dart.
Когда запилят eval? Ведь существуют не только мобильные приложения и фротенды. Так, из-за этого отсутствует вменяемый repl в Dart SDK.
eval
можно через service протокол делать. Есть сторонние прототипы replов на основе этого.
Добавят ли возможность ждать завершения выполнения async кода в sync функциях?
По нормальному это добавлять тяжко (по разным техническим причинам), но в 2.0 добавили dart:cli
с методом waitFor
, который синхронно ждет завершения Future
. Я думаю после 2.0 будем смотреть на "многопоточность" и асинхронность в целом более пристально, потому что людям хочется чего-то более вменяемого особенно за пределами браузера.
В stagehand не хватает шаблона бекенд+фронтенд
Можно в stagehand
репе сделать баг на эту тему или там нарисовать PR :)
Однако с Dart 2 этот код выдаст ошибку типизации.
С чего бы вдруг?
PS: А, поэтому? List<int>
Тогда чего это в первой версии ошибки не было?
В Dart 1 ["1", "2"]
имеет тип List<dynamic>
, а List<dynamic>
является подтипом List<int>
. Это было сделано, чтобы можно было легко смешивать полностью динамический и типизированный код. dynamic
был одновременно и top
и bottom
решетки типов, т.е. в коде внизу оба присваивания были валидны и в runtime и в compile time
List<dynamic> a;
List<int> b;
a = <int>[];
b = <dynamic>[];
Очень странное решение. Похоже всем разработчикам языков нужно сначала набить шишки на ковариантности, чтобы её понять и потом прикручивать костыли, чтобы сильно не менять дизайн языка :-)
Решение становится гораздо менее странным, если воспринимать Dart 1, как динамически типизированный язык. Допустим приехал вам JSON [1, 2, 3]
, вообще-то он List<dynamic>
, но вы допустим как-то знаете, что он на самом-то деле List<int>
. В Dart 1 вы его спокойно можете передать куда-нибудь, где ожидают List<int>
. В Dart 2 вам его сначала надо бы преобразовать, например через list.cast<int>()
Тут не касты с динамиками нужны, а рантайм валидация. Зачем делать статически типизированный язык и потом "представлять, что он динамический"? У нас уже есть динамический JS.
Что имеется в виду под "решетка типов"?
Решетка (lattice) — это такая алгебраическая структура.
В браузерах JS и поменять миллиарды браузеров в мире невозможно и за 10 лет.
Так Dart VM же для браузера есть.
Для одного? В экспериментальной версии?
Если бы решились вставить его в Chrome, то уже больше половины аудитории имело бы Dart VM на борту.
Ошибаетесь. В мире огромное количество необновляемых устойств.
Хотя бы взять старые Андроиды, где люди пользуются штатным браузером и ничего вручную не ставят нового. Понимаю, что вам как ИТ-шнику это кажется диким.
Но 95% пользователей в мире — это «домохозяйки» по отношению к ИТ-шным технологиям. Они могут быть крутыми врачами или там журналистами — но вовсе не являются «продвинутыми» пользователями.
Да, эти устройства совсем недавно исчезли из магазинов. Но вы что считаете — их покупатели уже выкинули что ли?
Причем ситуация усугубляется тем, что это как правило дешевые модели, то есть их продано гораздо больше чем топ-смартфонов. Традиционно свежие ОС придерживаются для топ-смартфонов.
Китайцы же вообще не обновляют своих телефонов в массе.
Для остальных компиляция в JavaScript
Ну вот вы лично согласны поддерживать сейчас IE6?
Нет же?
Аналогично было бы и с Dart VM.
Если бы было все просто — то JS давным давно был бы заменен на что то более удобноваримое. Еще за много лет до появления Dart.
А это не удалось даже MS в эпохи рассвета их браузера.
К сожалению нет. Есть надежды на конец Q3, но это всё вилами по воде
В дополнение к комментарию от bunopus: https://github.com/dart-lang/sdk/milestones
Анонс Dart 2.0: Оптимизированный для клиентской разработки