Haxe : le secret le mieux gardé du développement multiplateforme

Publié: 2022-03-11

Le langage de programmation moderne Haxe est bien connu dans certains cercles, mais beaucoup de lecteurs n'en auront jamais entendu parler. Ne laissez pas son statut de niche vous tromper, cependant. Depuis sa première apparition en 2005, il a été mis à l'épreuve par ses partisans fidèles, quoique plutôt discrets. Il offre une combinaison pragmatique et mature de fonctionnalités pour le développement dans des contextes commerciaux, de jeux et même universitaires.

Disney, Hasbro et la BBC utilisent Haxe, alors pourquoi plus de développeurs n'en ont-ils pas entendu parler ? Peut-être que sa polyvalence signifie qu'il n'y a pas une seule «application tueuse» pour le langage de programmation Haxe.

Ou peut-être est-ce parce que l'une de ses premières applications tueuses - une voie de migration loin de la plate-forme Flash mourante - est un peu niche à certains égards. Le vénérable marché des jeux occasionnels s'est bousculé ces dernières années sous l'ombre de l'incertitude d'Adobe, et maintenant il est enfin clair que tout ce qui est basé sur Flash devra officiellement déménager d'ici 2020.

Les ingénieurs en logiciels d'entreprise et les développeurs Web - en fait, de nombreux développeurs de jeux aussi - peuvent entendre "Flash" et se déconnecter immédiatement. D'où la Fondation Haxe prenant l'IDE FlashDevelop et le rebaptisant davantage en tant qu'IDE Haxe, HaxeDevelop.

Mais il peut être difficile de se débarrasser d'une association, surtout lorsqu'elle continue d'être très pertinente. Par exemple, FlowPlay, dont les jeux sociaux comptent 75 millions d'utilisateurs, a choisi Haxe plutôt qu'Unity et HTML5 pour leur récente transition de deux ans de 1,4 million de lignes de code loin de Flash. (Plus de détails sont disponibles dans l'étude de cas.)

Il est peut-être difficile pour la Fondation Haxe de pouvoir mettre en évidence des cas d'utilisation comme celui-ci, tout en continuant à attirer les développeurs de logiciels autres que des jeux. Mais ne laissez pas cela vous dissuader d'une petite exploration.

Quel est le problème avec Haxe ?

Le projet Debian décrit Haxe comme un « langage de programmation universel ». Il y a plusieurs aspects à cela.

En général, le langage Haxe signifie réutiliser du (bon) code . J'entends par là : vous pouvez réutiliser le code Haxe sur de nombreuses plates-formes, vous pouvez l'intégrer avec du code Haxe existant et non-Haxe, et pour de bon , le langage Haxe met à disposition de nombreux paradigmes éprouvés, tels que la sécurité des types.

Poursuivant sur le thème de la polyvalence, cela se traduit par plusieurs grandes catégories de cas d'utilisation, la migration Flash mise à part, bien sûr.

Développer une application ou un jeu multiplateforme à partir de zéro. Haxe peut cibler les plates-formes de bureau, mobiles et Web à partir d'une base source en une seule langue. Les langages de programmation multiplateformes ne sont pas nouveaux, et il existe des solutions spécialisées pour les applications et les jeux de bureau et mobiles multiplateformes. Mais Haxe fait quelque chose d'un peu plus spécial dans le sens où il peut cibler non seulement plusieurs plates-formes, mais plusieurs paradigmes, par exemple HTML5 et les binaires natifs.

Une langue « pour les gouverner tous ». Pardonnez la référence à Tolkien, mais tout comme Node.js a salué une ère d'utilisation du même langage sur le front et le back-end d'un site Web, tout projet ressemblant à une architecture client-serveur peut utiliser Haxe pour les deux moitiés.

Par exemple, l'application Web FontStruct utilise Haxe à la fois pour dessiner sur un canevas HTML5 sur le front-end et via Java2D sur le back-end. (Mais comme mentionné, cette approche est facultative - Haxe fonctionne également bien avec le code non-Haxe existant, car il est conçu pour ne pas vous lier.) Maintenir la logique d'application, de jeu, d'entreprise et même de rendu cohérente dans tous les contextes, plates-formes, et les langues de sortie sont beaucoup plus faciles de cette façon.

Fuir JavaScript pour taper la sécurité. Attendez, n'est-ce pas à cela que sert TypeScript ? Oui, si vous souhaitez rester limité à la sortie JavaScript. Le langage Haxe, en revanche, peut également être transpilé en Java, C++, C#, Python et Lua, entre autres.

Pendant ce temps, le langage de programmation Haxe est assez facile à apprendre à partir de JavaScript - sa syntaxe ne signifie pas un énorme changement de paradigme comme, disons, celui de Rebol, nonobstant les avantages d'un tel changement. Le développeur principal de Haxe, le Dr Andy Li, a écrit une comparaison plus approfondie entre TypeScript et Haxe qui est toujours pertinente aujourd'hui, bien que les deux langages continuent d'évoluer.

Workflow assez rapide pour un compilateur. Il s'agit d'un élément ajouté plus récemment (bien que Neko ait été une option avant lui): HashLink est une machine virtuelle (VM) multiplateforme qui semble trouver un équilibre entre être extrêmement rapide à compiler, mais aussi suffisamment performante à l'exécution pour les choses comme les jeux 3D. Mais même du côté Web, Haxe peut surpasser TypeScript à la fois au moment de la compilation et au moment de l'exécution.

Une frontière passionnante. Haxe lui-même est open-source et possède une communauté active, avec de nouvelles fonctionnalités de langage ajoutées en permanence. Son propre sous-secret le mieux gardé pourrait bien être son système de macros au moment de la compilation, qui lui-même a de nombreux cas d'utilisation intéressants, vous permettant de méta-programmer à votre guise. (Je mentionne quelques exemples ci-dessous.)

Qui d'autre utilise Haxe ?

Pour commencer, les développeurs de jeux, bien sûr : Madden NFL Mobile, Evoland II, Double Kick Heroes… ces jeux et des centaines d'autres publiés ont été développés avec Haxe. Mais Haxe fait aussi des vagues en dehors de la sphère du jeu :

  • En 2014, TiVo a utilisé Haxe pour augmenter les performances de ses boîtiers TiVo Premiere de plus de 30 %.
  • Massive Interactive, dont les clients incluent DAZN et Telecine pour les systèmes de "télévision intelligente" basés sur Haxe (tous deux avec de grandes bases d'utilisateurs) utilise Haxe depuis des années. Leur architecte d'interface utilisateur Philippe Elsass m'a fait remarquer que, dans son expérience de travail avec de grands projets Web, Haxe a tendance à être plus simple à utiliser que TypeScript et d'environ un ordre de grandeur plus rapide à compiler.
  • Synolia utilise le langage Haxe pour son outil de personnalisation en ligne Heidi, qui est utilisé par les grandes marques françaises Carrefour et La Fnac, ainsi que Nickelodeon. Selon Synolia, la boîte à outils Haxe leur a permis de gérer efficacement la transition de Flash vers HTML5, tout en étant en mesure de saisir de nouvelles opportunités de développement commercial dans la sphère mobile. Heidi étant une application SaaS, la boîte à outils Haxe leur a permis de partager un code source commun entre les différentes couches et services de l'application.
  • L'entreprise multinationale Docler Holding est devenue un partenaire stratégique de la Fondation Haxe en 2017.

À quoi ressemble l'écosystème Haxe ?

En ce qui concerne les jeux et Haxe, c'est un monde très vaste en termes de frameworks et de bibliothèques open source. Des équipes indépendantes indépendantes aux studios prospères avec des clients internationaux, les utilisateurs de Haxe partagent du code partout :

  • Flambe est utilisé par des marques comme Disney, Coca-Cola et Toyota pour développer des jeux HTML5.
  • Heaps est le cadre de jeu haute performance derrière le récent hit de stratégie 3D Northgard.
  • Propulsant des millions de jeux mobiles, la bibliothèque de développement rapide awe6 est peut-être un joyau caché dans un joyau caché.
  • Kha, qui peut cibler la XBox One, la Nintendo Switch et la PlayStation 4 en plus des ordinateurs de bureau et mobiles, dispose de plus de 20 moteurs de jeu intégrés. Cela inclut Armory, qui a une intégration complète de Blender et est récemment devenu open-source.
  • Inspiré à l'origine de l'ancienne bibliothèque Flixel pour Flash, HaxeFlixel est le choix populaire derrière des jeux comme Defender's Quest .
  • Gamua's Starling, le framework utilisé pour le port Facebook d'Angry Birds il y a quelques années, dispose désormais d'un port Haxe open-source.
  • OpenFL, basé sur l'API Flash, sera également bientôt un moyen de cibler plusieurs consoles, à savoir la PlayStation 4, la PlayStation Vita, la XBox One et la Nintendo Switch, sans frais de licence supplémentaires. HaxeFlixel et Starling sont tous deux construits sur OpenFL, mais certains jeux sont développés directement sur OpenFL, comme le primé Papers, Please .
  • Le Native Media Engine, NME, à partir duquel OpenFL a été dérivé il y a de nombreuses années, publie toujours également des versions majeures.
  • Peut-être avez-vous vu quand HaxePunk (issu de FlashPunk) a été présenté sur le blog Release Radar de GitHub.
  • Le moteur physique Nape hautement optimisé est idéal pour tout moteur de jeu ou simulateur 2D nécessitant une physique plus sophistiquée.

Certes, la scène du développement de jeux est une partie plus visible de l'écosystème du langage Haxe. (Peut-être est-ce dû à la nature des game jams comme Ludum Dare ?) Mais les aspects commerciaux et même commerciaux se manifestent également. Par exemple:

  • Le cadre d'application modulaire hexMachina prend en charge l'utilisation du langage spécifique au domaine (DSL) et l'architecture modèle-vue-contrôleur (MVC), parmi de nombreuses autres fonctionnalités.
  • Le moteur de mise en page de l'interface utilisateur HaxeUI évolue activement et bénéficie d'un support d'entreprise. Des produits comme 3DVista et Kaizen for Pharma ont livré des applications de production avec.
  • Ce n'est pas le seul, mais la bibliothèque thx.core et ses proches fournissent des extensions à usage général à Haxe, un peu comme Lodash le fait pour JavaScript.
  • En parlant de JavaScript, les projets Haxe qui le ciblent peuvent tirer parti de Haxe Modular, qui a aidé à la fois Telecine et FlowPlay à faire évoluer leurs énormes projets tout en les maintenant à chargement rapide côté client.
  • L'écosystème de Haxe continue également d'évoluer pour s'interfacer avec les technologies actuelles ; par exemple, il existe maintenant une bibliothèque GraphQL.
  • Enfin, l'exemplaire Tinkerbell exploite le système de macros de Haxe pour toutes sortes de tâches utiles. Il dispose de cadres pour le routage Web, les tests unitaires et l'intégration de SQL, ainsi que des bibliothèques pour tout, de la modélisation et de l'analyse des sélecteurs CSS à la gestion de l'état réactif asynchrone/attente et à courbe d'apprentissage inférieure.

Ce ne sont que des points saillants de certaines des directions que les utilisateurs du langage Haxe ont prises jusqu'à présent. Haxe.org maintient une liste complète des bibliothèques triées par popularité que vous pouvez également parcourir par tag. Mais il convient également de souligner quelques projets que la Fondation Haxe elle-même entretient :

  • Pour l'angle DevOps, il y a le dépôt officiel Haxe Docker.
  • En termes de stabilité, même avec une mise à jour majeure de la version, Haxe 4 aura une aide à la compatibilité pour ceux dont les projets dépendent de Haxe 3.

Tout cela semble bien, mais qu'est-ce que cela fait d'avoir un environnement de développement sur votre système ?

Démarrage rapide de Haxe

Que ce soit pour Win, Mac ou Linux, la première étape consiste à télécharger Haxe. Le programme d'installation fournira différentes choses :

  1. Le compilateur Haxe lui-même , qui devrait vous permettre d'exécuter haxe depuis votre terminal ou votre invite de commande.
  2. La bibliothèque standard Haxe , permettant des bases de bas niveau, mais aussi une prise en charge générale de niveau supérieur. Par exemple, le traitement XML, ZIP et l'accès à MySQL sont tous facilités ici.
  3. Le gestionnaire de packages Haxelib , qui permet d'installer de nouveaux packages via la commande haxelib . (Remarque : il vaut également la peine de consulter lix pour une gestion de paquets plus avancée que celle fournie par Haxelib, surtout si vous envisagez d'utiliser Haxe dans un contexte professionnel.)
  4. Neko , une cible de machine virtuelle qui permet une recompilation et un débogage rapides et efficaces.

(Cela dit, il y a plus d'une façon de se configurer. Si vous avez déjà installé npm , par exemple, les instructions d'installation d'OpenFL ont la possibilité d'installer Haxe via les commandes Yeoman. Homebrew et Chocolatey fournissent également des chemins similaires.)

Quoi qu'il en soit, une fois que vous avez Haxe, vous pouvez l'utiliser seul depuis la ligne de commande, mais les développeurs optent souvent pour l'utilisation d'un IDE. FlashDevelop/HaxeDevelop est toujours principalement pris en charge sous Windows uniquement. La plupart des autres options sont multiplateformes (Win/Mac/Linux) :

  • Le plugin Haxe de VSCode est bien pris en charge.
  • IntelliJ IDEA dispose également d'un plugin Haxe.
  • Le framework de jeux Kha possède son propre IDE appelé Kode Studio (Win/Mac/Linux).
  • Sublime Text et Atom ont tous deux des plugins Haxe, tout comme de nombreux autres éditeurs, dont certains sont spécifiques à la plate-forme.

Pour les besoins de ce guide de démarrage rapide, nous utiliserons VSCode. Il peut être plus simple d'obtenir le pack d'extension Haxe via Ctrl+P et ext install haxe-extension-pack , mais si vous êtes un minimaliste, vous voudrez peut-être simplement ext install vshaxe pour le plugin de base Haxe lui-même, et choisissez celui qui vous convient d'autres parties du pack que vous pourriez vouloir.

Création d'un projet Haxe

Étant donné que le langage Haxe peut se transpiler vers de nombreuses cibles, la gestion de la manière dont cela est fait pour chacune est facilitée à l'aide d'un fichier de construction. Cependant, pour commencer, tout ce dont nous avons besoin est un seul fichier de classe Haxe avec une extension .hx .

En ce qui concerne le code que nous allons y mettre, prenons l'exemple Array Comprehension de try.haxe.org et mettons-le dans un fichier appelé Test.hx :

 class Test { static function main() { var a = [for (i in 0...10) i]; trace(a); // [0,1,2,3,4,5,6,7,8,9] var i = 0; var b = [while(i < 10) i++]; trace(b); // [0,1,2,3,4,5,6,7,8,9] } }

Maintenant, depuis l'emplacement de Test.hx , vous pouvez exécuter Haxe en mode interprétation, c'est-à-dire sans transpiler du tout, pour voir la sortie de ces deux appels trace() :

 $ haxe -main Test --interp Test.hx:4: [0,1,2,3,4,5,6,7,8,9] Test.hx:8: [0,1,2,3,4,5,6,7,8,9]

Super, ça marche !

Transpiler le code Haxe en JavaScript

Supposons que vous souhaitiez partager cela avec le monde via du JavaScript sur une de vos pages Web. C'est intégré à Haxe, et aussi simple que :

 $ haxe -main Test -js haxe-test.js

Si vous avez installé Node.js, vous pouvez vérifier la sortie de la ligne de commande comme suit :

 $ node my-cool-test.js [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

Sinon, le code dans haxe-test.js est prêt à l'emploi. Si vous deviez l'inclure dans une page Web, vous verriez la sortie dans la console de développement de votre navigateur Web lors du chargement.

Transpiler et compiler vers un binaire natif

Supposons que vous souhaitiez également un binaire natif pour le bureau sur lequel vous développez. Pour ce faire, nous allons transpiler vers la cible C++, afin que nous puissions ensuite utiliser C++ (en supposant que vous l'ayez installé) pour compiler la sortie .cpp en un binaire natif. Pour cela, nous aurons besoin hxcpp , nous devrons donc l'installer :

 $ haxelib install hxcpp

Après cela, nous pouvons faire la transpilation et la compilation à la fois avec cette commande :

 $ haxe -main Test -cpp bin

Et puis notre binaire est prêt à fonctionner :

 $ bin/Test Test.hx:4: [0,1,2,3,4,5,6,7,8,9] Test.hx:8: [0,1,2,3,4,5,6,7,8,9]

(Sous Windows, ce serait bin\Test.exe à la place.)

Création d'un fichier de construction Haxe (.hxml)

Malgré l'extension suggestive, les fichiers .hxml ne sont pas XML, contrairement aux fichiers .hxproj utilisés par HaxeDevelop et FlashDevelop, mais je ne couvrirai pas cela dans cet article. Voici à quoi ressemblerait un build-all.hxml pour accomplir le transpiling que nous avons fait ci-dessus :

 -main Test # tells Haxe our main class is Test (case-sensitive) --each # all of the above commands will be applied to each target -js haxe-test.js # our first transpilation target --next # no other options, time to move to the next target -cpp bin # our second transpilation (and compilation) target

Notez la différence dans les préfixes : -main , -js et -cpp sont chacun des paramètres que vous passeriez directement à haxe , tandis que --each et --next (deux traits d'union) sont à un méta-niveau, indiquant au compilateur quoi faire avec les autres paramètres.

Vous pouvez maintenant toucher à la fois les cibles JavaScript et natives simplement en exécutant haxe build-all.hxml .

Si vous vouliez transpiler en JavaScript, puis exécuter immédiatement le résultat à l'aide de Node, vous pouvez exécuter haxe run-js.hxml , où run-js.hxml ressemble à ceci :

 -main Test -js haxe-test.js -cmd node haxe-test.js

De même, un "build and run" pour le binaire natif ressemblerait à ceci (sous Linux, c'est-à-dire qu'une variante serait nécessaire pour Windows) :

 -main Test -cpp bin -cmd bin/Test

Qu'en est-il de VSCode ? Cette partie est simple : l'extension que vous avez installée récupérera automatiquement ces fichiers .hxml , vous donnant des tâches de construction générées automatiquement (sans tasks.json ) dans une liste déroulante, vous permettant de choisir le fichier de construction à utiliser.

Remarque : Soyez prudent si vous avez plusieurs fenêtres VSCode ouvertes, cependant, au moment d'écrire ces lignes, cela peut causer des problèmes avec la construction via Ctrl+B. (Vous pouvez toujours utiliser la ligne de commande, pas de problème.)

Haxe 4

Si vous avez suivi la configuration ci-dessus, vous avez peut-être remarqué que la page de téléchargement comprenait des liens vers les branches 3.x et 4.x du programme d'installation Haxe.

La version 4 de pointe du compilateur Haxe apporte de nombreuses nouvelles fonctionnalités. Dans un cas, cela témoigne également de la puissance de son système de macros : le compilateur Haxe manquait de support pour les fonctions lambda courtes, de sorte que la bibliothèque slambda a implémenté leur support via des macros. À partir de la version 4, la prise en charge est intégrée au compilateur et la bibliothèque est obsolète.

Alors, qu'est-ce que Haxe 4 apporte d'autre à la table?

Pas nécessairement trop d'accrocheurs. Au lieu de cela, Haxe 4 a de nombreuses petites améliorations. Après tout, Haxe lui-même est une technologie assez mature, développée par une équipe plus petite et plus concentrée, peut-être, que des projets similaires - et il est peut-être un peu exagéré d'appeler un projet similaire à Haxe.

Beaucoup de ses fonctionnalités les plus intéressantes sont déjà présentes depuis un certain temps maintenant. Par exemple, j'ai mentionné ci-dessus que Haxe fournit un flux de travail rapide via Neko ou HashLink. Mais depuis 2016, il comporte également un serveur de compilation. Cela signifie que pour les cibles non VM, la recompilation d'un projet qui dépend d'une grande bibliothèque sera beaucoup plus rapide grâce à la mise en cache en mémoire, qui peut également être exploitée par les IDE Haxe pour la complétion du code.

Mais Haxe 4, en particulier, verra :

  • L'exécution des macros est 4x plus rapide.
  • La prise en charge de PHP5 est abandonnée.
  • Certaines mises à jour syntaxiques effectuées que les utilisateurs de TypeScript apprécieront probablement, même si elles sont légèrement différentes entre les deux langues. À savoir, les fonctions fléchées et la nouvelle syntaxe de type de fonction.

Tutoriels Haxe

Bien que vous puissiez toujours vous plonger directement dans la documentation standard de l'API ou de la syntaxe de Haxe, il existe également des matériaux Haxe plus conviviaux pour les débutants.

Si vous préférez vous orienter avec des vidéos, le Haxe US Summit 2018 à Seattle a ses ateliers aux côtés de ceux des autres années, pour obtenir plus d'un point de vue d'initié.

Mais parfois, ce qui pourrait vous aider à démarrer plus facilement est un didacticiel plus spécifique. Comme un didacticiel du début à la fin sur la création d'un jeu d'exploration de donjons dans HaxeFlixel. Il existe également une série de didacticiels HaxeFlixel qui expliquent davantage ce qui se passe dans les coulisses au fur et à mesure. Du côté 3D, il y a un tutoriel Haxe sur la prise en main d'Armory.

Ou peut-être voulez-vous simplement un didacticiel Haxe sur le traitement rapide du XML - c'est l'un des nombreux didacticiels qui datent maintenant de quelques années, mais qui sont toujours d'actualité. Comme je l'ai mentionné plus tôt, bien qu'il existe de nombreuses frontières, de nombreuses bases du développement dans Haxe sont stables à ce stade, de sorte que les didacticiels ne deviennent pas nécessairement obsolètes très rapidement. (Là où ils le font, cela provient généralement d'une dépendance à une bibliothèque spécifique, pas au noyau Haxe lui-même.)


Comme vous pouvez le voir, vous pouvez prendre le langage Haxe - ou il peut vous emmener - dans de nombreuses directions différentes. J'espère que vous avez apprécié cette introduction au monde diversifié et fascinant de Haxe, et j'ai hâte d'entendre ce que vous finirez par faire avec la technologie de Haxe !

En relation: Haxe Review: Haxe 4 Caractéristiques et points forts