Haxe

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 8. října 2017; kontroly vyžadují 29 úprav .
Haxe
Jazyková třída Multi-paradigma
Objevil se v 2005
Vývojář Haxova nadace
Uvolnění 4.2.5 ( 6. března 2022 )
Typový systém statické , dynamické prostřednictvím anotací
Byl ovlivněn Java , OCaml , ActionScript a MTASC [1]
Licence GPL v2, knihovna: MIT
webová stránka haxe.org
Plošina ARM , IA-32 , x64
OS Android , iOS _ Linux , macOS , Windows

Haxe je open source , vysokoúrovňový, multiplatformní programovací jazyk a kompilátor , který lze použít k vytváření aplikací a generování zdrojového kódu pro různé platformy při zachování jednotné kódové základny [2] [3] [4] [5] .

Haxe obsahuje funkce podporované na všech platformách , jako jsou číselné datové typy, řetězce , pole a také podpora některých formátů souborů ( xml , zip ) [3] [6] . Haxe také zahrnuje podporu pro konkrétní API pro každou cílovou platformu kompilátoru.

Kód napsaný v jazyce Haxe lze zkompilovat do kódu JavaScript , C++ , Java , JVM , PHP , C# , Python , Lua a Node.js [7] . Haxe kód se také kompiluje do SWF, HashLink a Neko , bytecode a lze jej také spustit v režimu interpretace [7] .

Hlavními uživateli Haxe jsou TiVo , Prezi , Nickelodeon , Disney , Mattel , Hasbro , Coca Cola , Toyota a BBC [8] [9] . OpenFL a Flambe  jsou populární frameworky Haxe pro vytváření multiplatformního obsahu a programů z jediné kódové základny [9] . Kromě toho se Snõwkit [10] v současné době aktivně vyvíjí . Vzhledem k rostoucímu vytěsňování technologie Adobe Flash v posledních letech ve prospěch HTML5 věnují Haxe, Unity a další multiplatformní nástroje stále více času tomuto druhému, přičemž si zachovávají zpětnou podporu s Adobe Flash Player [9] [11] .

Architektura

Jediný jazyk

Nejvýznamnějším aspektem vývoje architektury Haxe bylo rozhodnutí podporovat Adobe Flash, JavaScript a serverové aplikace v jediné kódové základně [12] [13] . V typických webových projektech musí vývojáři používat mnoho různých jazyků, aby vytvořili kompletní webovou aplikaci [12] [13] :

Haxe byl vytvořen s myšlenkou spojit všechny tyto komponenty do jediné kódové základny a také zjednodušit interakci mezi komponentami aplikace [12] [13] [14] .

Kniha, jejímž autorem je Nicholas Kennessy (zakladatel projektu Haxe), uvádí původní cíle vytvoření Haxe [12] :

Kompilátor

Kompilátor Haxe je rozdělen na jeden frontend a mnoho backendů. Frontend je zodpovědný za parsování a kontrolu typu, aplikaci maker, obecnou optimalizaci, různé transformace kódu a vytvoření přechodné reprezentace kódu ve formě abstraktního syntaktického stromu (ASD). Každý z backendů je zodpovědný za překlad tohoto AST do zdrojového kódu nebo bajtkódu cílové platformy.

Kompilátor je napsán v OCaml . Může být spuštěn v režimu serveru pro podporu dokončování kódu v IDE a v tomto režimu je také podporována mezipaměť, aby se zkrátila doba kompilace [15] .

Výkon

Kompilátor Haxe je optimalizační kompilátor , který také používá substituci funkcí , konstantní skládání , odstraňování mrtvého kódu (DCE) k optimalizaci výkonu kompilovaných programů.

Výkon programů napsaných v Haxe závisí na cílové platformě.

Vývoj

Vývoj Haxe začal v říjnu 2005 [20] a první beta verze byla vydána v únoru 2006. Haxe 1.0 byla vydána v dubnu 2006 a podporovala vykreslování do Adobe Flash , Javascript a Neko .

Haxe byl vyvinut Nicolasem Cannassem a dalšími a původně se jmenoval haXe , protože je to krátký, jednoduchý název a „má v názvu X“ atribut nezbytný pro úspěch nové technologie. poznamenal s humorem autor jazyk [21] .

Haxe je open source ActionScript 2 nástupce kompilátoru MTASC , také vytvořený Nicholasem Hennessym [12] [22] a vydaný pod GNU General Public License verze 2 nebo vyšší [23] .

Haxe má s ActionScriptem 3 mnoho společného . Překladač Haxe je vyvinut v jazyce OCaml , ale pro psaní v Haxe není nutná znalost OCaml.

Mezi výhody používání Haxe patří:

Zdrojový kód

Doporučené IDE pro vývoj Haxe je FlashDevelop [12] , které podporuje ActionScript 2, 3 a Haxe jako hlavní jazyky se zvýrazňováním syntaxe , doplňováním kódu a dalšími funkcemi [12] [25] . Toto IDE také podporuje skládání kódu , refaktorování a interaktivní ladění . [26]

Aby bylo možné použít existující kód, komunita open source vytvořila převodníky zdrojového kódu pro:

Podpora platformy

Jazyk Haxe lze přeložit do bajtkódu různých virtuálních strojů, jako jsou Adobe Flash Player a Neko , a také ActionScript 3 , zdrojový kód JavaScriptu , včetně experimentálně podporovaných C++ a C# . Tato strategie „kompilace“ do různých zdrojů byla vyvinuta pod inspirací paradigmatu „napiš jednou, spusť kdekoli“. Tato strategie také umožňuje programátorovi vybrat nejlepší platformu, na které budou programy běžet.

Generátor kódů Výsledek Plošina Používání Z jaké verze Haxe
AVM1 [6] Bytekód Adobe Flash Player 6+ Desktop, prohlížeč 2005 (alfa)
AVM2 [6] Bytekód Adobe Flash Player 9+, Adobe AIR , Tamarin VM Plocha, Prohlížeč, Server 2005 (alfa)
ActionScript 3 [6] Zdroj Adobe Flash Player 9+ Server, Desktop 2007 (1.12)
C++ (hxcpp) [6] Zdroj Windows, Linux, Mac OS X Server, Desktop, CLI 2009 (2.04)
C++ Zdroj Android [29] , Apple iOS [30] , Palm webOS [31] mobilní, pohybliví 2009 (2.04)
C# [6] Zdroj .NET Framework Server, Desktop, Mobil 2012 (2.10)
Java [6] Zdroj Jáva Server, Desktop 2012 (2.10)
JavaScript [6] Zdroj HTML5 , Node.js , PhoneGap Server, Desktop, Prohlížeč, Mobil 2006 (beta)
Neko [6] Bytekód NekoVM Server, Desktop, CLI 2005 (alfa)
PHP [6] Zdroj PHP server 2008 (2.0)
Python [6] Zdroj Krajta CLI, Web, Desktop 2014 (3.2)
Lua [32] Zdroj Lua Web, Desktop, Mobil 2016 (3.3)

Jazyk

Haxe je obecný objektově orientovaný jazyk s podporou zpracování výjimek a odvozením typu pro parametry třídy. Obecný programování , reflexe , iterátory a funkcionální programování jsou také podporovány jazykem a knihovnami [33] . Haxe také na rozdíl od mnoha jiných jazyků podporuje statické i dynamické psaní současně. Kompilátor může zkontrolovat odvození typu a vyvolat chyby při kompilaci, ale vývojáři mohou také vypnout kontrolu typu a spolehnout se na dynamickou kontrolu typu cílové platformy.

Jazyk Haxe je podobný ECMAScriptu , i když prakticky žádný kód ECMAScript nelze v Haxe zkompilovat bez úprav. Na rozdíl od ECMAScript je Haxe kompilovaný jazyk . Haxe byl ovlivněn ActionScriptem , Javou a OCaml [13] .

Vzhledem k tomu, že Haxe byl založen na ActionScript 3 , podporuje všechny funkce Flash API, i když vyžaduje lepší kódování a vyšší vývojové standardy než kompilátory Adobe.

ahoj světe

Tento program po zkompilování a spuštění napíše „Hello World“:

class Main { statická funkce main () { trace ( "Ahoj světe" ); } }

Tento kód můžete otestovat uložením do souboru s názvem Main.hxa spuštěním kompilátoru Haxe s následujícími možnostmi: haxe -main Main --interp. Tento příkaz spustí překladač Haxe v režimu interpretace kódu a zobrazí Main.hx:3: Hello world.

Typový systém

Haxe je staticky typovaný jazyk. Má bohatý typový systém, včetně tříd, rozhraní, funkčních typů, anonymních typů, algebraických datových typů ( ADT , v Haxe nazývaných „enums“) a také abstraktních datových typů. Třídy, algebraické datové typy a funkční typy podporují parametrický polymorfismus založený na vymazání typu , v jiných objektově orientovaných jazycích často označovaný jako „generika“.

Haxe zahrnuje podporu pro omezený polymorfismus a polymorfismus podtypů .

Haxe navíc podporuje strukturální typování a nominální typování . Aby to programátorům usnadnilo a aniž by došlo k ohrožení bezpečnosti typů, podporuje Haxe odvození typu, což v mnoha případech eliminuje potřebu ručního psaní typů.

Třídy

Třídy (klíčové slovo "class") v Haxe jsou podobné těm v Javě nebo AS3 . Jejich poli mohou být metody, statické proměnné třídy nebo vlastnosti instance třídy. Haxe podporuje „veřejné“ a „soukromé“ přístupové atributy, stejně jako pokročilejší metody řízení přístupu (ACL, odkazy), které jsou popsány pomocí anotací. Metody a statické proměnné s konstantní hodnotou lze vkládat pomocí klíčového slova "inline".

Rozhraní v Haxe jsou podobná rozhraním Java .

interface Icreature { public var narození : Datum ; public var name : String ; veřejná funkce věk (): Int ; } class Fly implements ICreature { public var narození : Datum ; public var name : String ; věk veřejné funkce (): Int return Date . nyní (). getFullYear () - narození . getFullYear (); }

Výčty

Vyjmenované typy  jsou klíčovým rysem jazyka. Výčty mohou mít své vlastní parametry a také být rekurzivní [34] . Jsou podobné algebraickým datovým typům , jako jsou jazyky jako ML nebo Haskell . Přesně řečeno, jedná se o správné typy součtů za předpokladu, že v nich zahrnuté typy produktů musí být definovány v rámci těchto typů součtů. To znamená, že výčty nejsou jen pojmenovány jako „magická čísla“ jako ve většině jazyků, ale mohou elegantně řešit složité architektonické problémy:

enum Barva { červená ; zelená ; modrá ; rgb ( r : Int , g : Int , b : Int ); } class Barvy { statická funkce toInt ( c : Barva ) : Int { return switch ( c ) { case red : 0xFF0000 ; pouzdro zelené : 0x00FF00 ; modré pouzdro : 0x0000FF _ případ rgb ( r , g , b ): ( r << 16 ) | ( g << 8 ) | b ; } } statická funkce validCalls () { var redint = toInt ( Color . red ); var rgbint = toInt ( Barva . rgb ( 100 , 100 , 100 )); } }

Haxe také podporuje parametrické typy výčtů. Příkladem je implementace typů Option, Buď a ConsList a ConsList je také rekurzivní:

enum Možnost < T > { Some ( v : T ); žádný ; } enum Buď < T , U > { Doleva ( v : T ); Vpravo ( v : U ); } enum ConsList < T > { Nil ; Nevýhody ( hlava : T , konec : Seznam seznamů < T >); }

Dokumentace na webu uvádí [35] , že Haxe podporuje také zobecněné algebraické typy (GADT), ale neuvádí příklad, jak je vytvořit.

Anonymní typy

Anonymní typy jsou definovány explicitním popisem jejich struktury, lze jim také přiřadit alias pomocí definice typu (klíčové slovo "typedef"):

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

Typy funkcí

Typy funkcí jsou v Haxe objekty první třídy. Jsou popsány pomocí šipek mezi typy argumentů a mezi typy a návratovou hodnotou, jako v mnoha jiných funkčních jazycích. Na rozdíl od Haskellu nebo rodiny ML však nejsou všechny funkce v Haxe unární (funkce s jedním argumentem), nelze je ve výchozím nastavení částečně použít . Typové podpisy v následujících příkladech mají tedy jiný význam než výše uvedené jazyky.

Typ F je funkce, která bere jako argumenty Int a String a jako výsledek vrací Float.

V jazycích, kde existují pouze unární funkce, by tento typ znamenal funkci, která bere Int jako argument a vrací funkci typu String->Float.

Typy F2 a F3 popisují stejný typ. Oba popisují binární funkce, které vracejí binární funkci typu F. Pro F2 je popsán případ použití typu funkce v jiné definici.

typedef F = Int -> String -> Float ; typedef F2 = Int -> Řetězec -> F ; typedef F3 = Int -> String ->( Int -> String -> Float );

Abstraktní typy

Koncept, nazývaný abstraktní typy , je nejnovějším přírůstkem do typového systému Haxe. Umožňují opětovné použití stávajících typů pro specifické účely, jako je implementace typů pro měrné jednotky, přičemž výrazně snižují možnost smíchání různých systémů (jako jsou míle a kilometry). Termín „abstraktní typ“ má v kontextu jazyka Haxe jiný význam než běžné abstraktní typy .

Následující příklad předpokládá, že metrický systém se používá ve výchozím nastavení a pro podporu starších dat je vyžadován převod na míle. Haxe je schopen automaticky převádět míle na kilometry, ale ne naopak.

abstract Kilometr ( 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 )); } class Test { static var km : Kilometr ; statická funkce main (){ var one100Miles = new Mile ( 100 ); km = 1100 mil ; stopa ( km ); // 160,935 } }

km = one100Miles;Příklad ukazuje, že pro použití správných jednotek není nutné provádět explicitní převod .

Strukturální typizace

Strukturální typování hraje důležitou roli v mnoha funkcionálních programovacích jazycích a zároveň docela malou roli v běžných OOP jazycích. Na rozdíl od systému nominálních typů není rovnost dvou typů určena rovností jakýchkoli názvů typů, ale spíše strukturou typu. Typy struktur lze považovat za implicitní rozhraní:

class FooBar { public var foo : Int ; public var bar : String ; public function new (){ foo = 1 ; pruh = "2" ;} function anyFooBar ( v :{ foo : Int , bar : String }) trace ( v . foo ); test statické funkce (){ var fb = new FooBar (); fb _ anyFooBar ( fb ); fb _ anyFooBar ({ foo : 123 , bar : "456" }); } }

Viz také

Také na platformě Haxe:

  • Neko
  • OpenFL

Další jazyky, které se kompilují do JavaScriptu:

Další multiplatformní jazyky:

Poznámky

  1. https://haxe.org/manual/introduction-haxe-history.html
  2. Nicolasovo oznámení o změně pravopisu na oficiálním mail listu Haxe .
  3. 1 2 Ponticelli, Franco. Profesionální haXe a Neko  (neopr.) . - Wiley, 2008. - ISBN 0470122137 . Archivováno 28. listopadu 2015 na Wayback Machine
  4. Ivanov, Michael. Kuchařka Away3D 3.6  (nedefinováno) . — Packt Publishing Ltd, 2011. - ISBN 1849512817 . Archivováno 2. listopadu 2015 na Wayback Machine
  5. Doucet, Lars Haxe/OpenFL pro domácí herní konzole . Gamasutra (3. června 2015). Získáno 9. října 2015. Archivováno z originálu 8. září 2015.
  6. 1 2 3 4 5 6 7 8 9 10 11 Úvod do standardní knihovny Haxe Archivováno 14. srpna 2015 ve Wayback Machine , Haxe Docs
  7. 12 Cíle kompilátoru . Haxe – sada nástrojů pro více platforem . Získáno 23. února 2021. Archivováno z originálu dne 2. března 2021.
  8. Společnosti využívající Haxe Archivováno 7. září 2015 na Wayback Machine , Haxe Docs
  9. 1 2 3 Doucet, Lars Vážený Adobe: Podpořte Haxe, uložte si své nástroje . Gamasutra (24. června 2014). Získáno 9. října 2015. Archivováno z originálu dne 24. září 2015.
  10. o snõwkit . snõwkit (20. září 2014). Získáno 9. srpna 2016. Archivováno z originálu 9. srpna 2016.
  11. Doucete, Lars Flash je mrtvý, ať žije OpenFL! . Gamasutra (18. března 2014). Získáno 9. října 2015. Archivováno z originálu 30. srpna 2015.
  12. 1 2 3 4 5 6 7 Grden, John; Mineault, Patrick; Balkán, Aral; Hughes, Marc; Arnold, Wade. Základní průvodce vývojem Open Source Flash  . - Apress , 2008. - S. Kapitola 9 (Užití Haxe). — ISBN 1430209941 . Archivováno 8. února 2016 na Wayback Machine
  13. 1 2 3 4 Rozhovor Haxe  (neurčitý) . - Io Programmo, 2009. - 1. dubna. - S. 1-6 . Archivováno z originálu 8. prosince 2015.
  14. Fisher, Matt. HTML5 pro vývojáře Flash  (neurčité) . — Packt Publishing Ltd, 2013. - ISBN 1849693331 . Archivováno 24. listopadu 2015 na Wayback Machine
  15. Příkazový řádek v režimu serveru:haxe --wait [host:]port
  16. Výkon AS3 vs haXe Archivováno 5. ledna 2013 na webu Wayback Machine , web SplashDust
  17. AS3 Performance Optimization Archivováno 6. října 2015 na Wayback Machine , Starling Wiki
  18. 1 2 Vadim Djačenko. Na téma „V Haxe nemůžete dělat dobré hry HTML5“ (odkaz dolů) . Žlutá po životě (5. prosince 2013). Získáno 9. října 2015. Archivováno z originálu 30. září 2015. 
  19. Kaya, Talha OpenFL & Haxe, Bumpy Start . Gamasutra (4. července 2014). Získáno 9. října 2015. Archivováno z originálu dne 24. září 2015.
  20. Vydání Haxe 3.2 . Github. Získáno 9. října 2015. Archivováno z originálu 21. února 2016.
  21. Příspěvek do mailing listu Haxe o pojmenování . Archivováno z originálu 28. března 2007.
  22. Kompilátor MTASC Archivováno 20. října 2020 na webu Wayback Machine , MTASC
  23. Licenční stránka Hax . Archivováno z originálu 12. května 2012.
  24. Úvodní stránka Hax . Archivováno z originálu 4. května 2012.
  25. Hlavní stránka, FlashDevelop Wiki Archivováno 10. října 2015 na Wayback Machine , „prvotřídní podpora pro Flash ActionScript (AS2 a AS3) a vývoj Haxe“
  26. Haxe Support Archived 6. července 2015 na Wayback Machine , FlashDevelop Wiki
  27. as3hx Archivováno 14. května 2015 na Wayback Machine , převodník AS3 na Haxe, úložiště zdrojového kódu Haxe
  28. CS2HX – převodník C# na haXe Archivováno 4. března 2010 na Wayback Machine , hostování projektu CodePlex
  29. Příspěvek na blogu zmiňující pokrok v portu Android . Získáno 9. října 2015. Archivováno z originálu 28. prosince 2015.
  30. Haxe, iPhone & C++ At Last Archived 15. dubna 2012 na Wayback Machine , web GameHaxe
  31. Jak začít s Haxe 2.06 a webOS PDK [archivováno na WayBackMachine ] . Archivováno z originálu 22. října 2014.
  32. Ahoj Lua! - Haxe - The Cross-platform Toolkit . Získáno 9. srpna 2016. Archivováno z originálu 6. srpna 2016.
  33. Odkaz na jazyk Haxe . Archivováno z originálu 2. května 2012.
  34. Odkaz na Haxe popisující použití enum . Archivováno z originálu 11. května 2012.
  35. Jazykové funkce . Haxe – sada nástrojů pro více platforem . Haxova nadace. Získáno 30. dubna 2015. Archivováno z originálu 16. května 2015.
  36. Kompilátor Scala to JavaScript . Získáno 9. října 2015. Archivováno z originálu 10. srpna 2015.

Odkazy