Haxe: Das bestgehütete Geheimnis der plattformübergreifenden Entwicklung
Veröffentlicht: 2022-03-11Die moderne Programmiersprache Haxe ist in manchen Kreisen bekannt, doch viele, die dies lesen, werden noch nie davon gehört haben. Lassen Sie sich jedoch nicht von seinem Nischenstatus täuschen. Seit es 2005 zum ersten Mal erschien, hat es sich durch seine treue – wenn auch eher ruhige – Gefolgschaft bewährt. Es verfügt über eine pragmatische und ausgereifte Kombination von Funktionen für die Entwicklung in Geschäfts-, Spiele- und sogar akademischen Kontexten.
Disney, Hasbro und die BBC verwenden Haxe, also warum haben nicht mehr Entwickler davon gehört? Vielleicht bedeutet seine Vielseitigkeit, dass es keine einzige „Killer-App“ für die Programmiersprache Haxe gibt.
Oder vielleicht liegt es daran, dass eine seiner frühesten Killer-Apps – ein Migrationspfad weg von der sterbenden Flash-Plattform – in gewisser Weise eine kleine Nische ist. Der ehrwürdige Casual-Games-Markt hat in den letzten Jahren unter dem Schatten der Unsicherheit von Adobe gelitten, und jetzt ist endlich klar, dass alles, was Flash-basiert ist, bis 2020 offiziell verschoben werden muss.
Business-Software-Ingenieure und Webentwickler – tatsächlich viele Spieleentwickler – könnten „Flash“ hören und sofort abschalten. Daher hat die Haxe Foundation die FlashDevelop-IDE genommen und sie mehr als Haxe-IDE, HaxeDevelop, umbenannt.
Aber es kann schwierig sein, eine Assoziation abzuschütteln – besonders wenn sie weiterhin ziemlich relevant ist. Zum Beispiel hat FlowPlay, dessen Social Games 75 Millionen Nutzer haben, Haxe gegenüber Unity und HTML5 für den kürzlichen zweijährigen Übergang von 1,4 Millionen Codezeilen weg von Flash ausgewählt. (Weitere Details finden Sie in der Fallstudie.)
Vielleicht ist es für die Haxe Foundation schwierig, solche Anwendungsfälle hervorzuheben und gleichzeitig Entwickler von Nicht-Spiele-Software anzusprechen. Aber lassen Sie sich dadurch nicht von einer kleinen Erkundung abhalten.
Was hat es mit Haxe auf sich?
Das Debian-Projekt beschreibt Haxe als „universelle Programmiersprache“. Das hat mehrere Aspekte.
Im Allgemeinen bedeutet die Haxe-Sprache die Wiederverwendung von (gutem) Code . Damit meine ich: Sie können Haxe-Code auf vielen Plattformen wiederverwenden, Sie können ihn in bestehenden Haxe- und Nicht-Haxe-Code integrieren, und im Übrigen stellt die Haxe-Sprache viele bewährte Paradigmen zur Verfügung, wie z. B. Typsicherheit.
Um das Vielseitigkeitsthema fortzusetzen, führt dies zu mehreren Hauptkategorien von Anwendungsfällen – abgesehen von der Flash-Migration natürlich.
Entwicklung einer plattformübergreifenden App oder eines Spiels von Grund auf neu. Haxe kann Desktop-, Mobil- und Webplattformen aus einer einsprachigen Quellenbasis ansprechen. Plattformübergreifende Programmiersprachen sind nichts Neues, und es gibt spezielle Lösungen für plattformübergreifende Desktop- und mobile Apps und Spiele. Aber Haxe macht etwas Besonderes in dem Sinne, dass es nicht nur auf mehrere Plattformen abzielen kann, sondern auch auf mehrere Paradigmen, z. B. HTML5 und native Binärdateien.
Eine Sprache, „um sie alle zu beherrschen“. Verzeihen Sie die Tolkien-Referenz, aber genau wie Node.js eine Ära der Verwendung derselben Sprache auf dem Front- und Backend einer Website einläutete, kann jedes Projekt mit etwas, das einer Client-Server-Architektur ähnelt, Haxe für beide Hälften verwenden.
Beispielsweise nutzt die Web-App FontStruct Haxe sowohl zum Zeichnen auf einem HTML5-Canvas im Frontend als auch per Java2D im Backend. (Aber wie bereits erwähnt, ist dieser Ansatz optional – Haxe spielt auch gut mit vorhandenem Nicht-Haxe-Code, da er darauf ausgelegt ist, Sie nicht zu binden.) App, Spiel, Geschäft und sogar Rendering-Logik konsistent über alle Kontexte, Plattformen hinweg zu halten, und Ausgabesprachen ist auf diese Weise viel einfacher.
Flucht vor JavaScript zur Typsicherheit. Warten Sie, ist TypeScript nicht dafür da? Ja, wenn Sie sich auf die JavaScript-Ausgabe beschränken möchten. Die Haxe-Sprache hingegen kann unter anderem auch nach Java, C++, C#, Python und Lua transpilieren.
Inzwischen ist die Programmiersprache Haxe, die von JavaScript kommt, leicht zu erlernen – ihre Syntax bedeutet keinen großen Paradigmenwechsel wie beispielsweise der von Rebol, ungeachtet der Vorteile eines solchen Wandels. Haxe-Core-Entwickler Dr. Andy Li schrieb einen eingehenderen Vergleich zwischen TypeScript und Haxe, der auch heute noch relevant ist, obwohl sich beide Sprachen weiterentwickeln.
Ziemlich schneller Workflow für einen Compiler. Dies ist ein kürzlich hinzugefügtes Stück (obwohl Neko davor eine Option war): HashLink ist eine plattformübergreifende virtuelle Maschine (VM), die ein Gleichgewicht zu finden scheint zwischen extrem schnell zu kompilieren und gleichzeitig zur Laufzeit leistungsfähig genug für Dinge wie 3D-Spiele. Aber auch auf der Webseite kann Haxe TypeScript sowohl zur Kompilierzeit als auch zur Laufzeit übertreffen.
Eine aufregende Grenze. Haxe selbst ist Open Source und hat eine aktive Community, wobei ständig neue Sprachfunktionen hinzugefügt werden. Sein eigenes bestgehütetes Untergeheimnis könnte nur sein Makrosystem zur Kompilierzeit sein, das selbst viele interessante Anwendungsfälle hat, mit denen Sie nach Herzenslust Meta-Programme erstellen können. (Einige Beispiele nenne ich weiter unten.)
Wer verwendet sonst noch Haxe?
Für den Anfang natürlich Spieleentwickler: Madden NFL Mobile, Evoland II, Double Kick Heroes … diese und Hunderte anderer veröffentlichter Spiele wurden mit Haxe entwickelt. Aber Haxe schlägt auch außerhalb der Gaming-Sphäre Wellen:
- Bereits 2014 nutzte TiVo Haxe, um die Leistung seiner TiVo Premiere-Boxen um über 30 % zu steigern.
- Massive Interactive, zu dessen Kunden DAZN und Telecine für Haxe-basierte „Smart-TV“-Systeme (beide mit großen Nutzerzahlen) gehören, nutzt Haxe seit Jahren. Ihr UI-Architekt Philippe Elsass bemerkte zu mir, dass Haxe nach seiner Erfahrung mit großen Webprojekten tendenziell einfacher zu verwenden als TypeScript und um eine Größenordnung schneller zu kompilieren ist.
- Synolia verwendet die Haxe-Sprache für ihr Online-Anpassungstool Heidi, das von den großen französischen Marken Carrefour und La Fnac sowie von Nickelodeon verwendet wird. Laut Synolia ermöglichte das Haxe-Toolkit es ihnen, den Übergang von Flash zu HTML5 effizient zu verwalten und gleichzeitig neue Geschäftsentwicklungsmöglichkeiten im mobilen Bereich zu nutzen. Da Heidi eine SaaS-Anwendung ist, ermöglichte das Haxe-Toolkit ihnen, gemeinsamen Quellcode zwischen den verschiedenen Schichten und Diensten der App zu teilen.
- Das multinationale Unternehmen Docler Holding wurde 2017 strategischer Partner der Haxe Foundation.
Wie ist das Haxe-Ökosystem?
Wenn es um Spiele und Haxe geht, ist es eine weite, weite Welt in Bezug auf Open-Source-Frameworks und -Bibliotheken. Von unabhängigen Indie-Teams bis hin zu erfolgreichen Studios mit internationalen Kunden teilen Haxe-Benutzer Code überall:
- Flambe wird von Marken wie Disney, Coca-Cola und Toyota zur Entwicklung von HTML5-Spielen verwendet.
- Heaps ist das leistungsstarke Spiel-Framework hinter dem jüngsten 3D-Strategie-Hit Northgard.
- Die Rapid Development Library awe6, die Millionen von mobilen Gameplays unterstützt, ist vielleicht ein verstecktes Juwel in einem versteckten Juwel.
- Kha, das neben Desktop und Mobilgeräten auch auf XBox One, Nintendo Switch und PlayStation 4 abzielen kann, verfügt über mehr als 20 Game-Engines, die darauf aufbauen. Dazu gehört auch Armory, das über eine vollständige Blender-Integration verfügt und kürzlich selbst Open Source wurde.
- Ursprünglich der alten Flixel-Bibliothek für Flash nachempfunden, ist HaxeFlixel die beliebte Wahl hinter Spielen wie dem Sleeper-Hit Defender's Quest .
- Gamuas Starling, das Framework, das vor einigen Jahren für die Facebook-Portierung von Angry Birds verwendet wurde, hat jetzt eine Open-Source-Portierung von Haxe.
- OpenFL, das auf der Flash-API basiert, wird auch bald eine Möglichkeit sein, mehrere Konsolen – nämlich die PlayStation 4, die PlayStation Vita, die XBox One und die Nintendo Switch – ohne zusätzliche Lizenzgebühren anzusprechen. HaxeFlixel und Starling bauen beide auf OpenFL auf, aber einige Spiele werden direkt auf OpenFL entwickelt, wie das preisgekrönte Papers, Please .
- Auch die Native Media Engine NME, von der OpenFL vor vielen Jahren abgezweigt wurde, veröffentlicht immer noch Hauptversionen.
- Vielleicht haben Sie gesehen, wie HaxePunk (von FlashPunk abstammend) im Release Radar-Blog von GitHub vorgestellt wurde.
- Die hochoptimierte Nape Physics Engine eignet sich hervorragend für alle 2D-Game-Engines oder -Simulatoren, die eine ausgefeiltere Physik benötigen.
Zugegeben, die Spieleentwicklungsszene ist ein sichtbarerer Teil des Haxe-Sprachökosystems. (Vielleicht ist dies der Natur von Game Jams wie Ludum Dare zu verdanken?) Aber auch die geschäftlichen und sogar unternehmerischen Seiten zeigen sich. Zum Beispiel:
- Das modulare App-Framework hexMachina unterstützt neben vielen anderen Funktionen die domänenspezifische Sprachverwendung (DSL) und die Model-View-Controller-Architektur (MVC).
- Die UI-Layout-Engine HaxeUI entwickelt sich aktiv weiter und wird vom Unternehmen unterstützt. Produkte wie 3DVista und Kaizen for Pharma haben Produktions-Apps damit ausgeliefert.
- Es ist nicht die einzige, aber die thx.core-Bibliothek und ihre Verwandten bieten allgemeine Erweiterungen für Haxe, ähnlich wie Lodash es für JavaScript tut.
- Apropos JavaScript: Haxe-Projekte, die darauf abzielen, können von der Nutzung von Haxe Modular profitieren, das sowohl Telecine als auch FlowPlay dabei half, ihre enormen Projekte zu skalieren und sie gleichzeitig auf der Clientseite schnell zu laden.
- Das Ökosystem von Haxe entwickelt sich auch weiter, um mit aktuellen Technologien zu interagieren; zB gibt es jetzt eine GraphQL-Bibliothek.
- Schließlich nutzt das beispielhafte Tinkerbell das Makrosystem von Haxe für alle möglichen nützlichen Aufgaben. Es verfügt über Frameworks für Web-Routing, Unit-Tests und das Einbetten von SQL sowie Bibliotheken für alles, von Templating und CSS-Selektor-Parsing bis hin zu Async/Await und reaktiver Zustandsbehandlung mit niedrigerer Lernkurve.
Dies sind nur Highlights einiger Richtungen, die Benutzer der Haxe-Sprache bisher eingeschlagen haben. Haxe.org führt eine vollständige Liste von Bibliotheken, sortiert nach Beliebtheit, die Sie auch nach Tags durchsuchen können. Aber es lohnt sich auch, einige Projekte hervorzuheben, die die Haxe Foundation selbst unterhält:
- Für den DevOps-Blickwinkel gibt es das offizielle Haxe Docker-Repo.
- In Bezug auf die Stabilität wird Haxe 4 selbst bei einem größeren Versionsupdate einige Kompatibilitätshilfen für diejenigen bieten, deren Projekte von Haxe 3 abhängig sind.
Das klingt alles gut, aber wie ist es, eine Entwicklungsumgebung auf Ihrem System zum Laufen zu bringen?

Haxe-Schnellstart
Ob für Win, Mac oder Linux, der erste Schritt ist, Haxe herunterzuladen. Der Installer dort wird ein paar verschiedene Dinge bereitstellen:
- Der Haxe-Compiler selbst , mit dem Sie
haxe
von Ihrem Terminal oder Ihrer Eingabeaufforderung aus ausführen können. - Die Haxe-Standardbibliothek , die Grundlagen auf niedriger Ebene, aber auch allgemeine Unterstützung auf höherer Ebene ermöglicht. Hier werden beispielsweise XML, ZIP-Verarbeitung und MySQL-Zugriff erleichtert.
- Der Haxelib-Paketmanager , mit dem Sie neue Pakete über den Befehl
haxelib
installieren können. (Hinweis: Es lohnt sich auch, lix für eine fortgeschrittenere Paketverwaltung als Haxelib zu prüfen, insbesondere wenn Sie erwägen, Haxe in einem professionellen Kontext zu verwenden.) - Neko , ein virtuelles Maschinenziel, das eine schnelle und effiziente Neukompilierung und Fehlerbehebung ermöglicht.
(Das heißt, es gibt mehr als eine Möglichkeit, sich einzurichten. Wenn Sie beispielsweise npm
bereits installiert haben, haben die Installationsanweisungen von OpenFL die Möglichkeit, Haxe über Yeoman-Befehle zu installieren. Homebrew und Chocolatey bieten auch ähnliche Pfade.)
Wie auch immer, sobald Sie Haxe haben, können Sie es von der Befehlszeile aus selbst verwenden, aber Entwickler entscheiden sich oft für die Verwendung einer IDE. FlashDevelop/HaxeDevelop wird weiterhin hauptsächlich nur unter Windows unterstützt. Die meisten anderen Optionen sind plattformübergreifend (Win/Mac/Linux):
- Das Haxe-Plugin von VSCode wird gut unterstützt.
- IntelliJ IDEA hat auch ein Haxe-Plugin.
- Das Spiele-Framework Kha hat eine eigene IDE namens Kode Studio (Win/Mac/Linux).
- Sublime Text und Atom haben beide Haxe-Plugins, ebenso wie viele andere Editoren, von denen einige plattformspezifisch sind.
Für die Zwecke dieser Kurzanleitung verwenden wir VSCode. Es ist vielleicht am einfachsten, das Haxe-Erweiterungspaket über Strg+P zu erhalten und ext install haxe-extension-pack
, aber wenn Sie ein Minimalist sind, möchten Sie vielleicht einfach ext install vshaxe
für das grundlegende Haxe-Plugin selbst und wählen Sie es aus andere Teile der Packung, die Sie vielleicht möchten.
Erstellen eines Haxe-Projekts
Da die Haxe-Sprache auf viele Ziele transpilieren kann, wird die Verwaltung, wie dies für jedes getan wird, durch die Verwendung einer Build-Datei vereinfacht. Zu Beginn benötigen wir jedoch lediglich eine einzelne Haxe-Klassendatei mit der Erweiterung .hx
.
Was den Code betrifft, den wir einfügen, nehmen wir das Array Comprehension-Beispiel von try.haxe.org und fügen es in eine Datei namens Test.hx
ein:
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] } }
Jetzt können Sie vom Speicherort von Test.hx
aus Haxe im Interpretationsmodus ausführen, dh ohne überhaupt zu transpilieren, um die Ausgabe dieser beiden Aufrufe von trace()
anzuzeigen:
$ 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, es funktioniert!
Transpilieren von Haxe-Code in JavaScript
Angenommen, Sie möchten dies über JavaScript auf einer Ihrer Webseiten mit der Welt teilen. Das ist in Haxe integriert und so einfach wie:
$ haxe -main Test -js haxe-test.js
Wenn Sie Node.js installiert haben, können Sie die Ausgabe von der Befehlszeile wie folgt überprüfen:
$ 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 ]
Andernfalls ist der Code in haxe-test.js
einsatzbereit – wenn Sie ihn in eine Webseite einfügen würden, würden Sie die Ausgabe beim Laden in der Entwicklerkonsole Ihres Webbrowsers sehen.
Transpilieren und Kompilieren in eine native Binärdatei
Angenommen, Sie möchten auch eine native Binärdatei für den Desktop, auf dem Sie entwickeln. Dazu werden wir in das C++-Ziel transpilieren, damit wir dann C++ verwenden können (vorausgesetzt, Sie haben es installiert), um die .cpp
Ausgabe in eine native Binärdatei zu kompilieren. Dafür brauchen wir hxcpp
, also müssen wir es installieren:
$ haxelib install hxcpp
Danach können wir mit diesem Befehl gleichzeitig transpilieren und kompilieren:
$ haxe -main Test -cpp bin
Und dann ist unsere Binärdatei betriebsbereit:
$ 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]
(Unter Windows wäre dies stattdessen bin\Test.exe
.)
Erstellen einer Haxe-Build-Datei (.hxml)
Trotz der suggestiven Erweiterung sind .hxml
-Dateien kein XML – im Gegensatz zu den .hxproj
-Dateien, die von HaxeDevelop und FlashDevelop verwendet werden, aber darauf werde ich in diesem Artikel nicht eingehen. So würde eine build-all.hxml
aussehen, um das oben durchgeführte Transpiling durchzuführen:
-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
Beachten Sie den Unterschied in den Präfixen: -main
, -js
und -cpp
sind jeweils Parameter, die Sie direkt an haxe
übergeben würden, während --each
und --next
(zwei Bindestriche) eine Metaebene höher liegen und dem Compiler mitteilen, was zu tun ist mit den anderen Parametern.
Sie können jetzt sowohl JavaScript- als auch native Ziele erreichen, indem Sie einfach haxe build-all.hxml
.
Wenn Sie in JavaScript transpilieren und das Ergebnis dann sofort mit Node ausführen möchten, können Sie haxe run-js.hxml
run-js.hxml ausführen, wobei run-js.hxml
so aussieht:
-main Test -js haxe-test.js -cmd node haxe-test.js
In ähnlicher Weise würde ein „Build and Run“ für die native Binärdatei so aussehen (unter Linux, das heißt, für Windows wäre eine Variation erforderlich):
-main Test -cpp bin -cmd bin/Test
Was ist mit VSCode? Dieser Teil ist einfach: Die von Ihnen installierte Erweiterung übernimmt automatisch diese .hxml
-Dateien und gibt Ihnen automatisch generierte Build-Aufgaben (ohne eine tasks.json
) in einem Dropdown-Menü aus, sodass Sie auswählen können, welche Build-Datei verwendet werden soll.
Hinweis: Seien Sie jedoch vorsichtig, wenn Sie mehrere VSCode-Fenster geöffnet haben – zum jetzigen Zeitpunkt kann dies zu Problemen beim Erstellen über Strg+B führen. (Sie können immer noch die Befehlszeile verwenden, kein Problem.)
Haxe 4
Wenn Sie das obige Setup befolgt haben, ist Ihnen vielleicht aufgefallen, dass die Download-Seite Links zu den Zweigen 3.x und 4.x des Haxe-Installationsprogramms enthielt.
Die topaktuelle Version 4 des Haxe-Compilers bringt viele neue Features mit sich. In einem Fall ist dies auch ein Beweis für die Leistungsfähigkeit seines Makrosystems: Dem Haxe-Compiler fehlte früher die Unterstützung für kurze Lambda-Funktionen, daher implementierte die Slambda-Bibliothek die Unterstützung für sie über Makros. Ab Version 4 ist die Unterstützung in den Compiler integriert und die Bibliothek ist veraltet.
Was bringt Haxe 4 also noch auf den Tisch?
Nicht unbedingt zu viele Hingucker. Stattdessen hat Haxe 4 viele kleinere Verbesserungen. Schließlich ist Haxe selbst eine ziemlich ausgereifte Technologie, die vielleicht von einem kleineren und fokussierteren Team entwickelt wurde als ähnliche Projekte – und es ist vielleicht ein bisschen übertrieben, ein Projekt ähnlich Haxe zu nennen.
Viele seiner interessantesten Funktionen sind bereits seit einiger Zeit vorhanden. Zum Beispiel habe ich oben erwähnt, dass Haxe einen schnellen Workflow über Neko oder HashLink bietet. Aber seit 2016 gibt es auch einen Compilation-Server. Das bedeutet, dass für Nicht-VM-Ziele die Neukompilierung eines Projekts, das von einer großen Bibliothek abhängt, aufgrund des In-Memory-Caching viel schneller ist – was auch von Haxe-IDEs für die Codevervollständigung genutzt werden kann.
Aber insbesondere Haxe 4 wird Folgendes sehen:
- Makroausführung ist 4x schneller.
- PHP5-Unterstützung wird eingestellt.
- Einige syntaktische Aktualisierungen wurden vorgenommen, die TypeScript-Benutzer wahrscheinlich begrüßen werden, auch wenn sie sich zwischen den beiden Sprachen geringfügig unterscheiden. Nämlich Pfeilfunktionen und die neue Funktionstypsyntax.
Haxe-Tutorials
Während Sie jederzeit direkt in die Standard-API- oder Syntaxdokumentation von Haxe eintauchen können, sind auch einige anfängerfreundlichere Haxe-Materialien verfügbar.
Wenn Sie sich lieber mit Videos orientieren möchten, hat der Haxe US Summit 2018 in Seattle seine Workshops neben denen aus anderen Jahren, um mehr Insider-Einblicke zu erhalten.
Aber manchmal ist es ein spezifischeres Tutorial, was Ihnen den Einstieg erleichtern könnte. Wie ein Anfang-bis-Ende-Tutorial zum Erstellen eines Dungeon-Crawler-Spiels in HaxeFlixel. Es gibt auch eine Reihe von HaxeFlixel-Tutorials, die mehr darüber erklären, was hinter den Kulissen passiert. Auf der 3D-Seite gibt es ein Haxe-Tutorial zum Einstieg in Armory.
Oder vielleicht möchten Sie einfach nur ein Haxe-Tutorial über die schnelle Verarbeitung von XML – dies ist eines von vielen Tutorials, die jetzt ein paar Jahre alt sind, aber immer noch ziemlich relevant sind. Wie ich bereits erwähnt habe, gibt es zwar viele Grenzen, aber viele der Grundlagen der Entwicklung in Haxe sind zu diesem Zeitpunkt stabil, sodass Tutorials nicht unbedingt sehr schnell veraltet sind. (Wo dies der Fall ist, handelt es sich normalerweise um eine Abhängigkeit von einer bestimmten Bibliothek, nicht um den Haxe-Kern selbst.)
Wie Sie sehen können, können Sie die Haxe-Sprache – oder sie kann Sie – in viele verschiedene Richtungen führen. Ich hoffe, Ihnen hat diese Einführung in die vielfältige und faszinierende Welt von Haxe gefallen, und ich freue mich darauf, zu hören, was Sie am Ende mit der Technologie von Haxe machen!