I. Haxe Langage Universel Web A
Total Page:16
File Type:pdf, Size:1020Kb
I. haXe langage universel Web A. Introduction à haXe haXe se prononçant « hacks », a pour premier objectif d’être un langage universel pour le Web. En effet, il rassemble en une même syntaxe et un ensemble de librairies standard , tous les outils pour développer une riche application pour Internet. haXe est également un compilateur et cible 3 plateformes : • Interpréteur Javascript (client) • Machine virtuelle Flash Player (client) • Machine virtuelle NekoVM (serveur) Javascript haXe génère un unique fichier javascript (.js) utilisé pour l’ensemble des actions nécessaires à notre page Web dynamique. On accède aux API traditionnelles du navigateur et de javascript. HTML + CSS + haXe/JS permettent de réaliser des applications AJAX sophistiquées et très simplement. haXe apporte, entre autres, au développement traditionnel en javascript, une organisation des données en classes et une vérification des types à la compilation. Flash haXe génère du bytecode Flash 6 à Flash 8, exécuté par la machine virtuelle AVM1 du Flash Player ou du bytecode Flash 9, tournant sur la AVM2 du Flash Player 9. On accède à toute l’API Flash de base (selon les versions de Flash désirés). Le bytecode produit par haXe est plus performant que celui d’Adobe Flash ou Flex. Une option du compilateur permet de générer des fichiers sources AS3 à partir d’un projet haXe. Neko haXe génère du bytecode pour la machine virtuelle NekoVM. On accède a l’API du system, de la base de données, etc. Le bytecode tourne sur la nekoVM en « stand alone » (utilisation directement dans le système d’exploitation en ligne de commande ou application fenêtrée) ou en tant que module Apache (mod_neko). Neko peut être comparé à PHP coté serveur et il est 20x plus rapide que ce dernier dans certains cas d’utilisation. Support de cours « haxe et les outils open source de développement web » ère 1 partie : haXe langage universel Web 2007 / 2008 - M.Romecki 1 B. Installation haXe est un langage composé de librairies (classes sources) et d’un compilateur en ligne de commande. Dans la version « automatic installer », haXe est directement fourni avec la nekoVM qui permet d’exécuter du bytecode neko. Pour télécharger haXe, rendez-vous sur http://haxe.org/download Il existe la version « automatic installer » correspondant à chacun des 3 systèmes d’exploitations sur lesquels est disponible haXe. Il suffit de lancer l’installeur et il s’occupe de toute l’installation ainsi que de mettre les variables d’environnement nécessaires. Sinon, il faut télécharger et dezipper haXe et Neko dans des dossiers et mettre les variables d’environnement du système à jour (classpath de haxe, neko…) afin qu’il soit accessible de partout. haxelib et plug-in FlashDevelop « haxelib » est une commande proche du « apt-get » sous Linux et qui s’occupe d’organiser les librairies de projets communautaires de haXe. (Pour plus d’informations http://lib.haxe.org/ ) Parmi ces « libs », il y a « haxefd » qui est un plug-in de projet haXe pour l’éditeur FlashDevelop sous Windows. FlashDevelop est disponible sur http://www.flashdevelop.org/downloads/releases/FlashDevelop-2.0.2-Final.exe Pour installer le plug-in pour FlashDevelop il suffit d’écrire en ligne de commande : haxelib install haxefd Une fois l’installation terminée, on exécute la librairie comme suit : haxelib run haxefd Nous pouvons désormais utiliser FlashDevelop avec un panneau d’affichage spécifique aux projets haXe et bénéficier de l’auto-completion. C. Compilateur en ligne de commande compatible Windows / Mac OS / Linux Le compilateur haXe est disponible sur chacun des grands systèmes d’exploitation et avec les mêmes options. Pour compiler un projet haXe, il suffit de taper en ligne de commande : haxe option[, option, …] exemple : haxe –main Main –swf index.swf –swf-header 640 :480 :24 :FFFFFF Support de cours « haxe et les outils open source de développement web » ère 1 partie : haXe langage universel Web 2007 / 2008 - M.Romecki 2 Ici on spécifie la classe contenant le point d’entrée du programme, on demande une compilation pour le Flash Player et on définit l’entête du SWF (la taille, la cadence et la couleur de fond) 1. Liste des paramètres Version haXe 1.18 • -js <file> : compile pour JavaScript • -swf <file> : compile pour le Flash Player • -neko <file> : compile pour la machine virtuelle NekoVM Paramètres communs à toutes les plateformes • -cp <chemin> : ajoute le chemin de classes à utiliser dans les sources • -lib <haxelib[:version]> utilise une bibliothèque de classes « haxelib » • -main <class> : classe du point d’entrée du programme • -D <var> : définie une constante de compilation o -D no-swf-compress : option spéciale pour ne pas compresser le fichier o -D network-sandbox : option spéciale pour rendre le fichier pour l’utilisation en communication sur le réseau • -resource <fichier@nom> : ajoute un fichier ressource • -exclude <fichier> : ne génère pas de code pour les classes listés dans ce fichier • -v : active le mode verbose (plus d’infos à la compilation) • -xml <file> : génère un XML de description des types • -debug : ajoute de informations de debug dans le code • -prompt : demande confirmation à chaque erreur • -cmd <commande>: exécute la commande lorsque la compilation a réussi • --override : s’assure de la présence du « override » dans les déclarations des méthodes • --next : sépare plusieurs compilations à la volée • --display : affiche un XML contenant l’auto-completion • --times : mesure le temps de compilation • --no-traces : omet le code « trace » • --no-output : compile mais ne génère aucun fichier • --altfmt : utilise un format d’erreurs alternatif • --auto-xml : créé un XML de description des types automatiquement pour chaque plateforme utilisée • --no-inline : refuse les méthodes et variables « inline » • -help Affiche la liste des options • --help Affiche la liste des options Paramètres pour la compilation des SWF • -swf-version <version> : attribue ou change la version du SWF (6,7,8,9) • -swf-header <entête> : attribue ou change l’entête du SWF (largeur:hauteur:ips:couleur) Support de cours « haxe et les outils open source de développement web » ère 1 partie : haXe langage universel Web 2007 / 2008 - M.Romecki 3 • -swf-lib <fichier> : ajoute un SWF en tant que bibliothèque multimédia • -as3 <dossier> : génère le code AS3 correspondant dans le dossier • --flash-strict : utilise une API Flash plus stricte • --flash-use-stage : affiche les objets présents sur la scène principale du SWF, bibliothèque multimedia • --gen-hx-classes <fichier> : génère les classes externes haXe depuis un fichier SWF version 9 Paramètres pour Neko • -x <fichier> raccourcis pour compiler et exécuter un fichier neko • --neko-source : conserve le code source neko généré 2. Le fichier « hxml » Pour compiler un projet haXe, on peut également utiliser un fichier hxml. Le fichier hxml est un fichier texte, de « build », contenant les options de(s) compilation(s) (une par ligne). Si l’installation de haXe s’est bien déroulée, ce fichier est automatiquement associé à haXe. Sinon, il suffit de taper : cheminDeHaXe/haxe monFichierHxml exemple : # commentaire # compilation pour le Flash Player -swf index.swf -main Main -debug -D network-sandbox # compilation pour la nekoVM --next -main Main -neko index.n Ici on compile une première fois un SWF, avec les informations debug supplémentaires et la possibilité de lire des donnés sur le réseau suivi d’un fichier pour la nekoVM. D. Référence du langage : 1. Les types de base La syntaxe est proche de celle de JavaScript / ActionScript. Un fichier source est composé d’un nom de paquet (déclaration package ) suivi de déclarations import et type . Les noms de paquet sont composés de plusieurs Support de cours « haxe et les outils open source de développement web » ère 1 partie : haXe langage universel Web 2007 / 2008 - M.Romecki 4 identifiants commençant par une minuscule, alors que les types commencent toujours par une majuscule. Il y a de nombreux types de base. Les deux plus importants sont les classes et les énumérations ( enums ). Voici quelques-uns des types de base comme déclarés dans la librairie standard: enum Void { } class Float { } class Int extends Float { } enum Bool { true; false; } enum Dynamic<T> { } Étudions chacun de ces types un par un: • Void est déclaré comme un enum . Une énumération liste un nombre de constructeurs valides. Une énumération vide comme Void n’a donc aucune instance. Cependant, cela reste un type valide qui peut être utilisé. • Float est une classe définissant un nombre à virgule flottante. Elle n’a aucune méthode, elle peut donc être grandement optimisée sur certaines plate- formes. • Int est un entier. Il ne dispose pas non plus de méthode, mais hérite de Float , ce qui signifie que partout où un Float est requis, vous pouvez utiliser un Int (le contraire n’étant pas vrai). • Bool est une énumération, comme Void , mais il dispose de deux instances, respectivement true et false . Comme vous pouvez le voir, même les types standards peuvent être facilement définis ou surchargés en utilisant le système de type haXe. Cela signifie que vous pouvez, de même, définir vos propres types. • Dynamic est une énumération avec un paramètre de type . Nous expliquerons comme utiliser les paramètres de type dans la suite de ce document. Voyons maintenant comment vous pouvez utiliser les classes en pratique. 2. Les classes Nous allons brièvement introduire la structure des classes, avec laquelle vous êtes peut-être familier si vous avez déjà fait de la programmation orientée objet: Support de cours « haxe et les outils open source de développement web » ère 1 partie : haXe langage universel Web 2007 / 2008 - M.Romecki 5 package my.pack; /* ceci définit la classe my.pack.MyClass */ class MyClass { // .... } Une classe peut avoir plusieurs variables ou méthodes . package my.pack; class MyClass { var id : Int; static var name : String = "MyString"; function foo() : Void { } static function bar( s : String, v : Bool ) : Void { } } Les variables et méthodes peuvent avoir les identifiants suivants (à placer avant leur définition) : • static : le champ appartient à la classe et non à ses instances .