IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Le SDK de Dart 2.6 est disponible et s'accompagne de la possibilité de compiler des programmes Dart en exécutables autonomes
Grâce à dart2native

Le , par Stéphane le calme

289PARTAGES

13  0 
Google a annoncé la disponibilité de la version 2.6 de Dart, son langage de programmation Web. En fait, Dart propose déjà un ensemble complet de compilateurs permettant de créer du code optimisé en production pour les appareils mobiles et le Web. Ces compilateurs flexibles permettent de cibler un large éventail de formats : applications Flutter sur Android et iOS, applications Flutter sur le Web et sur desktop, applications AngularDart sur le Web et Google Assistant sur des systèmes embarqués.

La disponibilité de Dart 2.6 s'est accompagnée de dart2native, une extension de l'ensemble de compilateurs existants, avec la possibilité de compiler des programmes Dart en exécutables autonomes contenant du code machine compilé à l'avance. Avec dart2native, vous pouvez créer des outils pour la ligne de commande sous macOS, Windows ou Linux à l'aide de Dart.

Dart supporte la compilation AOT (ahead-of-time) en code machine natif depuis plusieurs années et Dart Native est donc une technologie relativement mature. Cependant, dans le passé, l'équipe a choisi de n’exposer cette fonctionnalité qu’aux appareils mobiles iOS et Android, via Flutter.

Avec dart2native, l'équipe étend donc la prise en charge de la compilation native pour prendre en charge les systèmes d’exploitation desktop traditionnels exécutant macOS, Windows et Linux. Les exécutables créés avec dart2native étant autonomes, ils peuvent être exécutés sur des machines sur lesquelles Dart SDK n’est pas installé. Et comme ils sont compilés avec le compilateur AOT de Dart, les exécutables se lancent en quelques millisecondes. Comme avec d'autres compilateurs et runtimes Dart, le même ensemble de bibliothèques principales riches et cohérentes est disponible dans Dart lors de la compilation en code natif.


Création d'applications de ligne de commande avec dart2native

Le compilateur dart2native est donc un moyen de créer et déployer des applications basées sur Dart pour la ligne de commande. Ces applications utilisent souvent des bibliothèques telles que dart:io (E/S de base), package:http (mise en réseau) et package:args (analyse des arguments). Passons en revue les bases de la compilation d’une application «hello, world» en un exécutable:

Le code source hello.dart:

Code Dart : Sélectionner tout
1
2
3
main() { 
  print(‘Hello Dart developers’); 
}

Compilez hello.dart en un hello exécutable:

Code : Sélectionner tout
1
2
$ dart2native src/hello.dart -o hello 
Generated: /Users/mit/hello
Exécuter la mesure du temps d'exécution de hello:

Code : Sélectionner tout
1
2
3
4
$ time ./hello 
Hello Dart developersreal 0m0.049s 
user 0m0.018s 
sys 0m0.020s
Interopérabilité avec le code C via dart:ffi

Les applications natives doivent souvent accéder aux fonctionnalités natives du système d'exploitation environnant. Ces API système sont généralement exposées dans des bibliothèques natives basées sur C et Dart prend en charge l’interopérabilité avec ces bibliothèques via dart:ffi, le nouveau mécanisme d’interopérabilité C qui a été lancé en préversion dans Dart 2.5. Le compilateur dart2native est compatible avec dart:ffi, vous pouvez donc créer et compiler nativement des applications Dart qui l’utilisent.

Un membre de l’équipe a récemment utilisé dart:ffi pour créer une bibliothèque dart_console destinée au développement d’applications pour console, qui permet notamment de connaître les dimensions de la fenêtre, de lire et de définir l’emplacement du curseur, de gérer les couleurs et de lire les clés et les séquences de contrôle. La possibilité d'utiliser dart:ffi fait de Dart un langage très puissant pour les applications en console.

kilo: un éditeur de code de 7 Mo écrit en moins de 500 lignes de code Dart

En utilisant les bibliothèques Dart Core, dart:ffi et la bibliothèque dart_console, l'équipe assure qu'il est possible de créer des applications de console très intéressantes. Le paquet dart_console comprend une démo complète de kilo, un éditeur de texte de console écrit en seulement 500 lignes de code Dart. Le nom kilo vient de son origine, kilo.c, qui était une implémentation en C dans environ 1000 lignes de code.

Selon l'équipe, avec le nouveau compilateur dart2native, nous pouvons facilement le conditionner, et nous nous retrouvons avec un éditeur de code autonome de 7 Mo.


Développer des services avec dart2native

Une autre utilisation potentielle du compilateur dart2native concerne les petits services, par exemple, un backend supportant une application frontend écrite en utilisant Flutter. Ces dernières années, l'utilisation de services fonctionnant sur des ordinateurs sans serveur est une tendance croissante. Il s’agit de services entièrement gérés qui s’échelonnent automatiquement, offrant ainsi la possibilité de réduire considérablement les coûts, car ils ne sont facturés que lorsqu’ils sont réellement exécutés.

Pour les backend sans serveur, il est essentiel que le service démarre rapidement. Traditionnellement, les services basés sur Dart fonctionnaient avec le compilateur JIT, mais l’exécution basée sur JIT a une latence élevée au démarrage, car le code doit être compilé et mis en température avant de pouvoir être exécuté. En compilant le code de votre service ahead-of-time en code natif, vous pouvez éviter cette latence. De plus, avec du code natif, vous pouvez créer des services Dart dotés d’une empreinte de disque réduite et qui sont autonomes, ce qui réduit considérablement la taille du conteneur dans lequel le service Dart est exécuté. Le développeur de Dart, Paul Mundt, a récemment documenté ses expériences avec l’utilisation du compilateur dart2native; il était en mesure de réduire la taille de son image Docker de 220 Mo à 91 % en utilisant du code compilé par JIT, à seulement 20 Mo en utilisant du code natif!

Télécharger le SDK de Dart 2.6

Source : Google

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de rawsrc
Expert éminent sénior https://www.developpez.com
Le 07/11/2019 à 8:38
Vu l'évolution et le support de Dart par Google, je mets ma main à couper que ce langage est promis à un avenir radieux.
Il est presque deux fois plus véloce que Javascript, possède une syntaxe très légère, fortement typée et optionnelle, le moteur d'inférence est un des meilleurs que j'ai vu.
La VM pour l'instant n'existe qu'en standalone mais je pense sérieusement que Google finira par l'implémenter dans Chrome (ils avaient déjà fait un pas dans ce sens mais ont finalement fait marche arrière).
En tout cas, vu l'adoption de Flutter (entièrement basé sur Dart) et maintenant la possibilité de pondre des exécutables, c'est certain, Dart va continuer a étendre son emprise (au détriment de Java...)
4  0 
Avatar de defZero
Membre extrêmement actif https://www.developpez.com
Le 07/11/2019 à 23:37
@rawsrc, +1, Concernant l'avenir radieux de Dartlang chez Google.

Par contre quand tu écrit
Il est presque deux fois plus véloce que Javascript, possède une syntaxe très légère, fortement typée et optionnelle, le moteur d'inférence est un des meilleurs que j'ai vu.
J'ai dû louper le côté "syntaxe très légère".
Ils ont choisis une syntaxe JAVAesque à dessein certes, mais elles est loin de faire l'unanimité.
De ce que j'en est vu, la communauté du début (avant Dart 1) attendez soit un successeur syntaxique à Smalltalk mais avec une VM mise aux gouts du jour, soit un langage beaucoup plus inspiré du côté fonctionnel de la force.
Et je croit donc que pas mal de monde a été déçu de ce côté là.
De plus il a vraiment fallut attendre l'ouverture de Flutter par Google, avec Dart 2, pour que les gens recommence à s'y intéresser (de nouveau).
Mais tu a raison, ça n'enlève rien au fait que la plateforme qu'est en train de mettre en place Google avec Dart est très intéressante et ce pose de plus en plus comme une alternatives multiplateforme sérieuse (on peut l'évoquer en réunion sans passé pour un alien ) face à Node, JAVA et/ou .Net.
0  0 
Avatar de archqt
Membre émérite https://www.developpez.com
Le 08/11/2019 à 11:16
Exact il va prendre de l'essor surtout qu'il y a maintenant des implémentations pour le Desktop. Ce que j'aimerais, car je maîtrise mieux le C++ que le Dart, c'est un flutter "natif" en C++, sans être obligé de faire une IHM en flutter+Dart et le métier en C++, mais directement tout faire en C++. Et là cela concurrencerait Qt sans problème vu la licence permissive.
0  0 
Avatar de defZero
Membre extrêmement actif https://www.developpez.com
Le 08/11/2019 à 16:45
De mémoire il me semble qu'il y a toujours eu une implémentation "Desktop", la dartvm en standalone.
Par contre le manque de FFI et le fait que des Widgets soit livrer d'office avec Flutter facilite vraiment la chose, c'est vrai.
Cependant ça a toujours était "possible" puisque Dart était à l'origine destiné à être "embedded" dans les navigateurs/apps qui lui fournissaient donc la partie GUI (ce que fait Flutter, pour les parties bas niveau).
Par contre, je ne voit pas l'intérêt de faire du Flutter en full C++, autant faire du Qt/Gtk/wxWidget/FLTK/...etc.
Si c'est un problème de tarif, c'est vrai que Qt n'est pas donné (en licence Commerciale), mais j'aurais tendance à dire que tout travail (très bon qu'y plus est) mérite salaire.
Au pire Flutter utilise en bas niveau des lib en C++ tout à fait utilisable dans un projet tiers (licence BSD/MIT/Apache, à vérifier), mais la ça demandera beaucoup plus de travail je pense .
0  0 
Avatar de archqt
Membre émérite https://www.developpez.com
Le 09/11/2019 à 18:20
Disons que l'intérêt de pouvoir coder en C++ amènerait une communauté supplémentaire car au final en C++ côté GUI à part Qt qui explose la concurrence en même temps que ces tarifs, le reste a l'air un peu mort ou ne fonctionne pas bien en multi-plâteforme. Qt s'oriente beaucoup sur l'automobile et les entreprises je trouve, ce qui le détache un peu du départ. Après tout travail mérite salaire c'est sûr et s'ils y trouvent plus d'intérêts c'est complètement logique.
De plus Qt n'est pas entièrement adapté au monde du mobile, flutter permet du hot-reloading qui est très intéressant
0  0 
Avatar de defZero
Membre extrêmement actif https://www.developpez.com
Le 11/11/2019 à 18:44
Je crois comprendre ce que tu veut dire, mais pour le coups, ce serait bien deux communauté distinct utilisant quelques libs bas niveau, au mieux.
On perdrait tous les avantages d'avoir un langage compilable simplement/rapidement à la voler (et donc le hot-reloading, le multi-plateforme simple, ...etc)
Et au vu de la complexité et des contraintes qu'imposeraient le C++ sur une plateforme tel que Flutter, je ne voit pas comment ce serait possible.
Mais je suis loin d'avoir la science infuse et si ça ce trouve c'est très faisable , je ne l'ai juste jamais vu.
0  0 
Avatar de hotcryx
Membre extrêmement actif https://www.developpez.com
Le 20/01/2020 à 13:27
Citation Envoyé par rawsrc Voir le message
Vu l'évolution et le support de Dart par Google, je mets ma main à couper que ce langage est promis à un avenir radieux.
Il est presque deux fois plus véloce que Javascript, possède une syntaxe très légère, fortement typée et optionnelle, le moteur d'inférence est un des meilleurs que j'ai vu.
La VM pour l'instant n'existe qu'en standalone mais je pense sérieusement que Google finira par l'implémenter dans Chrome (ils avaient déjà fait un pas dans ce sens mais ont finalement fait marche arrière).
En tout cas, vu l'adoption de Flutter (entièrement basé sur Dart) et maintenant la possibilité de pondre des exécutables, c'est certain, Dart va continuer a étendre son emprise (au détriment de Java...)
J'ai réfléchi quelques-temps comment développer pour iOS:
angular ou react, finalement react native mais c'est du javascript, donc lent...
Ensuite Swift mais des prob pour installer Xcode...
Et Flutter: c'est rapide, pas trop gourmand, ressemble à Java, cross-plateformes et ne semble pas lourd-dingue, avec de jolis effets qui seraient difficiles sous Android...

Je vais m'intéresser à ce FW + Dart.

Rem: j'ai déjà vu une applic similaire à ce que je veux porter.
Agréablement fluide...

Que du bon pour l'instant.
0  0