Haxe

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2017. október 8-án felülvizsgált verziótól ; az ellenőrzések 29 szerkesztést igényelnek .
Haxe
Nyelvóra Több paradigma
Megjelent 2005
Fejlesztő Hax Alapítvány
Kiadás 4.2.5 ( 2022. március 6. )
Típusrendszer statikus , dinamikus megjegyzésekkel
Befolyásolva Java , OCaml , ActionScript és MTASC [1]
Engedély GPL v2, könyvtár: MIT
Weboldal haxe.org
Felület ARM , IA-32 , x64
OS Android , iOS _ Linux , macOS , Windows

A Haxe egy nyílt forráskódú , magas szintű, többplatformos programozási nyelv és fordító , amellyel alkalmazások építhetők és forráskódok generálhatók különböző platformokra, miközben egyetlen kódbázist tartanak fenn [2] [3] [4] [5] .

A Haxe minden platformon támogatott funkciókat tartalmaz , például numerikus adattípusokat, karakterláncokat , tömböket , valamint egyes fájlformátumok ( xml , zip ) támogatását [3] [6] . A Haxe minden egyes cél fordítóplatformhoz támogatja az egyes API-kat is.

A Haxe nyelven írt kódok JavaScript , C++ , Java , JVM , PHP , C# , Python , Lua és Node.js [7] kódokká fordíthatók . A Haxe kód SWF-re, HashLink-re és Neko-ra is fordít, bájtkódra , és értelmezési módban is végrehajtható [7] .

A Haxe fő felhasználói a TiVo , a Prezi , a Nickelodeon , a Disney , a Mattel , a Hasbro , a Coca Cola , a Toyota és a BBC [8] [9] . Az OpenFL és a Flambe  népszerű Haxe keretrendszerek többplatformos tartalom és programok létrehozására egyetlen kódbázisból [9] . Emellett a Snõwkit [10] jelenleg is aktívan fejlődik . Mivel az Adobe Flash technológia az utóbbi években egyre inkább a HTML5 javára vált , a Haxe, a Unity és más, több platformon átívelő eszközök egyre több időt fordítanak az utóbbira, miközben fenntartják az Adobe Flash Player visszamenőleges támogatását [9] [11] .

Építészet

Egynyelvű

A Haxe architektúra fejlesztésének legjelentősebb szempontja az volt, hogy az Adobe Flash, JavaScript és szerveralkalmazásokat egyetlen kódbázisban támogatják [12] [13] . A tipikus webes projektekben a fejlesztőknek sok különböző nyelvet kell használniuk egy komplett webalkalmazás elkészítéséhez [12] [13] :

A Haxe-t azzal az ötlettel hozták létre, hogy ezeket a komponenseket egyetlen kódbázisban egyesítsék, valamint leegyszerűsítsék az alkalmazáskomponensek közötti interakciót [12] [13] [14] .

A könyv, amelyet Nicholas Kennessy (a Haxe projekt alapítója) írt, kifejti a Haxe létrehozásának eredeti céljait [12] :

Fordító

A Haxe fordító egy frontendre és több háttérrendszerre van felosztva. A frontend feladata az elemzés és a típusellenőrzés, a makrók alkalmazása, az általános optimalizálás, a különféle kódtranszformációk, valamint a kód közbenső reprezentációjának létrehozása absztrakt szintaxisfa (ASD) formájában. Mindegyik háttérprogram felelős ennek az AST-nek a célplatform forráskódjává vagy bájtkódjává történő lefordításáért .

A fordító OCaml nyelven íródott . Szerver módban futtatható, hogy támogassa a kódkiegészítést az IDE-ben, és ebben a módban a gyorsítótár is támogatott a fordítási idő csökkentése érdekében [15] .

Teljesítmény

A Haxe fordító egy optimalizáló fordító , amely függvényhelyettesítést , állandó összehajtást , holt kód eltávolítást (DCE) is használ a lefordított programok teljesítményének optimalizálására.

A Haxe-ban írt programok teljesítménye a célplatformtól függ.

Fejlesztés

A Haxe fejlesztése 2005 októberében kezdődött [20] , az első béta verzió pedig 2006 februárjában jelent meg. A Haxe 1.0 2006 áprilisában jelent meg, és támogatta a renderelést Adobe Flash , Javascript és Neko számára .

A Haxe-t Nicolas Cannasse és mások fejlesztették ki, és eredetileg haXe -nek hívták , mert ez egy rövid, egyszerű név, és „X van a nevében”, ami egy új technológia sikeréhez szükséges tulajdonság. nyelv [21] .

A Haxe az MTASC fordító nyílt forráskódú ActionScript 2 utódja, amelyet szintén Nicholas Hennessy készített [12] [22] , és a GNU General Public License 2 vagy újabb verziója alatt [ 23 ] adták ki .

A Haxe sok hasonlóságot mutat az ActionScript 3 -mal . A Haxe fordítót OCaml nyelven fejlesztették ki , de a Haxe nyelvű íráshoz nincs szükség OCaml ismeretekre.

A Haxe használatának előnyei a következők:

Forráskód

A Haxe fejlesztéséhez ajánlott IDE a FlashDevelop [12] , amely támogatja az ActionScript 2, 3 és Haxe fő nyelveket szintaktikai kiemeléssel , kódkiegészítéssel és egyéb szolgáltatásokkal [12] [25] . Ez az IDE támogatja a kódhajtogatást , az újrafeldolgozást és az interaktív hibakeresést is . [26]

A meglévő kód használatához a nyílt forráskódú közösség forráskód-konvertálókat hozott létre:

Platform támogatás

A Haxe nyelv lefordítható különféle virtuális gépek, például Adobe Flash Player és Neko bájtkódjára, valamint az ActionScript 3 -ra , a JavaScript - forráskódra , beleértve a kísérletileg támogatott C++- t és C# -t is . A különféle forrásokba való „összeállítás” stratégiáját az „egyszer írd, bárhol futtatd” paradigma inspirációja alapján fejlesztették ki. Ez a stratégia azt is lehetővé teszi a programozó számára, hogy a legjobb platformot válassza ki a programok futtatásához.

Kódgenerátor Eredmény Felület Használat A Haxe melyik verziójából
AVM1 [6] Bájtkód Adobe Flash Player 6+ Asztali, böngésző 2005 (alfa)
AVM2 [6] Bájtkód Adobe Flash Player 9+, Adobe AIR , Tamarin VM Asztali, böngésző, szerver 2005 (alfa)
ActionScript 3 [6] Forrás Adobe Flash Player 9+ Szerver, Asztali 2007 (1,12)
C++ (hxcpp) [6] Forrás Windows, Linux, Mac OS X Szerver, asztali számítógép, CLI 2009 (2.04)
C++ Forrás Android [29] , Apple iOS [30] , Palm webOS [31] Mobil 2009 (2.04)
C# [6] Forrás .NET Framework Szerver, asztali számítógép, mobil 2012 (2,10)
Java [6] Forrás Jáva Szerver, Asztali 2012 (2,10)
JavaScript [6] Forrás HTML5 , Node.js , PhoneGap Szerver, asztali számítógép, böngésző, mobil 2006 (béta)
Neko [6] Bájtkód NekoVM Szerver, asztali számítógép, CLI 2005 (alfa)
PHP [6] Forrás PHP szerver 2008 (2,0)
Python [6] Forrás Piton CLI, web, asztali számítógép 2014 (3,2)
Lua [32] Forrás Lua Web, asztali számítógép, mobil 2016 (3,3)

Nyelv

A Haxe egy általános célú objektum-orientált nyelv, amely támogatja a kivételkezelést és az osztályparaméterek típuskövetkeztetését . Az általános programozást , a tükrözést , az iterátorokat és a funkcionális programozást is támogatja a nyelv és a könyvtárak [33] . A Haxe emellett – sok más nyelvtől eltérően – egyszerre támogatja a statikus és a dinamikus gépelést is. A fordító ellenőrizheti a típuskövetkeztetést és fordítási időbeli hibákat vethet fel, de a fejlesztők kikapcsolhatják a típusellenőrzést is, és támaszkodhatnak a célplatform dinamikus típusellenőrzésére.

A Haxe nyelv hasonló az ECMAScript -hez , bár gyakorlatilag egyetlen ECMAScript-kód sem fordítható le Haxe-ben módosítás nélkül. Az ECMAScript-től eltérően a Haxe egy fordított nyelv . A Haxe-t az ActionScript , a Java és az OCaml befolyásolta [13] .

Mivel a Haxe az ActionScript 3 - on alapult , támogatja a Flash API összes funkcióját, bár jobb kódolást és magasabb fejlesztési szabványokat igényel, mint az Adobe fordítói.

helló világ

Ez a program a "Hello World" szót írja a fordítás és futtatás után:

class Main { static function main () { trace ( "Hello World" ); } }

Ezt a kódot úgy tesztelheti, hogy elmenti egy fájlba egy névvel Main.hx, és futtatja a Haxe fordítót a következő opciókkal: haxe -main Main --interp. Ez a parancs elindítja a Haxe Compiler-t kódértelmezési módban és megjeleníti Main.hx:3: Hello world.

A típusrendszer

A Haxe egy statikusan tipizált nyelv. Gazdag típusú rendszerrel rendelkezik, beleértve az osztályokat, interfészek, funkcionális típusokat, névtelen típusokat, algebrai adattípusokat ( ADT -ket, a Haxe-ban "enumoknak" neveznek), valamint absztrakt adattípusokat. Az osztályok, az algebrai adattípusok és a függvénytípusok támogatják a típustörlés alapú parametrikus polimorfizmust , amelyet más objektumorientált nyelveken gyakran "általánosnak" neveznek.

A Haxe támogatja a korlátozott polimorfizmust és az altípus polimorfizmust .

Ezenkívül a Haxe támogatja a strukturális és névleges tipizálást . A programozók dolgának megkönnyítése és a típusbiztonság veszélyeztetése érdekében a Haxe támogatja a típuskövetkeztetést, ami sok esetben szükségtelenné teszi a típusok kézi írását.

Osztályok

A Haxe osztályai (kulcsszó "class") hasonlóak a Java vagy az AS3 osztályaihoz . Mezőik lehetnek metódusok, statikus osztályváltozók vagy osztálypéldány tulajdonságai. A Haxe támogatja a "nyilvános" és "privát" hozzáférési attribútumokat, valamint a fejlettebb hozzáférés-vezérlési módszereket (ACL-ek, hivatkozások), amelyeket megjegyzések írnak le. A konstans értékű metódusok és statikus változók a "inline" kulcsszóval beilleszthetők.

A Haxe interfészei hasonlóak a Java interfészekhez .

interface ICreature { public var birth : Date ; public var name : String ; közfunkció kor ( ) : Int ; } class Fly implementálja az ICreature { public var birth : Date ; public var name : String ; nyilvános funkció életkora (): Int return Date . most (). getFullYear () - születés . getFullYear (); }

Felsorolások

A felsorolt ​​típusok  a nyelv kulcsfontosságú jellemzői. Az enumoknak lehetnek saját paramétereik, és lehetnek rekurzívak [34] . Hasonlóak az algebrai adattípusokhoz , mivel olyan nyelvekben vannak, mint az ML vagy a Haskell . Szigorúan véve ezek helyes összegtípusok , feltéve, hogy a bennük szereplő terméktípusokat ezeken az összegtípusokon belül kell meghatározni. Ez azt jelenti, hogy az enumokat nem csak "varázsszámoknak" nevezik, mint a legtöbb nyelvben, hanem elegánsan megoldják az összetett építészeti problémákat:

enum Szín { piros ; zöld ; kék ; rgb ( r : Int , g : Int , b : Int ); } class Colors { static function toInt ( c : Color ) : Int { return switch ( c ) { case red : 0xFF0000 ; tok zöld : 0x00FF00 ; kék tok : 0x0000FF_ _ eset rgb ( r , g , b ): ( r << 16 ) | ( g << 8 ) | b ; } } static function validCalls () { var redint = toInt ( Szín . piros ); var rgbint = toInt ( Color . rgb ( 100 , 100 , 100 )); } }

A Haxe támogatja a parametrikus enum típusokat is. Példa erre az Option, az Ether és a ConsList típusok megvalósítása, valamint a ConsList is rekurzív:

enum Opció < T > { Néhány ( v : T ); nincs ; } enum Vagy < T , U > { Balra ( v : T ); Jobb ( v : U ); } enum ConsList < T > { Nil ; Cons ( fej : T , farok : ConsList < T >); }

Az oldalon található dokumentáció azt jelzi [35] , hogy a Haxe támogatja az általánosított algebrai típusokat (GADT) is, de nem ad példát egy ilyen létrehozására.

Névtelen típusok

Az anonim típusokat szerkezetük explicit leírása határozza meg, típusdefinícióval ("typedef" kulcsszó) álnevet is hozzá lehet rendelni:

typedef Anon = { a : Int , b : String , c : Float -> Void };

Függvénytípusok

A függvénytípusok a Haxe első osztályú objektumai. Ezeket az argumentumtípusok, valamint a típusok és a visszatérési érték közötti nyilak segítségével írják le, mint sok más funkcionális nyelvben. A Haskell -lel vagy az ML családdal ellentétben azonban a Haxe nem minden függvénye unáris (egy argumentummal rendelkező függvények), alapértelmezés szerint nem alkalmazhatók részben . Így a következő példákban szereplő típusaláírások más jelentéssel bírnak, mint a fenti nyelvek.

Az F típusú függvény egy Int-et és egy String-et vesz argumentumként, és egy Float-ot ad vissza eredményként.

Azokon a nyelveken, ahol csak unáris függvények léteznek, ez a típus olyan függvényt jelent, amely egy Int-t vesz argumentumként, és egy String->Float típusú függvényt ad vissza.

Az F2 és F3 típusok ugyanazt a típust írják le. Mindkettő olyan bináris függvényeket ír le, amelyek egy F típusú bináris függvényt adnak vissza. Az F2 esetében egy másik definíción belüli függvénytípus használatának esetét írjuk le.

typedef F = Int -> String -> Float ; typedef F2 = Int -> String -> F ; typedef F3 = Int -> String ->( Int -> String -> Float );

Absztrakt típusok

Az absztrakt típusoknak nevezett koncepció a Haxe típusrendszer legújabb kiegészítése. Lehetővé teszik a meglévő típusok újbóli felhasználását meghatározott célokra, például típusok megvalósítását mértékegységekhez, miközben nagymértékben csökkentik a különböző rendszerek (például mérföld és kilométer) keveredésének lehetőségét. Az "absztrakt típus" kifejezés a Haxe nyelv kontextusában más jelentéssel bír, mint a szokásos absztrakt típusok .

A következő példa azt feltételezi, hogy alapértelmezés szerint a metrikus rendszert használják, és mérföldekre konvertálásra van szükség a régi adatok támogatásához. A Haxe képes a mérföldeket automatikusan kilométerekre konvertálni, de fordítva nem.

abstract Kilometer ( Float ) { public function new ( v : Float ) this = v ; } abstract Mile ( Float ) { public function new ( v : Float ) this = v ; @:to public inline function toKilometer (): Kilometer return ( new Kilometer ( this / 0.62137 )); } osztály Teszt { statikus var km : Kilométer ; static function main (){ var one100Miles = new Mérföld ( 100 ); km = egy100 mérföld ; nyom ( km ); // 160.935 } }

A példa azt mutatja, hogy nem szükséges explicit konverziót végezni km = one100Miles;a megfelelő mértékegységek használatához.

Strukturális gépelés

A strukturális gépelés számos funkcionális programozási nyelvben fontos szerepet játszik, ugyanakkor a gyakori OOP nyelvekben meglehetősen kicsi. A nominális típusrendszertől eltérően a két típus egyenlőségét nem a típusnevek egyenlősége, hanem a típus szerkezete határozza meg. A struktúratípusok implicit interfészeknek tekinthetők:

class FooBar { public var foo : Int ; public var bar : String ; public function new (){ foo = 1 ; bár = "2" ;} function anyFooBar ( v :{ foo : Int , bar : String }) trace ( v . foo ); statikus függvényteszt (){ var fb = new FooBar ( ); fb . anyFooBar ( fb ); fb . anyFooBar ({ foo : 123 , bar : "456" }); } }

Lásd még

Továbbá a Haxe platformon:

  • Neko
  • OpenFL

Más nyelvek, amelyek JavaScriptre fordítanak:

Egyéb többplatformos nyelvek:

Jegyzetek

  1. https://haxe.org/manual/introduction-haxe-history.html
  2. Nicolas bejelentése a helyesírás megváltoztatásáról a Haxe hivatalos levelezőlistáján .
  3. 1 2 Ponticelli, Franco. Professzionális haXe és Neko  (neopr.) . - Wiley, 2008. - ISBN 0470122137 . Archiválva : 2015. november 28. a Wayback Machine -nál
  4. Ivanov, Mihály. Away3D 3.6 Szakácskönyv  (undefined) . – Packt Kiadó Kft, 2011. - ISBN 1849512817 . Archivált : 2015. november 2. a Wayback Machine -nél
  5. Doucet, Lars Haxe/OpenFL otthoni játékkonzolokhoz . Gamasutra (2015. június 3.). Letöltve: 2015. október 9. Az eredetiből archiválva : 2015. szeptember 8..
  6. 1 2 3 4 5 6 7 8 9 10 11 Bevezetés a Haxe Standard Library -be archiválva 2015. augusztus 14-én a Wayback Machine -nél, Haxe Docs
  7. 12 fordítói cél . Haxe – A többplatformos eszköztár . Letöltve: 2021. február 23. Az eredetiből archiválva : 2021. március 2.
  8. Haxe-t használó vállalatok archiválva 2015. szeptember 7. a Wayback Machine -nél, Haxe Docs
  9. 1 2 3 Doucet, Lars Tisztelt Adobe! Támogatás Haxe, mentse el az Eszközeit . Gamasutra (2014. június 24.). Letöltve: 2015. október 9. Az eredetiből archiválva : 2015. szeptember 24..
  10. a snõwkitről . snõwkit (2014. szeptember 20.). Letöltve: 2016. augusztus 9. Az eredetiből archiválva : 2016. augusztus 9..
  11. Doucet, Lars Flash meghalt, éljen az OpenFL! . Gamasutra (2014. március 18.). Letöltve: 2015. október 9. Az eredetiből archiválva : 2015. augusztus 30..
  12. 1 2 3 4 5 6 7 Grden, John; Mineault, Patrick; Balkán, Aral; Hughes, Marc; Arnold, Wade. Az alapvető útmutató a nyílt forráskódú Flash-fejlesztéshez  . - Apress , 2008. - P. 9. fejezet (A Haxe használata). — ISBN 1430209941 . Archiválva : 2016. február 8. a Wayback Machine -nál
  13. 1 2 3 4 Haxe interjú  (határozatlan idejű) . - Io Programo, 2009. - április 1. - S. 1-6 . Az eredetiből archiválva: 2015. december 8.
  14. Fisher, Matt. HTML5 Flash-fejlesztőknek  (határozatlan idejű) . – Packt Kiadó Kft, 2013. - ISBN 1849693331 . Archiválva : 2015. november 24. a Wayback Machine -nál
  15. Szerver mód parancssor:haxe --wait [host:]port
  16. AS3 vs haXe teljesítmény Archiválva : 2013. január 5. a Wayback Machine , SplashDust webhelyen
  17. AS3 Performance Optimization archiválva : 2015. október 6. a Wayback Machine -en , Starling Wiki
  18. 1 2 Vadim Djacsenko. A „Haxe-ban nem lehet jó HTML5-játékokat készíteni” (lefelé hivatkozás) című témakörben . Yellow After Life (2013. december 5.). Letöltve: 2015. október 9. Az eredetiből archiválva : 2015. szeptember 30. 
  19. Kaya, Talha OpenFL & Haxe, A Bumpy Start . Gamasutra (2014. július 4.). Letöltve: 2015. október 9. Az eredetiből archiválva : 2015. szeptember 24..
  20. Haxe 3.2 kiadás . Github. Letöltve: 2015. október 9. Az eredetiből archiválva : 2016. február 21..
  21. Haxe levelezőlista bejegyzés a névadásról . Archiválva az eredetiből 2007. március 28-án.
  22. ↑ Az MTASC Compiler archiválva 2020. október 20-án a Wayback Machine -en , az MTASC webhelyén
  23. Hax licenc oldal . Az eredetiből archiválva: 2012. május 12.
  24. Hax bemutatkozó oldala . Archiválva az eredetiből 2012. május 4-én.
  25. Főoldal, FlashDevelop Wiki archiválva 2015. október 10-én a Wayback Machine -nél , "első osztályú támogatás a Flash ActionScript (AS2 és AS3) és a Haxe fejlesztéshez"
  26. Haxe támogatás archiválva : 2015. július 6. a Wayback Machine -en , FlashDevelop Wiki
  27. as3hx archiválva : 2015. május 14. a Wayback Machine -nél , AS3 to Haxe konverter, Haxe forráskód tároló
  28. CS2HX - C# to haXe konverter Archiválva : 2010. március 4. a Wayback Machine -nél , CodePlex projekttárhely
  29. Blogbejegyzés, amely megemlíti az Android port előrehaladását . Letöltve: 2015. október 9. Az eredetiből archiválva : 2015. december 28..
  30. Haxe, iPhone és C++ végül archiválva : 2012. április 15. a Wayback Machine -en, GameHaxe webhelyen
  31. Hogyan kezdjük el a Haxe 2.06-ot és a webOS PDK-t [archivált a WayBackMachine-on ] . Az eredetiből archiválva : 2014. október 22.
  32. Szia Lua! - Haxe - A többplatformos eszköztár . Letöltve: 2016. augusztus 9. Az eredetiből archiválva : 2016. augusztus 6..
  33. Haxe nyelvi hivatkozás . Archiválva az eredetiből 2012. május 2-án.
  34. Haxe hivatkozás, amely részletezi az enum használatát . Archiválva az eredetiből 2012. május 11-én.
  35. Nyelvi funkciók . Haxe – A többplatformos eszköztár . Hax Alapítvány. Letöltve: 2015. április 30. Az eredetiből archiválva : 2015. május 16..
  36. Scala–JavaScript fordító . Letöltve: 2015. október 9. Az eredetiből archiválva : 2015. augusztus 10..

Linkek