Haxe: Secretul cel mai bine păstrat al dezvoltării multiplatforme

Publicat: 2022-03-11

Limbajul modern de programare Haxe este binecunoscut în unele cercuri, totuși mulți care citesc aceasta nu vor fi auzit niciodată de el. Totuși, nu lăsați statutul său de nișă să vă păcălească. De când a apărut pentru prima dată în 2005, a fost testat în luptă prin urmărirea sa loială, chiar dacă mai degrabă liniștită. Se mândrește cu o combinație pragmatică și matură de caracteristici pentru dezvoltare în afaceri, jocuri și chiar contexte academice.

Disney, Hasbro și BBC folosesc Haxe, așa că de ce nu au auzit mai mulți dezvoltatori de el? Poate că versatilitatea sa înseamnă că nu există o singură „aplicație ucigașă” pentru limbajul de programare Haxe.

Sau poate pentru că una dintre cele mai vechi aplicații ucigașe – o cale de migrare departe de platforma Flash pe moarte – este puțin de nișă în anumite privințe. Venerabila piață a jocurilor casual s-a agitat în ultimii câțiva ani sub umbra incertitudinii Adobe, iar acum este în sfârșit clar că orice lucru bazat pe Flash va trebui să se miște oficial până în 2020.

Inginerii de software de afaceri și dezvoltatorii web – de fapt, mulți dezvoltatori de jocuri, de asemenea, ar putea auzi „Flash” și se pot opri imediat. Prin urmare, Fundația Haxe ia FlashDevelop IDE și îl rebrandă mai mult ca Haxe IDE, HaxeDevelop.

Dar poate fi greu să te scuturi de o asociere – mai ales când aceasta continuă să fie destul de relevantă. De exemplu, FlowPlay, ale cărui jocuri sociale au 75 de milioane de utilizatori, a ales Haxe în locul Unity și HTML5 pentru recenta lor tranziție de doi ani de 1,4 milioane de linii de cod de la Flash. (Mai multe detalii sunt disponibile în studiul de caz.)

Poate că este dificil pentru Fundația Haxe să poată evidenția cazuri de utilizare ca acesta, în același timp atrăgând dezvoltatorii de software non-game. Dar nu lăsa asta să te descurajeze de la o mică explorare.

Care este marea problemă cu Haxe?

Proiectul Debian descrie Haxe ca un „limbaj de programare universal”. Există mai multe aspecte în acest sens.

În general, limbajul Haxe înseamnă reutilizarea codului (bun) . Prin asta vreau să spun: puteți reutiliza codul Haxe pe multe platforme, îl puteți integra cu codul Haxe și non-Haxe existent și, în bine , limbajul Haxe pune la dispoziție multe paradigme încercate și adevărate, cum ar fi siguranța tipului.

Continuând de-a lungul temei de versatilitate, aceasta se traduce în câteva categorii majore de cazuri de utilizare — Migrarea Flash deoparte, desigur.

Dezvoltarea unei aplicații sau a unui joc multiplatform de la zero. Haxe poate viza platformele desktop, mobile și web, toate dintr-o bază sursă într-o singură limbă. Limbajul de programare multiplatformă nu este nimic nou și există soluții specializate pentru aplicații și jocuri pentru desktop și mobile multiplatforme. Dar Haxe face ceva mai special, în sensul că poate viza nu doar mai multe platforme, ci mai multe paradigme, de exemplu HTML5 și binare native.

O singură limbă „pentru a-i conduce pe toți”. Scuzați referința Tolkien, dar la fel cum Node.js a salutat o eră de utilizare a aceluiași limbaj pe partea din față și din spate a unui site web, orice proiect cu ceva asemănător cu o arhitectură client-server poate folosi Haxe pentru ambele jumătăți.

De exemplu, aplicația web FontStruct folosește Haxe atât pentru a desena pe o pânză HTML5 pe partea frontală, cât și prin Java2D pe partea din spate. (Dar așa cum am menționat, această abordare este opțională — Haxe se joacă frumos și cu codul existent non-Haxe, deoarece este conceput pentru a nu vă lega.) Păstrarea aplicației, jocului, afacerilor și chiar a logicii de redare coerente în toate contextele, platformele, iar limbile de ieșire este mult mai ușor în acest fel.

Fugi de JavaScript pentru a tasta siguranța. Stai, nu pentru asta este TypeScript? Da, dacă doriți să rămâneți limitat la ieșirea JavaScript. Limbajul Haxe, în schimb, se poate transpila și în Java, C++, C#, Python și Lua, printre altele.

Între timp, limbajul de programare Haxe este destul de ușor de învățat din JavaScript - sintaxa sa nu înseamnă o schimbare uriașă de paradigmă, cum ar fi, de exemplu, cea a lui Rebol, în ciuda beneficiilor unei astfel de schimbări. Dezvoltatorul de bază Haxe, Dr. Andy Li, a scris o comparație mai aprofundată între TypeScript și Haxe, care este încă relevantă astăzi, deși ambele limbi continuă să evolueze.

Flux de lucru destul de rapid pentru un compilator. Aceasta este o piesă adăugată mai recent (deși Neko a fost o opțiune înainte de ea): HashLink este o mașină virtuală (VM) multiplatformă care pare să atingă un echilibru între a fi extrem de rapidă de compilat, dar și suficient de performantă la timpul de execuție pentru lucruri. cum ar fi jocurile 3D. Dar chiar și pe partea web, Haxe poate depăși TypeScript atât în ​​timpul compilării, cât și în timpul rulării.

O frontieră incitantă. Haxe în sine este open-source și are o comunitate activă, cu noi funcții de limbă fiind adăugate tot timpul. Propriul său sub-secret cel mai bine păstrat ar putea fi doar sistemul său macro de compilare, care în sine are multe cazuri de utilizare interesante, permițându-vă să meta-programați după cum doriți. (Menționez câteva exemple mai jos.)

Cine altcineva folosește Haxe?

Pentru început, dezvoltatorii de jocuri, desigur: Madden NFL Mobile, Evoland II, Double Kick Heroes... acestea și sute de alte jocuri publicate au fost dezvoltate folosind Haxe. Dar Haxe face furori și în afara sferei jocurilor:

  • În 2014, TiVo a folosit Haxe pentru a crește performanța la cutiile TiVo Premiere cu peste 30%.
  • Massive Interactive, ai cărui clienți includ DAZN și Telecine pentru sistemele „smart TV” bazate pe Haxe (ambele cu baze mari de utilizatori) folosește Haxe de ani de zile. Arhitectul UI Philippe Elsass mi-a remarcat că, în experiența sa de lucru cu proiecte web mari, Haxe tinde să fie mai simplu de utilizat decât TypeScript și cu un ordin de mărime mai rapid de compilat.
  • Synolia folosește limbajul Haxe pentru instrumentul de personalizare online Heidi, care este folosit de marile mărci franceze Carrefour și La Fnac, precum și de Nickelodeon. Potrivit Synolia, setul de instrumente Haxe le-a permis să gestioneze eficient tranziția de la Flash la HTML5, putând în același timp să asume noi oportunități de dezvoltare a afacerii în sfera mobilă. Heidi fiind o aplicație SaaS, setul de instrumente Haxe le-a permis să partajeze cod sursă comun între diferitele straturi și servicii ale aplicației.
  • Întreprinderea multinațională Docler Holding a devenit partener strategic al Fundației Haxe în 2017.

Cum este ecosistemul Haxe?

Când vine vorba de jocuri și Haxe, este o lume largă și largă în ceea ce privește cadrele și bibliotecile open-source. De la echipe independente independente până la studiouri de succes cu clienți internaționali, utilizatorii Haxe partajează cod peste tot:

  • Flambe este folosit de mărci precum Disney, Coca-Cola și Toyota pentru a dezvolta jocuri HTML5.
  • Heaps este cadrul de joc de înaltă performanță din spatele recentului hit strategic 3D Northgard.
  • Având milioane de jocuri mobile, biblioteca de dezvoltare rapidă awe6 este poate o bijuterie ascunsă într-o bijuterie ascunsă.
  • Kha, care poate viza XBox One, Nintendo Switch și PlayStation 4, pe lângă desktop și mobil, are peste 20 de motoare de joc construite pe deasupra. Aceasta include Armory, care are integrare completă cu Blender și recent a devenit el însuși open-source.
  • Modelat inițial după vechea bibliotecă Flixel pentru Flash, HaxeFlixel este alegerea populară din spatele unor jocuri precum hit-ul de dormit Defender's Quest .
  • Gamua's Starling, cadrul folosit pentru portul Facebook al Angry Birds cu câțiva ani în urmă, are acum un port Haxe open-source.
  • OpenFL, bazat pe Flash API, va fi, de asemenea, în curând o modalitate de a viza mai multe console - și anume PlayStation 4, PlayStation Vita, XBox One și Nintendo Switch - fără taxe de licență suplimentare. HaxeFlixel și Starling sunt ambele construite pe OpenFL, dar unele jocuri sunt dezvoltate direct pe OpenFL, cum ar fi premiat Papers, Please .
  • Native Media Engine, NME, de la care OpenFL a fost bifurcat cu mulți ani în urmă, încă mai lansează versiuni majore.
  • Poate ați văzut când HaxePunk (descendent din FlashPunk) a fost prezentat pe blogul GitHub Release Radar.
  • Motorul Nape Physics extrem de optimizat este excelent pentru orice motor de joc 2D sau simulator care are nevoie de o fizică mai sofisticată.

Desigur, scena dezvoltării jocului este o parte mai vizibilă a ecosistemului limbajului Haxe. (Poate că acest lucru se datorează naturii blocurilor de jocuri precum Ludum Dare?) Dar și partea de afaceri și chiar a întreprinderii se vede. De exemplu:

  • Cadrul de aplicații modular hexMachina acceptă utilizarea limbajului specific domeniului (DSL) și arhitectura model-view-controller (MVC), printre multe alte caracteristici.
  • Motorul de layout UI HaxeUI evoluează activ și are suport corporativ. Produse precum 3DVista și Kaizen for Pharma au livrat aplicații de producție cu acesta.
  • Nu este singurul, dar biblioteca thx.core și rudele sale oferă extensii de uz general pentru Haxe, la fel ca Lodash pentru JavaScript.
  • Vorbind despre JavaScript, proiectele Haxe care îl vizează ar putea beneficia de pe urma utilizării Haxe Modular, care a ajutat atât Telecine, cât și FlowPlay să-și extindă proiectele enorme, menținând în același timp încărcare rapidă din partea clientului.
  • De asemenea, ecosistemul lui Haxe continuă să evolueze pentru a interfața cu tehnologiile actuale; de exemplu, acum există o bibliotecă GraphQL.
  • În cele din urmă, exemplarul Tinkerbell folosește sistemul macro Haxe pentru tot felul de sarcini utile. Are cadre pentru rutarea web, testarea unitară și încorporarea SQL, precum și biblioteci pentru orice, de la șabloane și analizarea selectorului CSS la asincron/așteptare și gestionarea stării reactive a curbei de învățare inferioare.

Acestea sunt doar punctele importante ale unora dintre direcțiile pe care utilizatorii limbii Haxe le-au luat până acum. Haxe.org menține o listă completă de biblioteci sortate după popularitate, pe care le puteți naviga și după etichetă. Dar merită să subliniem și câteva proiecte pe care Fundația Haxe le întreține:

  • Pentru unghiul DevOps, există depozitul oficial Haxe Docker.
  • Din punct de vedere al stabilității, chiar și cu o actualizare majoră a versiunii, Haxe 4 va avea ajutor de compatibilitate pentru cei cu proiecte dependente de Haxe 3.

Toate acestea sună frumos, dar cum este să pornești un mediu de dezvoltare pe sistemul tău?

Pornire rapidă Haxe

Fie pentru Win, Mac sau Linux, primul pas este să descărcați Haxe. Instalatorul de acolo va oferi câteva lucruri diferite:

  1. Compilatorul Haxe în sine , care ar trebui să vă permită să rulați haxe de pe terminalul sau din promptul de comandă.
  2. Biblioteca standard Haxe , permițând elemente de bază de nivel scăzut, dar și suport de nivel superior, cu scop general. De exemplu, XML, procesarea ZIP și accesul MySQL sunt toate facilitate aici.
  3. Managerul de pachete Haxelib , care vă permite să instalați pachete noi prin comanda haxelib . (Notă: merită, de asemenea, să verificați lix pentru un management de pachete mai avansat decât oferă Haxelib, mai ales dacă vă gândiți să utilizați Haxe într-un context profesional.)
  4. Neko , o mașină virtuală țintă care permite recompilare și depanare rapidă și eficientă.

(Aceasta fiind spuse, există mai multe modalități de a vă configura. Dacă aveți deja instalat npm , de exemplu, instrucțiunile de instalare ale OpenFL au opțiunea de a instala Haxe prin comenzile Yeoman. Homebrew și Chocolatey oferă, de asemenea, căi similare.)

Oricum, odată ce ai Haxe, l-ai putea folosi din linia de comandă singur, dar dezvoltatorii optează adesea pentru utilizarea unui IDE. FlashDevelop/HaxeDevelop este încă acceptat în principal numai sub Windows. Majoritatea celorlalte opțiuni sunt multi-platformă (Win/Mac/Linux):

  • Pluginul Haxe al lui VSCode este bine acceptat.
  • IntelliJ IDEA are și un plugin Haxe.
  • Cadrul de jocuri Kha are propriul IDE numit Kode Studio (Win/Mac/Linux).
  • Sublime Text și Atom au ambele plugin-uri Haxe, la fel ca mulți alți editori, dintre care unele sunt specifice platformei.

În scopul acestui ghid de pornire rapidă, vom merge cu VSCode. Poate fi cel mai simplu să obțineți pachetul de extensie Haxe prin Ctrl+P și ext install haxe-extension-pack , dar dacă sunteți un minimalist, poate doriți doar să ext install vshaxe pentru pluginul de bază Haxe în sine și alegeți oricare dintre ele. alte părți ale pachetului pe care le doriți.

Crearea unui proiect Haxe

Deoarece limbajul Haxe se poate transpila la mai multe ținte, gestionarea modului în care se face acest lucru pentru fiecare este ușoară folosind un fișier de compilare. Cu toate acestea, pentru a începe, tot ce avem nevoie este un singur fișier de clasă Haxe cu o extensie .hx .

În ceea ce privește codul pe care îl vom pune în el, să luăm exemplul Array Comprehension de la try.haxe.org și să îl punem într-un fișier numit 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] } }

Acum, din locația lui Test.hx , puteți rula Haxe în modul de interpretare, adică fără a transpila deloc, pentru a vedea rezultatul acelor două apeluri 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]

Grozav, funcționează!

Transpilarea codului Haxe în JavaScript

Să presupunem că doriți să împărtășiți acest lucru cu lumea prin JavaScript pe o pagină web a dvs. Acesta este încorporat în Haxe și la fel de ușor ca:

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

Dacă aveți instalat Node.js, puteți verifica rezultatul din linia de comandă astfel:

 $ 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 ]

În caz contrar, codul din haxe-test.js este gata de funcționare — dacă ar fi să-l includeți într-o pagină web, veți vedea rezultatul în consola pentru dezvoltatori a browserului dvs. web la încărcare.

Transpilarea și compilarea într-un binar nativ

Să presupunem că doriți și un binar nativ pentru desktopul pe care dezvoltați. Pentru a face acest lucru, vom transpila către ținta C++, astfel încât apoi să putem folosi C++ (presupunând că îl aveți instalat) pentru a compila ieșirea .cpp într-un binar nativ. Pentru asta, vom avea nevoie de hxcpp , așa că va trebui să-l instalăm:

 $ haxelib install hxcpp

După aceea, putem face transpilarea și compilarea ambele simultan cu această comandă:

 $ haxe -main Test -cpp bin

Și apoi binarul nostru este gata să ruleze:

 $ 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]

(Pe Windows, acesta ar fi bin\Test.exe .)

Crearea unui fișier Haxe Build (.hxml)

În ciuda extensiei sugestive, fișierele .hxml nu sunt XML — spre deosebire de fișierele .hxproj utilizate de HaxeDevelop și FlashDevelop, dar nu voi acoperi asta în acest articol. Iată cum ar arăta un build-all.hxml pentru a realiza transpilarea pe care am făcut-o mai sus:

 -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

Rețineți diferența de prefixe: -main , -js și -cpp sunt fiecare parametri pe care i-ați transmite direct către haxe , în timp ce --each și --next (două cratime) sunt la un meta-nivel, spunând compilatorului ce trebuie să facă cu ceilalți parametri.

Acum puteți atinge atât ținte JavaScript, cât și ținte native, pur și simplu rulând haxe build-all.hxml .

Dacă doriți să transpilați în JavaScript și apoi să rulați imediat rezultatul folosind Node, puteți rula haxe run-js.hxml , unde run-js.hxml arată astfel:

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

În mod similar, un „build and run” pentru binarul nativ ar arăta astfel (pe Linux, adică ar fi necesară o variație pentru Windows):

 -main Test -cpp bin -cmd bin/Test

Dar VSCode? Această parte este simplă: extensia pe care ați instalat-o va prelua automat aceste fișiere .hxml , oferindu-vă sarcini de compilare generate automat (fără tasks.json ) într-un meniu vertical, permițându-vă să alegeți ce fișier de compilare să utilizați.

Notă: Fiți atenți dacă aveți mai multe ferestre VSCode deschise, totuși – în momentul în care scrieți acest lucru, acest lucru poate cauza probleme cu construirea prin Ctrl+B. (Puteți folosi în continuare linia de comandă, nicio problemă.)

Haxe 4

Dacă ați urmat configurația de mai sus, este posibil să fi observat că pagina de descărcare includea legături către ambele ramuri 3.x și 4.x ale programului de instalare Haxe.

Versiunea de ultimă oră 4 a compilatorului Haxe aduce cu sine multe funcții noi. Într-un caz, acesta este, de asemenea, o dovadă a puterii sistemului său de macro-uri: compilatorul Haxe obișnuia să nu suporte pentru funcțiile lambda scurte, așa că biblioteca slambda a implementat suport pentru acestea prin intermediul macro-urilor. Începând cu versiunea 4, suportul este încorporat în compilator, iar biblioteca este depreciată.

Deci, ce mai aduce Haxe 4 la masă?

Nu neapărat prea mulți care atrag atenția. În schimb, Haxe 4 are multe îmbunătățiri mai mici. La urma urmei, Haxe în sine este o tehnologie destul de matură, dezvoltată de o echipă mai mică și mai concentrată, poate, decât proiecte similare - și poate este puțin exagerat să numim orice proiect similar cu Haxe.

Multe dintre cele mai interesante caracteristici ale sale sunt deja prezente de ceva vreme. De exemplu, am menționat mai sus că Haxe oferă un flux de lucru rapid prin Neko sau HashLink. Dar din 2016, are și un server de compilare. Aceasta înseamnă că pentru ținte non-VM, recompilarea unui proiect care depinde de o bibliotecă mare va fi mult mai rapidă datorită stocării în cache în memorie — care poate fi, de asemenea, utilizată de IDE-urile Haxe pentru completarea codului.

Dar Haxe 4, în special, va vedea:

  • Execuția macro este de 4 ori mai rapidă.
  • Suportul PHP5 este abandonat.
  • Unele actualizări sintactice făcute pe care utilizatorii TypeScript le vor bineveni probabil, chiar dacă sunt ușor diferite între cele două limbi. Și anume, funcțiile săgeată și sintaxa de tip nou de funcție.

Tutoriale Haxe

Deși vă puteți scufunda oricând în documentația standard de API sau sintaxă a Haxe, există și câteva materiale Haxe mai prietenoase pentru începători.

Dacă preferați să vă orientați cu videoclipuri, Haxe US Summit 2018 din Seattle are atelierele sale alături de cele din alți ani, pentru a obține mai multă viziunea din interior.

Dar uneori ceea ce te-ar putea ajuta să începi mai ușor este un tutorial mai specific. Ca un tutorial de la început până la sfârșit despre cum să construiți un joc cu crawler în temniță în HaxeFlixel. Există, de asemenea, o serie de tutoriale HaxeFlixel care explică mai multe despre ceea ce se întâmplă în culise pe măsură ce merg. La sfârșitul 3D, există un tutorial Haxe despre începerea cu Armory.

Sau poate doriți doar un tutorial Haxe despre procesarea rapidă a XML - acesta este unul dintre multele tutoriale care au acum câțiva ani, dar încă destul de relevante. După cum am menționat mai devreme, deși există o mulțime de frontiere, multe dintre elementele de bază ale dezvoltării în Haxe sunt stabile în acest moment, așa că tutorialele nu devin neapărat învechite foarte repede. (Acolo unde o fac, este de obicei dintr-o dependență de o anumită bibliotecă, nu de nucleul Haxe în sine.)


După cum puteți vedea, puteți lua limba Haxe – sau vă poate duce – în multe direcții diferite. Sper că ți-a plăcut această introducere în lumea diversă și fascinantă a lui Haxe și aștept cu nerăbdare să aud ce vei face cu tehnologia Haxe!

Înrudit : Haxe Review: Caracteristici și puncte forte Haxe 4