Dart (langage)
Dart est un langage de programmation optimisé pour les applications sur plusieurs plateformes. Il est développé par Google et est utilisé pour créer des applications mobiles, de bureau, de serveur et web. Dart est un langage orienté objet à ramasse-miettes avec une syntaxe de type C++[2]. Dart peut se compiler en code natif ou en JavaScript. Il prend en charge les interfaces, les mixins, les extensions de classes, les classes abstraites, les génériques réifiés et l'inférence de type[3]. HistoireDart a été dévoilé lors de la conférence GOTO à Aarhus, au Danemark, du 10 au 12 octobre 2011. Le projet a été fondé par Lars Bak et Kasper Lund[4]. Dart 1.0 est sorti le 14 novembre 2013[5]. Dart a initialement reçu un accueil mitigé et l'initiative Dart a été critiquée par certains pour avoir fragmenté le web, en raison des plans originaux d'inclure une VM Dart dans Chrome. Ces plans ont été abandonnés en 2015 avec la version 1.9 de Dart pour se concentrer plutôt sur la compilation de Dart en JavaScript[6]. En août 2018, Dart 2.0 est sorti, avec des changements du langage incluant un système de typage plus sain[7]. Dart 2.6 a introduit une nouvelle extension : dart2native. Cette fonction étend la compilation native aux plates-formes de bureau Linux, macOS et Microsoft Windows. Auparavant, les développeurs pouvaient créer de nouveaux outils en utilisant uniquement des appareils Android ou iOS. De plus, avec cette extension, il devient possible de compiler un programme Dart en exécutables autonomes. Ainsi, il n'est plus obligatoire d'avoir installé la machine virtuelle Dart, les exécutables ainsi générés peuvent s'exécuter immédiatement. La nouvelle extension est également intégrée à la boîte à outils Flutter, ce qui permet d'utiliser le compilateur pour de petits services (support backend par exemple) [8],[9].
Ecma International a formé le comité technique TC52[10] pour travailler à la normalisation de Dart, et dans la mesure où Dart peut être compilé en JavaScript standard, il fonctionne efficacement dans n'importe quel navigateur moderne. Ecma International a approuvé la première édition de la spécification du langage Dart en juillet 2014, lors de sa 107e assemblée générale[11], et sa deuxième édition en décembre 2014[12]. La dernière spécification est disponible à l'adresse suivante spécification du langage Dart. UtilisationIl y a quatre façons d'exécuter le code Dart :
IsolatsPour parvenir à la concordance, Dart utilise des "isolats", des entités indépendantes qui ne partagent pas leur mémoire, mais utilisent la transmission de messages. Cette méthode est similaire aux processus Erlang (voir aussi le modèle Acteur). Chaque programme Dart utilise au moins un isolat, qui est l'isolat principal. Depuis Dart 2, la plate-forme web Dart ne prend plus en charge les isolats et suggère aux développeurs d'utiliser les Web Workers à la place[17]. InstantanésLes instantanés (snapshots) sont une partie essentielle de la VM Dart. Ce sont des fichiers qui stockent des objets et d'autres données d'exécution.
Applications mobiles nativesGoogle a introduit Flutter pour le développement d'applications mobiles natives sur Android et iOS[18]. Flutter est un SDK d'application mobile, complet avec un cadre de travail, des widgets et des outils, qui donne aux développeurs un moyen de construire et de déployer des applications mobiles, écrites en Dart. Flutter fonctionne avec Firebase et d'autres SDK d'applications mobiles, et est open source. Compilation en JavaScriptLe Dart SDK contient deux compilateurs Dart-to-JavaScript. Pendant le développement, dartdevc supporte des cycles de rafraîchissement rapides. Pour la version finale d'une application, dart2js produit du JavaScript déployable[19]. Le premier compilateur à générer du JavaScript à partir de code Dart était dartc, mais il a été déprécié. Le deuxième compilateur Dart-to-JavaScript était Frog. Il a été écrit en Dart, mais n'a jamais implémenté toute la sémantique du langage. Le troisième compilateur Dart-to-JavaScript était dart2js. Une évolution des compilateurs précédents, dart2js est écrit en Dart et destiné à implémenter la spécification et la sémantique complète du langage Dart. Le 28 mars 2013, l'équipe Dart a publié sur son blog une mise à jour concernant le code Dart compilé en JavaScript avec le compilateur dart2js[20], indiquant qu'il fonctionne désormais plus vite que le JavaScript écrit à la main sur le moteur JavaScript V8 de Chrome pour le benchmark DeltaBlue[21]. ÉditeursLe 18 novembre 2011, Google a lancé Dart Editor, un programme open-source basé sur les composants Eclipse, pour les systèmes d'exploitation MacOS, Windows et Linux[22]. L'éditeur prend en charge la coloration syntaxique, la complétion de code, la compilation JavaScript, l'exécution d'applications Dart sur le web et sur les serveurs, et le débogage. Le 13 août 2012, Google a annoncé la sortie d'un plugin Eclipse pour le développement de Dart[23]. Le 18 avril 2015, Google a annoncé que l'éditeur Dart serait retiré au profit de l'environnement de développement intégré (IDE) JetBrains[24], qui est maintenant l'IDE[25] recommandé pour le langage. Le plugin Dart est disponible pour IntelliJ IDEA, PyCharm, PhpStorm et WebStorm. Ce plugin supporte de nombreuses fonctionnalités telles que la coloration syntaxique, la complétion de code, l'analyse, le refactoring, le débogage, et plus encore. D'autres plugins sont disponibles pour les éditeurs comme Sublime Text, Atom, Emacs, Vim et Visual Studio Code[26]. Depuis 2020, le plugin Dart est disponible sur Android Studio[27]. Éditeur Chrome DevEn 2013, l'équipe Chromium a commencé à travailler sur un environnement de développement open source basé sur l'application Chrome avec une bibliothèque réutilisable de widgets GUI, dont le nom de code est Spark[28].Le projet a ensuite été rebaptisé Chrome Dev Editor (éditeur de développement Chrome)[29]. Il a été construit en Dart, et contient Spark qui est alimenté par Polymer[30]. En juin 2015, Google a transféré le projet CDE à GitHub en tant que projet de logiciel libre et a cessé d'investir activement dans le CDE[31]. Depuis avril 2019, Chrome Dev Editor n'est plus en développement actif[32]. DartPadL'équipe Dart a créé DartPad au début de l'année 2015, afin de faciliter l'utilisation de Dart. Il s'agit d'un éditeur entièrement en ligne à partir duquel les utilisateurs peuvent expérimenter les interfaces de programmation d'application (API) de Dart et exécuter le code de Dart. Il permet la mise en évidence de la syntaxe, l'analyse du code, la complétion du code, la documentation et l'édition HTML et CSS[33]. SIMDEn 2013, John McCutchan a annoncé[34]qu'il avait créé une interface performante pour les jeux d'instructions à instructions uniques et données multiples (SIMD) pour Dart. L'interface se compose de deux types :
Ces types sont immuables et, dans un code optimisé, sont directement mis en correspondance avec les registres SIMD. Les opérations exprimées en Dart sont généralement compilées en une seule instruction, sans surcharge. Cette méthode est similaire à celle du C et du C++ intrinsèques. Les références pour la multiplication matricielle 4×4, la la transformation des sommets en 3D et la visualisation des ensembles de Mandelbrot montrent une accélération de près de 400 % par rapport au code scalaire écrit en Dart. ExempleUn exemple avec le fameux programme Hello World : void main() {
print('Hello World!');
}
Une fonction pour calculer le nième nombre de Fibonacci : int fib(int n) => (n > 2) ? (fib(n - 1) + fib(n - 2)) : 1;
// Une mise en œuvre de la fonction Fibonacci avec un opérateur conditionnel dans Dart
// Ce code se lit comme suit :
// étant donné un nombre entier n,
// si n > 2, renvoyer fib(n - 1) + fib(n - 2) ;
// sinon, renvoie l'entier 1 comme résultat
void main() {
print('fib(20) = ${fib(20)}');
}
Une classe simple: // Importer la bibliothèque mathématique (math) pour avoir accès à la fonction `sqrt`.
import 'dart:math' as math;
// Créer une classe pour un Point.
class Point {
// Les variables finales ne peuvent pas être modifiées une fois qu'elles ont été attribuées.
// Déclarer deux variables d'instance.
final num x, y;
// Un constructeur, avec du sucre syntaxique pour définir des variables d'instance.
// Le constructeur a deux paramètres obligatoires.
Point(this.x, this.y);
// Un constructeur nommé avec une liste d'initialisation.
Point.origin()
: x = 0,
y = 0;
// Une méthode.
num distanceTo(Point other) {
var dx = x - other.x;
var dy = y - other.y;
return math.sqrt(dx * dx + dy * dy);
}
// Exemple d'un "getter".
// Agit comme une variable finale, mais est calculé à chaque accès.
num get magnitude => math.sqrt(x * x + y * y);
// Exemple de l'opérateur d'overloading
Point operator +(Point other) => Point(x + other.x, y + other.y);
// Lorsque vous instanciez une classe telle que Point en Dart 2+, new est un mot optionnel
}
// Tous les programmes Dart commencent par main().
void main() {
// Instancie des objets Point.
var p1 = Point(10, 10);
print(p1.magnitude);
var p2 = Point.origin();
var distance = p1.distanceTo(p2);
print(distance);
}
Influences d'autres langagesDart est un descendant de la famille des langages ALGOL[35], aux côtés du C, Java, C#, JavaScript, et autres. La syntaxe de la méthode en cascade, qui fournit un raccourci syntaxique pour invoquer plusieurs méthodes l'une après l'autre sur un même objet, est reprise de Smalltalk. Les mixins de Dart ont été influencés par Strongtalk et Ruby. Dart utilise des isolates comme unité de sécurité et de simultanéité lors de la structuration des applications[36]. Le concept d'isolate s'appuie sur le modèle Actor, dont la mise en œuvre la plus célèbre est celle d'Erlang. L'API Mirror permettant d'effectuer une réflexion contrôlée et sécurisée a été proposée pour la première fois dans un article[37] de Gilad Bracha (qui est membre de l'équipe Dart) et David Ungar et a été implémentée à l'origine dans Self. Références
Voir aussiArticles connexes
Liens externes
|