Анонсирован Dart 2.2: Улучшенный Нативный Код, Поддержка Множественных Литералов

Источник [Анонс Dart 2.2: более быстрый собственный код, поддержка заданных литералов] Сегодня (26 февраля 2019 г.

) мы объявляем о выпуске Dart 2.2 SDK — обновления Dart 2, обеспечивающего повышенную производительность.

заранее (АОТ) код и поддержка литералов Set.

Анонсирован Dart 2.2: улучшенный нативный код, поддержка множественных литералов



Улучшение производительности Dart для разработки Flutter

Мы продолжаем нашу работу, чтобы сделать AOT-скомпилированный код , как и приложения Flutter, работают еще быстрее.

В Дартс 2.1 мы сократили расходы для проверки типов, что значительно снижает затраты на проверку типов как для кода, скомпилированного AOT, так и для кода, выполняемого на виртуальной машине с JIT-компиляцией (точно в срок).

В Dart 2.2 мы сосредоточились на производительности кода, скомпилированного с помощью AOT, повышая производительность.

на 11-16% по микробенчмаркам (за счет увеличения размера кода на ~1%).

Это улучшение является результатом нескольких кварталов работы по снижению статических накладных расходов на вызовы.

Наш оптимизированный код AOT теперь может вызывать запрошенный объект напрямую с помощью вызова ПК (т. е.

с помощью Счетчик команд ).

Перед этим нам приходилось несколько раз искать в пуле объектов, чтобы определить нужный адрес.

Эти оптимизации особенно полезны, когда код содержит множество конструкторов и вызовов статических методов, например код пользовательского интерфейса Flutter, содержащий множество виджетов.



Установите буквальную поддержку в Dart 2.2.

Основная библиотека Dart (dart:core) содержит несколько классов коллекций: Карты , Списки , И Наборы .

Карты представляют собой коллекции пар ключ-значение.

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

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

Коллекции Dart обычно инициализируются с помощью констант времени компиляции, и Dart предлагает удобный синтаксис для написания этой инициализации.

Список Дартс можно инициализировать следующим образом:

  
  
  
  
   

const List<String> releases = ['Dart 2.0', 'Dart 2.1', 'Dart 2.2'];

Раньше Dart поддерживал только буквальный синтаксис для List и Map, поэтому инициализация Set была громоздкой, поскольку нам приходилось инициализировать через список:

Set<String> currencies = Set.of(['EUR', 'USD', 'JPY']);

Этот код не просто неуклюж и неэффективен; отсутствие буквальной поддержки предотвращает создание неизменяемого Set во время компиляции.

С добавлением поддержки литералов Set в Dart 2.2 можно инициализировать набор и сделать его неизменяемым, используя новый удобный синтаксис:

const Set<String> currencies = {'EUR', 'USD', 'JPY'};

Вы можете увидеть реальные примеры использования литералов Set с помощью команды Flutter. Здесь .

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



Внедрение инноваций с помощью Dart 2 Common Front-End (CFE)

Dart предлагает несколько реализаций: Dart VM, используемая Flutter, компилятор dart2js и компилятор Dart dev (dartdevc) — все они используют компилятор Common Front-End. Dart Common Front End, или CFE, анализирует код Dart, выполняет вывод типа и переводит Dart на промежуточный язык нижнего уровня, который внутренние компиляторы принимают в качестве входных данных.

Set-литералы — это пример языковой конструкции, которую мы смогли быстро реализовать благодаря CFE. Код для анализа литералов Set и выполнения вывода типа был реализован один раз с использованием CFE для всех реализаций.

Кроме того, мы создали переходную реализацию, которую могли использовать серверные компиляторы на начальном этапе.

В промежуточной реализации изменяемая версия указанных литералов Set была переведена во время компиляции в эквивалентную форму:

Set<String> currencies = Set<String>().

add('EUR').

add('USD').

add('JPY');

Промежуточная реализация константных литералов Set отличается тем, что их нельзя собирать постепенно по частям.

Вместо этого мы реализовали это в виде частного неизменяемого класса Set, который обертывает неизменяемую карту, где элементы Set являются ключами карты:

const Set<String> currencies = _UnmodifiableSet<String>({'EUR': null, 'USD': null, 'JPY': null});

Неизменяемый класс Set реализует методы в интерфейсе Set, делегируя их внутренней карте.

В целом, мы смогли реализовать литералы Set как чисто функцию CFE. Серверная часть может сразу использовать реализацию CFE, а собственную поддержку реализовать позже.

Это позволило серверным компиляторам отложить поддержку до тех пор, пока аспекты производительности этой функции не будут лучше изучены.



Спецификация Дарт 2.2

Dart 2 был таким значительным обновлением Dart. на обновление у нас ушло некоторое время спецификация официального языка чтобы соответствовать всем внесенным нами изменениям.

Мы наконец завершили эту работу и спецификация обновлена до Dart 2.2. Мы также перенесли спецификацию языка в новый репозиторий и добавлена непрерывная интеграция, обеспечивающая постоянное обновление спецификации PDF по мере развития будущих версий языка Dart. Доступны спецификации 2.2 и будущей версии Dart 2.x. на странице спецификации Dart .



Как установить Дарт 2.2

Дартс SDK 2.2 доступно на домашней странице Dart начиная с сегодняшнего дня.

Если вы разработчик Flutter, Dart 2.2 уже включен.

(Примечание: консольная команда «flutter Doctor» сообщит о Dart 2.2 текущим главным каналам Flutter и каналам разработки.

Сегодняшняя стабильная версия Flutter 1.2. выведет Dart 2.1.2; Эта версия имеет те же функции, что и Dart 2.2).

Это все на данный момент. Мы надеемся, что вам понравится Дарт 2.2!


Спасибо большое за помощь в переводе ПсиХаСТе Теги: #Разработка мобильных приложений #программирование #flutter #dart #dartlang #dart 2.0
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.