Le langage de programmation Haxe moderne est bien connu dans certains milieux, mais beaucoup de ceux qui lisent ce matériel n'en ont peut-être jamais entendu parler. Mais ne vous laissez pas tromper par son statut de niche. Depuis sa première apparition en 2005, ses fidèles, quoique plutôt calmes, l'ont connu au combat. Il propose une combinaison pragmatique et réfléchie de capacités adaptées au développement dans les affaires, les jeux et même à des fins académiques.
Disney, Hasbro et la BBC utilisent Haxe , alors pourquoi la plupart des développeurs n'en ont-ils pas entendu parler? Peut-être la polyvalence de Haxe signifie-t-elle qu'elle ne peut pas être appelée une seule caractéristique de tueur.
Ou peut-être que la raison en est que l'une des premières utilisations de Haxe est de l'utiliser comme moyen de migrer de la plate-forme Flash mourante, qui est plutôt une niche. Au cours des dernières années, le marché des jeux occasionnels est resté dans les limbes, mais on sait maintenant que d'ici 2020, Flash
cessera officiellement
d'être pris en charge par Adobe et que tout le contenu Flash sur le Web passera dans l'oubli.
Les ingénieurs en logiciels d'entreprise, les développeurs Web et de nombreux développeurs de jeux qui entendent le mot «Flash» peuvent immédiatement perdre tout intérêt pour le sujet. Cette attitude, par exemple, a été la raison de l'émergence de
HaxeDevelop - un IDE pour Haxe, qui est essentiellement
FlashDevelop , mais spécialisé pour le développement pour Haxe et de ses composants de distribution pour le développement pour ActionScript ont été supprimés.
Se débarrasser de telles associations que Haxe est le refuge d'anciens développeurs Flash est encore assez difficile, surtout quand elles (ces associations) restent pertinentes. Par exemple, FlowPlay, dont les jeux sociaux comptent 75 millions d'utilisateurs, a choisi Haxe, pas Unity ou JavaScript pur, pour traduire ses projets (avec une base de code de 1,4 million de lignes) de Flash en HTML5 (plus d'informations à ce sujet sont disponibles
dans ce matériau ).
C'est peut-être pourquoi il est difficile de distinguer les cas d'utilisation réussie de Haxe et d'intéresser les développeurs non-jeu dans ce cas. Mais faisons encore un peu de recherche.
Alors, qu'est-ce que c'est Haxe?
En général, l'
utilisation du langage Haxe signifie que vous pouvez réutiliser du (bon) code . J'entends par là que le code Haxe peut être réutilisé sur de nombreuses plates-formes, il peut être intégré au code Haxe existant et à d'autres langages, et, bien, le langage Haxe fournit de nombreux paradigmes éprouvés tels que la sécurité des types.
Poursuivant le sujet de l'universalité, nous énumérons les principales catégories de scénarios d'utilisation de Haxe (à l'exception de la migration depuis Flash, bien sûr).
Développement d'une application ou d'un jeu multiplateforme à partir de zéro. En utilisant le code Haxe, vous pouvez travailler avec des plates-formes de bureau, mobiles et Web. Il n'y a rien de nouveau dans les langages de programmation multiplateforme, et à part Haxe, il existe d'autres solutions spéciales pour
les applications et jeux multiplateformes de
bureau et
mobiles . Mais Haxe à cet égard est différent en ce sens qu'un code fonctionnera non seulement sur différentes plates-formes, mais dans différents paradigmes, par exemple, sous la forme d'une application HTML5 et d'un fichier exécutable natif.
Une langue "pour tout gouverner". Je m'excuse de faire référence à Tolkien, mais tout comme Node.js a proclamé l'ère de l'utilisation du même langage pour les parties client et serveur des sites Web, Haxe peut être utilisé pour les deux composants des applications client-serveur (tandis que le client et le serveur peuvent s'exécuter sur plates-formes différentes).
Par exemple, l'application Web
FontStruct utilise Haxe pour rendre les graphiques à la fois côté client (dans le canevas HTML5) et côté serveur (à l'aide de Java2D). Mais, comme déjà mentionné, il n'est pas nécessaire de suivre ce chemin -
Haxe ne contraint pas vos capacités et vous permet de travailler en conjonction avec du code existant écrit dans un autre langage. Cette approche simplifie considérablement le maintien de la cohérence logique et même le rendu des graphiques dans tous les contextes, plates-formes et langues cibles.
Abandon de JavaScript au profit de la sécurité des types. Attendez une minute, n'est-ce pas déjà TypeScript? Oui, si vous souhaitez vous limiter à une sortie JavaScript uniquement. Haxe, à son tour, peut également être compilé en code en Java, C ++, C #, Python, Lua
et d'autres langages .
Dans le même temps, le langage Haxe lui-même est assez simple à apprendre pour ceux qui connaissent déjà les bases de JavaScript; sa syntaxe n'oblige pas le programmeur à changer le paradigme de la pensée, comme, par exemple, dans le cas de Rebol. Andy Lee (l'un des principaux développeurs de Haxe) a écrit une
comparaison détaillée de TypeScript et Haxe , qui reste pertinente aujourd'hui, bien que les deux langages poursuivent leur développement.
Processus de compilation et de test assez rapide. Récemment ajoutée à l'écosystème Haxe, la machine virtuelle multiplateforme HashLink vous permet de trouver un équilibre entre le temps de compilation (la compilation sous HashLink est beaucoup plus rapide que la compilation sous C ++) et la vitesse d'exécution du code suffisante pour des domaines tels que la création de jeux 3D (auparavant, à ces fins, il pouvait utiliser la machine virtuelle Neko, qui est cependant nettement inférieure à HashLink en termes de vitesse). Mais même dans le domaine du développement Web,
Haxe peut surpasser TypeScript en termes de vitesse de compilation et d'exécution du code généré .
Frontière passionnante. Le code source de Haxe est ouvert, de nouvelles constructions de langage y sont constamment ajoutées, et il a une communauté active. Et son plus grand secret est un
système de macros exécutées au moment de la compilation et permettant la méta-programmation comme l'âme le souhaite (je donnerai quelques exemples de bibliothèques utilisant des macros ci-dessous).
Qui utilise Haxe?
Bien sûr, les développeurs de jeux:
Madden NFL Mobile ,
Evoland II ,
Double Kick Heroes ... ces jeux et des centaines d'autres jeux ont été développés en utilisant Haxe. Mais Haxe est également utilisé en dehors du domaine du jeu:
- En 2014, l'utilisation de Haxe a permis à TiVo d'améliorer de plus de 30% les performances du décodeur TiVo Premiere .
- Massive Interactive, dont les clients sont DAZN et Telecine, utilise avec succès Haxe pour développer des logiciels pour les systèmes Smart TV. Sur la base de son expérience avec de grands projets Web, Philip Elsass (Massive Interactive UI Architect), dans l'un de ses rapports, a noté que Haxe est généralement plus facile à utiliser que TypeScript et se traduit également en JavaScript plus rapidement par un ordre de grandeur.
- Synolia utilise Haxe pour son outil en ligne Heidi , qui est utilisé par les grandes marques françaises Carrefour et La Fnac, ainsi que Nickelodeon. La boîte à outils Haxe a permis à Synolia de migrer de Flash vers HTML5 et a également fourni de nouvelles opportunités commerciales pour les entreprises mobiles. Le choix de Haxe nous a permis de réutiliser du code commun à travers les différentes couches et services de Heidi.
- En 2017, Docler Holding est devenu un partenaire stratégique de la Fondation Haxe .
Qu'est-ce que l'écosystème Haxe?
En ce qui concerne les jeux et Haxe, le choix des bibliothèques et des frameworks open source est assez large. Les utilisateurs de Haxe, qu'ils soient des équipes indépendantes indépendantes ou des studios à succès avec des clients internationaux, partagent activement leur code:
- Flambe a été utilisé pour développer des jeux HTML5 par des marques telles que Disney, Coca-Cola et Toyota.
- Heaps est un cadre de jeu 3D / 2D qui sous-tend des jeux indépendants à succès comme Northgard et Dead Cells .
- La bibliothèque de développement rapide awe6 est peut-être le joyau caché même pour la communauté Haxe.
- Kha est un framework multimédia ultra-portable avec la capacité de construire des projets non seulement sur OS de bureau et mobile et HTML5, mais aussi sur XBox One, Nintendo Switch et Playstation 4. Plus de 20 moteurs de jeu ont été créés sur sa base, le plus intéressant étant Armoury - 3D -moteur avec intégration complète avec Blender .
- HaxeFlixel , calqué sur l'ancien moteur Flash Flixel, est un choix populaire pour créer de petits jeux, par exemple, pour Defender's Quest .
- Starling, à l'origine un framework ActionScript utilisé pour le port Angry Birds pour Facebook, dispose désormais également d'un port sur Haxe .
- OpenFL , qui implémente l'API Flash, vous permet également de créer des applications pour consoles (PlayStation 4, PlayStation Vita, XBox One et Nintendo Switch), OS de bureau et mobile, HTML5. HaxeFlixel et Starling Port fonctionnent au-dessus d'OpenFL. Un exemple de jeu développé directement sur OpenFL est les articles primés , s'il vous plaît .
- Le Native Media Engine (NME), dont OpenFL s'est séparé il y a plusieurs années, continue d'être pris en charge et des mises à jour sont en cours de publication.
- HaxePunk (issu d'un autre moteur Flash - FlashPunk) - peut-être pourriez-vous en parler dans l'une des versions de Github Release Radar .
- Nape est un moteur physique 2D hautement optimisé, idéal pour les jeux et les simulations avec une physique complexe.
Bien sûr, la création de jeux est l’application la plus importante de Haxe. Mais l'écosystème Haxe possède également des bibliothèques et des outils pour créer des applications commerciales et d'entreprise, par exemple:
- hexMachina est un cadre de développement d'applications modulaire qui prend en charge l'utilisation du langage DSL (Domain- Specific Language ) et de l'architecture MVC (Model-View-Controller), ainsi que de nombreuses autres fonctions. Créé et utilisé par Docler Holding.
- HaxeUI est un moteur de balisage d'interface utilisateur, se développe activement et bénéficie du support de l'entreprise. Des exemples de son utilisation sont des produits tels que 3DVista et Kaizen for Pharma . HaxeUI est intéressant en ce qu'il se compose d'un module de noyau et de modules séparés qui implémentent le rendu de l'interface utilisateur en utilisant divers moyens: composants HTML, wxWidgets, Windows Forms, éléments natifs de l'interface utilisateur Android, etc.
- La famille de bibliothèques thx fournit des extensions de langage universelles pour Haxe; la bibliothèque Lodash peut être appelée son homologue dans le monde JavaScript.
- En parlant de JavaScript et de projets Haxe compilés par JavaScript, il convient de mentionner l'outil Haxe Modular , qui a aidé Telecine et FlowPlay à mettre à l'échelle leurs énormes projets et à fournir un chargement rapide côté client.
- L'écosystème Haxe vise également à favoriser les synergies avec les technologies modernes. Comme exemple de mouvement dans cette direction, nous pouvons appeler la bibliothèque GraphQL .
- Enfin, la collection de bibliothèques Tinkerbell , utilisant un système de macros, fournit des outils pour toutes sortes de tâches: des cadres pour le routage Web, les tests unitaires et l'incorporation SQL, ainsi que des bibliothèques pour presque tout: du modèle CSS et de l'analyse à asynchrone / attente et traitement réactif états avec une courbe d'apprentissage plus lisse.
Seuls les projets les plus intéressants créés par les utilisateurs Haxe sont répertoriés ici.
Une liste complète des bibliothèques triées par popularité (il est également possible de trier les bibliothèques par balises) est disponible sur le site officiel. Mais il convient également de mentionner quelques projets que la Fondation Haxe soutient elle-même:
- Pour DevOps, l' image Haxe officielle de Docker peut sembler intéressante.
- La bibliothèque h3compat offre une compatibilité descendante partielle entre Haxe 4 et Haxe 3 et est conçue pour aider les utilisateurs lors de la mise à jour des projets à travailler avec la nouvelle version du langage.
Tout cela sonne bien, mais que faut-il pour commencer à développer sur Haxe?
Démarrage rapide avec Haxe
Que vous travailliez sur Windows, MacOS ou Linux, la première chose à faire est de
télécharger le programme d'installation Haxe , qui comprend:
- Compilateur Haxe, qui peut être démarré avec la commande
haxe
depuis le terminal ou la ligne de commande. - La bibliothèque standard Haxe , qui fournit des fonctions de bas niveau et des structures de données à usage général. Par exemple, les classes de traitement des archives XML et ZIP, l'accès à MySQL.
- Gestionnaire de paquets Haxelib qui vous permet d'installer de nouvelles bibliothèques (à la fois depuis le référentiel officiel et depuis Git ou Mercurial). Lancé par la commande
haxelib
(vous pouvez également être intéressé par lix , un gestionnaire de paquets plus avancé que Haxelib). - Neko est une machine virtuelle qui peut être utile dans le débogage de projets grâce à une compilation rapide.
De plus, il existe d'autres façons d'installer Haxe sur votre système, par exemple en
utilisant npm , Homebrew ou Chocolatey.
Après l'installation, Haxe peut être utilisé directement à partir de la ligne de commande, mais il est préférable, bien sûr, de le faire à l'aide de l'EDI. FlashDevelop / HaxeDevelop est toujours principalement pris en charge uniquement sous Windows. La plupart des autres options disponibles sont multi-plateformes (Win / Mac / Linux):
- Le plugin Haxe pour VSCode est activement pris en charge.
- Il existe également un plugin Haxe pour IntelliJ IDEA .
- Kha (le framework mentionné précédemment pour la création de jeux) a son propre environnement de développement - Kode Studio (Win / Mac / Linux). Cet IDE est un fork de VSCode avec des fonctionnalités supplémentaires pour le débogage de projets.
- Pour Sublime Text et Atom, ainsi que de nombreux autres éditeurs , vous pouvez également trouver les plugins Haxe correspondants, bien que certains d'entre eux ne fonctionnent que sur certaines plates-formes.
Dans ce court didacticiel, nous utiliserons VSCode. Le moyen le plus simple consiste à installer immédiatement l'ensemble du package de plug-in pour la prise en charge de Haxe avec la commande
ext install haxe-extension-pack
dans le panneau d'accès rapide VSCode (appelé par
Ctrl+P
), mais si vous êtes minimaliste, vous pouvez vous limiter au plug-in le plus basique -
ext install vshaxe
(autres composants vous pouvez toujours réinstaller plus tard).
Création d'un projet Haxe
La gestion du processus de compilation du code Haxe pour différentes plates-formes est plus facile à l'aide d'un fichier système de construction. Cependant, pour commencer, nous n'aurons besoin que d'un fichier avec du code Haxe avec l'extension
.hx
.
Quant au code, prenons l'exemple «Generate Arrays» de
try.haxe.org (un sandbox en ligne où vous pouvez rapidement vérifier comment un code particulier fonctionnera) et enregistrez-le dans un fichier appelé
Test.hx
:
class Test { static function main() { var a = [for (i in 0...10) i]; trace(a);
Maintenant, nous pouvons exécuter le compilateur Haxe en mode d'interprétation (c'est-à-dire sans générer de code pour aucune plateforme) et voir les résultats des appels à la fonction
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]
Génial, ça marche!
Transpilation Haxe en JavaScript
Supposons que vous souhaitiez partager le code discuté dans l'exemple avec le monde entier, générer du code JavaScript à partir de celui-ci et utiliser le code résultant sur votre page Web. Dans Haxe, cela se fait avec une seule commande:
$ haxe -main Test -js haxe-test.js
Si Node.js est installé, vous pouvez vérifier le fonctionnement du code JavaScript généré à partir de la ligne de commande:
$ node my-test.js [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
Ou vous pouvez connecter le
my-test.js
terminé à une page Web, puis lorsque vous le téléchargerez, nous verrons le même résultat, mais déjà dans la console du développeur intégrée au navigateur.
Compilation et compilation dans un fichier exécutable
Supposons que vous ayez également besoin d'un exécutable binaire pour le système sur lequel vous exécutez. Pour ce faire, nous devons transposer le code Haxe en C ++, puis compiler les fichiers
.cpp
résultants dans un fichier exécutable (à condition que le compilateur soit installé, sous Windows, il est plus facile d'installer Microsoft Visual Studio pour cela). Pour effectuer ces tâches, nous avons besoin de la bibliothèque
hxcpp
, que nous installons avec la commande:
$ haxelib install hxcpp
Avec cette bibliothèque, le code est compilé et compilé avec une seule commande:
$ haxe -main Test -cpp bin
Après quoi notre fichier exécutable peut être lancé:
$ 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, la commande à exécuter sera légèrement différente
bin\Test.exe
).
Création d'un fichier de construction Haxe (.hxml)
Bien que les fichiers de construction du projet Haxe aient l'extension
.hxml
, ce ne sont pas des fichiers XML (contrairement aux fichiers
.hxproj
utilisés par HaxeDevelop et FlashDevelop, mais nous n'en parlerons pas). Voici à quoi
build-all.hxml
fichier
build-all.hxml
pour effectuer la transpilation:
-main Test # Haxe, Test (, )
--each # , ,
-js haxe-test.js # JS
--next # ,
-cpp bin # , ( ) - C++
Faites attention à la différence dans les préfixes:
-main
,
-js
et
-cpp
- chacun de ces paramètres est passé directement à
--each
, et
--each
et
--next
(avec deux tirets) sont des paramètres de niveau méta, ils indiquent au compilateur quoi faire avec d'autres paramètres.
Maintenant, pour construire le programme en JavaScript et dans le fichier exécutable, il suffit d'exécuter simplement la
haxe build-all.hxml
.
Si vous souhaitez traduire le code en JavaScript et exécuter immédiatement le résultat à l'aide de Node, vous pouvez exécuter la
haxe run-js.hxml
, le contenu du fichier
run-js.hxml
ressemblera à ceci:
-main Test -js haxe-test.js -cmd node haxe-test.js
De même, le fichier «build and run» de l'exécutable ressemblera à ceci (pour Windows, une petite modification sera nécessaire, comme nous l'avons déjà mentionné):
-main Test -cpp bin -cmd bin/Test
Et VSCode? Ici, tout est simple: l'extension que nous avons installée pour VSCode récupérera automatiquement les fichiers hxml et générera les tâches correspondantes pour la construction du projet (sans utiliser
tasks.json
).
Haxe 4
Lors de la configuration de Haxe, vous avez peut-être remarqué que la page de téléchargement contient des liens vers les versions 3.x et 4.x.
La dernière (quatrième) version du compilateur Haxe apporte de nombreuses nouvelles fonctionnalités. L'une de ces fonctions témoigne des vastes possibilités du système macro, permettant de compléter le langage avec de nouveaux designs: Haxe ne supportait pas les fonctions lambda courtes auparavant, donc
la bibliothèque slambda est apparue , qui implémentait leur support en utilisant le système macro. À partir de la quatrième version, leur prise en charge est intégrée au compilateur et la nécessité d'utiliser cette bibliothèque a disparu.
Quoi de neuf dans Haxe 4?En fait, il n'y a pas tant de changements majeurs. Au lieu de cela, Haxe 4 apporte de nombreuses petites améliorations. Après tout, Haxe est une technologie assez mature développée par une équipe restreinte et déterminée, et trouver un projet similaire à Haxe est assez difficile.
Beaucoup des fonctionnalités les plus intéressantes de Haxe ne sont pas nouvelles. Par exemple, j'ai mentionné plus tôt que l'utilisation des machines virtuelles Neko et HashLink permet un processus de développement rapide. Mais depuis 2016, un serveur de compilation est apparu dans le compilateur, grâce auquel le projet est recompilé (pas pour les machines virtuelles) maintenant beaucoup plus rapidement (la mise en cache en RAM est utilisée), en plus, le serveur de compilation peut être utilisé par l'IDE pour compléter automatiquement le code (par exemple, le plugin fonctionne sous VSCode).
Mais, en particulier, les changements suivants apparaîtront dans Haxe 4:
Matériel d'apprentissage Haxe
En plus de la documentation sur l'
API de la bibliothèque standard et la
syntaxe du langage sur le site Haxe, des
supports conçus pour les débutants sont également disponibles , en plus, je ne peux que mentionner le
site dédié au développement sur Haxe pour le web .
Si vous préférez apprendre à partir de documents vidéo, alors pour vous,
les apparitions vidéo disponibles du Haxe Summit US 2018, tenu à Seattle, ainsi que les enregistrements d'autres conférences.
Mais parfois, un guide sur un sujet spécifique peut vous être utile. Par exemple,
sur la création d'un jeu dans le style d'un robot de donjon dans HaxeFlixel . HaxeFlixel propose également une série de documents expliquant les bases du travail avec le moteur. Si vous êtes intéressé par la 3D, vous pouvez ici offrir un
guide sur la façon de commencer avec Armoury .
Ou peut-être avez-vous simplement besoin d'un
guide pour un traitement XML rapide - c'est l'un de ces articles qui ont déjà plusieurs années, mais ils restent pertinents. Malgré le fait que Haxe évolue constamment, de nombreuses bases de développement restent inchangées, de sorte que l'ancien matériel de formation ne signifie pas toujours qu'il est obsolète (les matériaux sur des bibliothèques spécifiques, plutôt que le noyau Haxe, deviennent généralement obsolètes).
Comme vous pouvez le voir, Haxe peut être utilisé dans différentes zones (et peut-être que Haxe vous mènera vers une nouvelle zone). J'espère que vous avez apprécié cette introduction au monde Haxe et j'ai hâte de savoir comment vous utilisez Haxe!