Ajax HTML 5 JavaScript Création site CMS Comment Design Logiciels Programmation RSS SQL Scripts Mobiles
Forum
Algorithmes
Liste des algorithmes
Etonnants algorithmes
Eratosthènes
Langages
Liste des langages
Histoire
Logiciels et scripts
Outils

Dart, un langage de Google pour remplacer JavaScript et PHP

Dart fonctionne dans le navigateur et sur le serveur et procure les fonctions d'un vrai langage d'application.

Ce nouveau langage de Google se veut plus structuré comme à une certaine époque Pascal face à Basic Il est disponible sur le site dartlang.org, une alternative à JavaScript dans le navigateur mais aussi sur le serveur ou pour le code natif dans le serveur.
Pour ce faire, il comporte de vraies classes et implémente la concurrence sous forme d'acteurs communiquants disposant de leur propre environnement.

Le langage de programmation Dart et les applications web

Confronté à des problèmes de design fondamentaux dans JavaScript qui ne peuvent être résolus par des améliorations progressive, Google a opté pour une solution radicale: remplace totalement le langage par un autre. Mais par quand à la syntaxe qui est entre celle de JavaScript et Java.
Une autre solution aurait été possible: permettre aux navigateurs d'utiliser n'importe quel langage de programmation. Ou qu'ils utilisent un bytecode pour lequel on pourrait créer différents langages en frontend.
Il est peu probable que Microsoft ou Apple adoptent ce langage avant longtemps, la machine virtuelle est donc confinée à Chrome, mais on pourra aussi compiler le code en JavaScript pour le faire fonctionner sur tous les navigateurs.

Un programme Dart peut être exécuté par une machine virtuelle ou compilé en JavaScript et ainsi produire un code utilisable par tous les navigateurs.
Sur Chrome, un plugin permettra d'utiliser la machine virtuelle.

La syntaxe du langage est plus que classique, il s'agit en fait d'un langage des années 80. Scriptol qui date de 2001 était déjà plus innovateur. Cependant, Dart va progresser sur d'autres plans.
La programmation devient interactive grâce aux outils founis, on peut éditer et exécuter un programme directement, et modifier le code selon les résultats. Pour une application Web, il s'agit d'une révolution.
Les programmes peuvent être évolutifs. Cela peut commencer par un script avec des variables dynamiques, qui peut se transformer en logiciel auquel on va ajouter des variables typées et des classes.
Un autre avantage est la possibilité d'utiliser un même langage sur le serveur et dans le navigateur, ce qui simplifie la programmation.

Dart va se trouver en concurrence avec Harmony, l'ultime version de JavaScript en développement qui comprendra aussi des classes. A moins qu'on n'utilise les deux et que l'on ne compile Dart en Harmony pour les navigateurs qui ne l'implémenteront pas. Un Cloud IDE nommé Brighty permettra de développer des applications Web. Il fonctionnera avec Dart ou JavaScript.

Caractéristiques de Dart

  • La fonction main exécute le code après le chargement, et non pas au fur et à mesure que la page est parsée comme en JavaScript.
  • Classes et interfaces.
    Contrairement à JavaScript, Dart permet de déclarer des classes et dispose d'un héritage simple.
    Il ne permet pas de surcharger les méthodes, et utilise une alternative compliquée pour les constructeurs.
  • Fonctions.
    Une fonction se déclare comme en C (et non avec le mot-clé function comme en JavaScript), sauf que le type de retour est optionnel. S'il n'est pas indiqué, il est dynamique.
    Comme en JavaScript, on peut imbriquer des fonctions dans d'autres fonctions.
  • Il peut utiliser des librairies, donc du code déjà compilé.
  • Une classe hérite d'une autre avec le mot-clé extends. Voir exemple plus bas.
  • Types optionnels.
    Le programmeur peut utiliser des variables dynamiques pour un script ou des variables typées pour la sécurité sur un projet plus important ou pour une plus grande vitesse d'exécution. Noter que l'inférence de type par les compilateurs JavaScript modernes annule cet avantage.
  • Concurrent.
    Des entités nommées Isolates peuvent fonctionner en concurrence. Elles communiquent par message mais ont leur espace mémoire propre.
    Donc le language n'est pas multi-thread, mais dispose de processus parallèles, des acteurs.
  • Le symbole + sert à l'addition ou la concaténation. Il peut aussi être surchargé par des méthodes de classes.
  • Auto-documentation facilitée.
  • Comme en Scriptol, un nom ne doit pas être déclaré localement dans un bloc alors qu'il existe déjà dans un bloc conteneur (ici on reçoit un avertissement, en Scriptol c'est une erreur de syntaxe).
  • Un objet est public (utilisable hors de la libraire), ou privé, dans ce cas il est préfixé par un code de soulignement.
  • Les classes peuvent comporter des getters et setters. La syntaxe est :
    type nom => expression.
  • Une méthode peut être statique. Elle est alors déclarée avec le préfixe static. De même pour un attribut.
  • Les opérateurs sont ceux de PHP. Cela inclut === et !== pour les comparaisons strictes.
  • Mots réservés:
    abstract, assett, break, case, catch, class, continue, do, exception, extends, factory, false, finally, for, get, if, implements, import, interface, in, include, is, library, negate, operator, Proxy, set, source, static, switch, throw, try, true, typedef, until, while.
  • Liste des types et objets prédéfinis:
    bool, Date, double, Duration, int, list, map, num, Isolate, Object, Match, Math, Pattern, Queue, RegExp, String, var, void.
  • La boucle for peut utiliser in pour scanner une liste.
  • Snapshot
    Un snapshot est une forme de persistence de l'état d'une programme. Ses données sont enregistrées sur disque dur pour être utilisées lors de la prochaine session. Cela permet de redémarrer un programme instantanément comme s'il était en veille. (La documentation actuelle n'en parle pas mais le code de snapshot fait partie de celui de la machine virtuelle).

Exemple de code

Class Vehicule
{
  num carburant;
  Vehicule(num this.vitesse, num this.passagers);
  num distance() // le type est optionnel
  {
    print carburant / this.passagers;
  }
}
Class Voiture extends Vehicule
{
   ...

}

Dart sera-t-il adopté sur tous les navigateurs?

Il existe une version de Chrome nommée Dartium qui intègre une machine virtuelle Dart. Cependant, la communauté qui développe Webkit a refusé son implémentation pour le motif qu'il ne fait pas partie des standard du Web. C'est la même chose du coté de Mozilla ou l'on estime qu'une future version de JavaScript pourrait ajouter les mêmes améliorations que ce qu'apporte Dart, notamment le modèle de classes et les variables typées (sans perdre les avantage de JavaScript). On ne parle pas de Microsoft qui a émis un avis négatif sur le sujet, ni d'Apple qui est loin de vouloir de rapprocher de Google.

Il semble donc que dans un futur proche, Dart ne fonctionne que sur Chrome et puisqu'il fonctionne sur Android, ne fournisse une alternative à la programmation native. Mais on peut imaginer un plugin Dart similaire à Google Frame qui permet le support de HTML 5 sur les anciennes version d'Internet Explorer.

Documents et ressources

  • Dartlang.org. Description et spécification du langage.
  • Essayer le langage. Entrez du code en ligne.
  • Comparaison point par point de Dart et JavaScript. Fournie par Google.
  • Critique de Dart. Le point de vue d'un programmeur Perl.
  • Comment ne pas créer un nouveau langage de programmation. L'éternelle syntaxe de C est-elle la meilleure?
  • JDart. Une version qui compile le code Dart en bytecode pour la machine virtuelle Java.
Langages de programmation AspectJ - Basic - C - CIL - C++ - C++11 - C# - Dart - Eiffel - Go - Java - JavaScript - JavaFX Script - Pascal - PHP - Python - QML - Rexx - Ruby - Scala - Scriptol - Tcl - HTML - XML - XAML - XUL - SQL
Tweet
© 2011-2012 Scriptol.fr