) мы объявляем о выпуске Dart 2.2 SDK — обновления Dart 2, обеспечивающего повышенную производительность.
заранее (АОТ) код и поддержка литералов Set.
Улучшение производительности 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 предлагает удобный синтаксис для написания этой инициализации.
Список Дартс можно инициализировать следующим образом:
Раньше Dart поддерживал только буквальный синтаксис для List и Map, поэтому инициализация Set была громоздкой, поскольку нам приходилось инициализировать через список:const List<String> releases = ['Dart 2.0', 'Dart 2.1', 'Dart 2.2'];
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
-
Как Исправить Медленный Компьютер?
19 Oct, 24 -
О Системах Голосования
19 Oct, 24 -
Новый Skype Будет Иметь Звук Cd-Качества
19 Oct, 24 -
Грядущие Изменения В Предоставляемых Услугах
19 Oct, 24 -
Еще Одно Объяснение Нынешнего
19 Oct, 24