За воодушевляющим началом


С Dart 2 мы значительно усилили и упростили систему типов, очистили синтаксис и переписали большую часть инструментария с нуля

Следует только описание необязательных new и const. Неужели не нашлось большего числа интересных фич, достойных упоминания?

Я так думаю Anders не хотел раздувать анонс, потому что про ту же систему типов можно написать очень много

В результате получился анонс, от которого останется только пара предложений, если выжать всю воду.


Ну, ждем следующих постов с более подробным обзором фич второй версии.

В 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.

Спасибо! С таким списком намного понятнее.

  1. Когда запилят eval? Ведь существуют не только мобильные приложения и фротенды. Так, из-за этого отсутствует вменяемый repl в Dart SDK.
  2. Добавят ли возможность ждать завершения выполнения async кода в sync функциях? Особенно полезно в небольших CLI утилитах.
  3. В stagehand не хватает шаблона бекенд+фронтенд, который идеально подходит для небольших приложений.

Это всё, чего мне не хватает в Dart.

eval как раз выпиливают усиленно из за проблем с безопасностью и с невозможностью автоматизации проверок

Но ведь можно оставить только в Dart VM. Тогда шанс инъекции будет ниже. А если добавить bind (как в sqlite) или setcontext (как в lua), то проблем с безопасностью станет ещё меньше

Возможно mraleph лучше ответит

Когда запилят 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.

Вот в том-то и дело, что Dart 1 никогда и не был задизайнен, как статически типизированный язык. Все странности языка перестают быть странностями, если это знать и воспринимать его именно таким образом.

Что имеется в виду под "решетка типов"?

Решетка (lattice) — это такая алгебраическая структура.

Интересно было узнать, что язык развивается. Писал на нём 4 года назад дипломный проект и сильно верил в его победу над JavaScript. Ох уж эта наивность… То что начали избавляться от визуального шума (new, const), это хорошо. Если бы ещё точку с запятой убрали так вообще сказка :)
Победу как?
В браузерах JS и поменять миллиарды браузеров в мире невозможно и за 10 лет.
Так Dart VM же для браузера есть. Если бы решились вставить его в Chrome, то уже больше половины аудитории имело бы Dart VM на борту. Для остальных компиляция в JavaScript
Так Dart VM же для браузера есть.

Для одного? В экспериментальной версии?
Если бы решились вставить его в Chrome, то уже больше половины аудитории имело бы Dart VM на борту.

Ошибаетесь. В мире огромное количество необновляемых устойств.
Хотя бы взять старые Андроиды, где люди пользуются штатным браузером и ничего вручную не ставят нового. Понимаю, что вам как ИТ-шнику это кажется диким.
Но 95% пользователей в мире — это «домохозяйки» по отношению к ИТ-шным технологиям. Они могут быть крутыми врачами или там журналистами — но вовсе не являются «продвинутыми» пользователями.
Да, эти устройства совсем недавно исчезли из магазинов. Но вы что считаете — их покупатели уже выкинули что ли?
Причем ситуация усугубляется тем, что это как правило дешевые модели, то есть их продано гораздо больше чем топ-смартфонов. Традиционно свежие ОС придерживаются для топ-смартфонов.
Китайцы же вообще не обновляют своих телефонов в массе.
Для остальных компиляция в JavaScript

Ну вот вы лично согласны поддерживать сейчас IE6?
Нет же?
Аналогично было бы и с Dart VM.

Если бы было все просто — то JS давным давно был бы заменен на что то более удобноваримое. Еще за много лет до появления Dart.
А это не удалось даже MS в эпохи рассвета их браузера.
С другой стороны, в те времена не было ничего подобного современной экосистеме JS. Сейчас очень часто достаточно указать целевые браузеры и исходный код, который может быть.де-факто уникальным для проекта языком, собранным по кусочкам из разных языков, предложений и уникальных плагинов. И больше ничего делать не нужно, экосистема позаботится.
когда релиз то dart 2 — где нибудь выкладывались примерные даты?

К сожалению нет. Есть надежды на конец Q3, но это всё вилами по воде

В дополнение к комментарию от bunopus: https://github.com/dart-lang/sdk/milestones

Только полноправные пользователи могут оставлять комментарии.
Войдите, пожалуйста.