FAQ DartConsultez toutes les FAQ
Nombre d'auteurs : 6, nombre de questions : 85, dernière mise à jour : 29 août 2016 Ajouter une question
Cette FAQ a été réalisée essentiellement à partir de la traduction de la FAQ officielle Dart.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs et traducteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.
Je tiens à remercier l'ensemble de l'équipe des rédacteurs de www.developpez.com pour leurs remarques constructives. Ainsi que Lana.Bauer pour son implication dans la mise en ligne de cette FAQ.
Tous deux, nous désirons également remercier Mishulyna, Kenaryn et rawsrc pour leurs traductions, mais aussi BakSh0 pour sa relecture et son aide à la mise en ligne de la FAQ. Merci à Zoom61 pour la création du logo. Finalement, nous remercions jpcheck pour sa relecture orthographique.
Sur ce, nous vous souhaitons une bonne lecture.
N’hésitez pas nous faire part de vos remarques sur le contenu de cette FAQ ou à nous faire vos propositions de contribution !
La rédaction Developpez.com.
- Quels sont les navigateurs compatibles avec le code issu de la compilation en JavaScript ?
- Pourquoi Dart n'est-il pas compatible avec IE8 et versions antérieures ?
- Quels navigateurs supportent nativement la machine virtuelle Dart ?
- Y a-t-il un support natif de Dart au sein de Chrome ?
- Pourquoi, après compilation, le code d'un « Hello World » est-il si lourd comparé au code orignal Dart ?
- Comment déboguer Dart après qu'il a été compilé en JavaScript ?
- Est-ce que tout code Dart valide compilera en JavaScript ou y a-t-il des limitations ?
- Comment dart2js peut-il générer un code JavaScript plus performant que celui codé manuellement ?
- Pourquoi ne pas compiler Dart en asm.js au lieu d'avoir créé une machine virtuelle dédiée ?
[Traduction de la FAQ officielle]
Sont supportés :
- Internet Explorer, versions 9, 10, et 11 (Dart v1.5 sera la dernière version à supporter encore IE9) ;
- Firefox, dernière version ;
- Chrome, dernière version ;
- Safari pour ordinateur, version 6 ;
- Safari pour mobile, version 6.
[Traduction de la FAQ officielle]
Supporter les anciens navigateurs requiert beaucoup de ressources humaines et techniques. Dart est un pari pour le futur et le projet ne peut se permettre de gaspiller de précieuses ressources dans le support de navigateurs amenés à disparaître, voire déjà obsolètes. C'est pourquoi, dart2js génère un code qui est bien plus efficient quand il est exécuté dans un navigateur récent supportant ECMAScript5 et autres fonctionnalités.
[Traduction de la FAQ officielle]
Au mois de décembre 2013, aucun navigateur ne peut exécuter du code Dart nativement sans passer par la compilation JavaScript. Cependant, l'éditeur de code Dart Editor qui est livré avec une version de Chromium (appelée Dartium) embarque le support de la machine virtuelle Dart. Ainsi, en plus d'exécuter Dart nativement, Dartium ayant une excellente interopérabilité avec l'éditeur de code permet le débogage complet des applications au sein même de l'éditeur.
Attention, l'éditeur Dart Editor n'est plus disponible.
[Traduction de la FAQ officielle]
L'équipe de Dart y travaille. On n'a pas d'échéance, mais il est possible de suivre l'avancement avec les projets open source tels que Oilpan et Dartium. En attendant, Dart est prévu pour être compilé en JavaScript pour l'exécution au sein de tous les navigateurs modernes et le compilateur dart2js reste la priorité pour l'équipe.
Attention: Chrome n'assumera pas le support de la Dart VM.
[Traduction de la FAQ officielle]
Nous pensons, bien sûr qu'il est important de créer à partir de Dart un code JavaScript léger et efficient, mais la plupart des développeurs ne coderont pas d'application « Hello World ». C'est relatif et grâce à l'optimisation du code (suppression du code inutile), la minification et la compression, il est possible de générer du JavaScript efficient pour les applications Dart.
Kevin Moore a vu des possibilités d'améliorations notables sur la taille du code JavaScript généré en s'appuyant sur son jeu HTML5.
L'équipe de dart2js s'efforce de générer un code plus léger, mais reste plus focalisée sur les applications du monde réel que sur des exemples triviaux.
[Traduction de la FAQ officielle]
dart2js génère un plan de code de manière à pouvoir déboguer le code Dart dans les navigateurs ne supportant pas la machine virtuelle Dart. Cependant, dans certains rares cas, il est obligatoire d'inspecter le code JavaScript, cela reste malgré tout assez aisément accessible avec les outils de débogage et de développement disponibles dans les navigateurs.
[Traduction de la FAQ officielle]
Nous avons pour intention que tout code Dart valide compile en JavaScript. Bien sûr, il y a des bibliothèques qui ne seront exécutées que sur le serveur parce qu'elles n'ont aucun sens dans un contexte de navigateur. Par exemple, la bibliothèque dart::io fournit un accès aux fichiers et répertoires du système d'exploitation avec une API indisponible sur un navigateur.
[Traduction de la FAQ officielle]
Vous faites probablement référence à ce graphique. Il faut s'imaginer dart2js comme un vrai compilateur qui peut analyser un programme entier et faire des optimisations que vous n'auriez jamais faites ou même pensées. Tout comme le compilateur gcc qui peut produire un code optimisé et efficient, dart2js tire avantage de la nature structurée de Dart pour apporter des optimisations globales.
Nous ne disons pas que tout le code Dart compilé en JavaScript va s'exécuter plus rapidement que du JavaScript natif, mais nous travaillons de manière à rendre plus rapide le code des cas communs.
[Traduction de la FAQ officielle]
Dart aurait pu utiliser asm.js de deux manières : compilation directe de Dart en asm.js ou compilation de la machine virtuelle Dart en asm.js.
Cependant et après de minutieux tests, il apparaît clair que les deux manières amènent à une surcharge à l'exécution qui annule certains aspects bénéfiques de Dart : démarrage ultra rapide et meilleures performances.
Compilation d'application Dart en asm.js
asm.js est un sous-ensemble très restreint de JavaScript principalement adapté aux compilateurs C. Il n'inclut ni les objets JavaScript, ni les accès directs au DOM. Principalement, il autorise les opérations arithmétiques et les manipulations des tableaux typés.
Bien qu'il soit possible d'implémenter les fonctionnalités dynamiques requises par Dart, cela pénaliserait lourdement la vitesse d'exécution et la légèreté du code comparé à ce qui est déjà fourni nativement par le moteur JavaScript. Par exemple, tout moteur JavaScript fournit un ramasse-miettes (henceforth GC) et en implémenter un nouveau pour asm.js augmenterait la taille du code et ralentirait notablement le ramasse-miette natif disponible dans toute machine virtuelle JavaScript moderne.
Parallèlement, les machines virtuelles JavaScript ont consacré beaucoup d'efforts pour rendre l'allocation dynamique efficiente utilisant un mélange entre la génération dynamique de code et l'auto-optimisation.
Compilation de la machine virtuelle Dart en asm.je (par exemple avec emscripten)
Les arguments précédents s'y appliquent aussi ici. Une machine virtuelle Dart compilant en asm.js nécessiterait d'implémenter une sur-couche à asm.js fournissant des fonctionnalités déjà disponibles nativement au sein des machines virtuelles JavaScript. En outre, asm.js n'autorise pas un accès direct à toutes les capacités d'une machine comme la gestion des processus ou l'accès à des jeux d'instructions spécifiques.
Fournir la machine virtuelle Dart (compilée en asm.js) avec chaque programme Dart nécessiterait une forte augmentation du téléchargement. Même mis en cache, cela prendrait un certain temps pour que le client compile la machine virtuelle Dart concourant à un allongement des temps de démarrage.
En outre, il faudrait réécrire le moteur de la machine virtuelle Dart afin qu'il génère du code asm.js, car il est bâti sur la génération de code dynamique pour atteindre des performances de pointe. (Dans une étape annexe, la machine virtuelle JavaScript aurait besoin de compiler ce code en bibliothèque, ajoutant à la latence.)
Le code généré serait restreint aux jeux d'instruction disponibles au sein d'asm.js alors qu'une machine virtuelle native peut générer des instructions spécifiques à la plateforme.
Cela dit, ce serait super de voir la machine virtuelle Dart compilée en asm.js. L'expérimentation aurait un intérêt pratique limité, mais cela serait un beau défi.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.