Dart 2.2 annoncé: code machine plus efficace, prise en charge des littéraux définis

Source [Annonce de Dart 2.2: Code natif plus rapide, prise en charge des littéraux définis]

Aujourd'hui (26 février 2019), nous annonçons la sortie du SDK Dart 2.2 - une mise à jour pour Dart 2 qui offre de meilleures performances de code à l' avance (AOT) et un support pour les littéraux Set.

image

Amélioration des performances de fléchettes pour le développement Flutter


Nous continuons notre travail pour rendre le code compilé AOT , comme les applications Flutter, encore plus rapide. Dans Dart 2.1, nous avons réduit le coût de la vérification de type en réduisant considérablement le coût de la vérification de type pour le code compilé par AOT et le code qui s'exécute sur une machine virtuelle avec une compilation JIT (juste à temps).

Dans Dart 2.2, nous nous sommes concentrés sur les performances du code compilé AOT, en améliorant les performances de 11 à 16% sur les microbenchmarks (en augmentant la taille du code de ~ 1%). Cette amélioration est le résultat d'un travail sur plusieurs trimestres, afin de réduire les coûts des appels statiques. Notre code AOT optimisé peut désormais appeler l'objet demandé directement en utilisant un appel PC (c'est-à-dire en utilisant le compteur de programme ). Avant cela, nous devions effectuer plusieurs fois une recherche dans le pool d'objets pour déterminer l'adresse requise. Ces optimisations sont particuliÚrement utiles lorsque le code contient de nombreux constructeurs et appels de méthode statique, tels que le code d'interface utilisateur Flutter, qui contient de nombreux widgets.

Prise en charge de Set Literals dans Dart 2.2


La bibliothĂšque principale de Dart (dart: core) contient plusieurs classes de collection: Maps , Lists et Sets . Les cartes sont des ensembles de paires clĂ©-valeur. Les listes sont des sĂ©quences de valeurs ordonnĂ©es, dont chacune est accessible Ă  l'aide de l'index et qui peuvent se produire plusieurs fois. Les ensembles sont des collections de valeurs non ordonnĂ©es dans lesquelles chaque valeur ne peut apparaĂźtre qu'une seule fois et oĂč elle peut ĂȘtre vĂ©rifiĂ©e efficacement pour voir s'il existe une valeur dans la collection.

Les collections Dart sont généralement initialisées avec des constantes au moment de la compilation, et Dart propose une syntaxe pratique pour écrire cette initialisation. Dans la liste de fléchettes, vous pouvez initialiser comme suit:

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

Auparavant, Dart ne supportait que la syntaxe littérale pour List et Map, donc l'initialisation de Set était fastidieuse, car nous devions initialiser via la liste:

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

Ce code n'est pas seulement gĂȘnant et inefficace; l'absence de prise en charge littĂ©rale empĂȘche la crĂ©ation d'un ensemble immuable au moment de la compilation. Avec l'ajout de la prise en charge littĂ©rale de Set dans Dart 2.2, initialisez l'ensemble et rendez-le immuable Ă  l'aide d'une nouvelle syntaxe pratique:

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

De vrais exemples d'utilisation de Set littĂ©raux avec la commande Flutter peuvent ĂȘtre trouvĂ©s ici . Pour un aperçu plus approfondi du problĂšme, nous vous suggĂ©rons de vous familiariser avec la visite linguistique mise Ă  jour de Dart 2.2 .

Innovez avec le Dart 2 Common Front-End (CFE)


Dart propose plusieurs implémentations qui lui sont propres: la machine virtuelle Dart utilisée par Flutter, le compilateur dart2js et le compilateur dev Dart (dartdevc), qui utilisent tous le compilateur Common Front-End. Dart Common Front End, ou CFE, analyse le code Dart, effectue l'inférence de type et traduit Dart dans un langage intermédiaire de niveau inférieur, que les compilateurs principaux acceptent comme entrée.

Les littĂ©raux d'ensemble sont un exemple de construction de langage que nous avons pu mettre en Ɠuvre rapidement grĂące Ă  CFE. Le code pour analyser les littĂ©raux Set et effectuer l'infĂ©rence de type a Ă©tĂ© implĂ©mentĂ© une fois Ă  l'aide de CFE pour toutes les implĂ©mentations. De plus, nous avons créé une implĂ©mentation transitoire qui pourrait ĂȘtre utilisĂ©e par les compilateurs principaux au stade initial. Dans une implĂ©mentation intermĂ©diaire, une version modifiable de l'ensemble de littĂ©raux spĂ©cifiĂ© a Ă©tĂ© traduite lors de la compilation sous la forme Ă©quivalente:

 Set<String> currencies = Set<String>()..add('EUR')..add('USD')..add('JPY'); 

Une implĂ©mentation intermĂ©diaire des littĂ©raux Set constants diffĂšre en ce qu'ils ne peuvent pas ĂȘtre assemblĂ©s progressivement en plusieurs parties. Au lieu de cela, nous avons implĂ©mentĂ© cela en termes d'une classe Set immuable privĂ©e qui encapsule une Map immuable, oĂč les Ă©lĂ©ments Set sont des clĂ©s Map:

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

La classe Set immuable implémente des méthodes dans l'interface Set, en les déléguant à la carte interne.

En général, nous avons pu implémenter Set littéraux initialement en fonction exclusivement de CFE. Le back-end pourrait immédiatement utiliser l'implémentation CFE et implémenter son propre support plus tard. Cela a permis aux compilateurs principaux de reporter leur prise en charge jusqu'à ce que les aspects de performance de cette fonction soient mieux compris.

Spécification Dart 2.2


Dart 2 était une mise à jour tellement importante de Dart qu'il nous a fallu un certain temps pour mettre à jour les spécifications de la langue officielle pour répondre à toutes les modifications que nous avons apportées. Nous avons finalement terminé ce travail et la spécification a été mise à jour vers la version Dart 2.2. Nous avons également déplacé la spécification de langue vers le nouveau référentiel et ajouté une intégration continue pour garantir que la spécification est constamment mise à jour au format PDF à mesure que les futures versions du langage Dart évoluent. Les spécifications 2.2 et futures de Dart 2.x sont disponibles sur la page de spécifications de Dart .

Comment installer Dart 2.2


Le Dart SDK 2.2 est disponible sur la page d'accueil de Dart Ă  partir d'aujourd'hui. Si vous ĂȘtes un dĂ©veloppeur Flutter, Dart 2.2 est dĂ©jĂ  inclus. (Remarque: sur la commande de la console Flutter Doctor, les canaux Flutter Master et Dev actuels indiqueront Dart 2.2. La version stable actuelle de Flutter 1.2 produira Dart 2.1.2; cette version a les mĂȘmes capacitĂ©s que Dart 2.2).

C'est tout pour l'instant. Nous espérons que vous apprécierez Dart 2.2!



Merci beaucoup pour votre aide dans la traduction de PsyHaSTe

Source: https://habr.com/ru/post/fr442014/


All Articles