Na voljo izdaja kompleta orodij Haxe 4.0, ki vključuje istoimenski visokonivojski programski jezik z več paradigmami z močnim tipkanjem, navzkrižnim prevajalnikom in standardno knjižnico funkcij. Projekt podpira prevajanje v C++, HashLink/C, JavaScript, C#, Java, PHP, Python in Lua, kot tudi kompilacijo v JVM, HashLink/JIT, Flash in Neko bytecode, z dostopom do izvornih zmogljivosti vsake ciljne platforme. Koda prevajalnika distributer pod licenco GPLv2 ter standardno knjižnico in virtualni stroj, razvit za Haxe Neko pod licenco MIT.
Jezik je izrazno usmerjeni z močnim tipkanjem. Podprti so koncepti objektno usmerjenega, splošnega in funkcionalnega programiranja.
Sintaksa Haxe je blizu ECMAScriptu in širi njegove funkcije, kot so statično tipkanje, sklepanje o samodejnem tipu, ujemanje vzorcev, generika, zanke for na podlagi iteratorja, makri AST, GADT (generalni algebraični podatkovni tipi), abstraktni tipi, anonimne strukture, poenostavljene definicije matrik, izrazi pogojnega prevajanja, pripenjanje metapodatkov v polja , razredi in izrazi, interpolacija nizov ('My name is $name'), parametri tipa ("new Main‹String›('foo')") in veliko več.
razred Test {
statična funkcija main() {
var ljudje = [
"Elizabeth" => "Programiranje",
"Joel" => "Oblikovanje"
];
za (ime v people.keys()) {
var job = ljudje[ime];
trace('$name opravlja $job za preživetje!');
}
}
}
Nova sintaksa za določanje tipa funkcije "(name:String, age:Int)->Bool" ali "(String, Int)->Bool" namesto "String->Int->Bool".
Sintaksa puščične funkcije je "(a, b) -> a + b" namesto "funkcija (a, b) vrne a + b".
Zaščita pred težavami, povezanimi z uporabo ničelnih vrednosti (eksperimentalna funkcija, izbirno omogočena za določena polja, razrede ali pakete).
Ključna beseda "končna" je za polja razreda in lokalne spremenljivke, ki so nespremenljive. "final" lahko uporabite tudi za definiranje funkcij, da preprečite njihovo preglasitev z dedovanjem in za razrede/vmesnike, ki jih ni mogoče podedovati.
Podpora Standard Unicode za osnovni tip "String" na vseh ciljih prevajanja razen Neko.
Vgrajeni tolmač, prepisan iz nič, ki je zdaj pod imenom Oceni. Zahvaljujoč novemu tolmaču se skripti in makri izvajajo veliko hitreje. Podprt je interaktivni način odpravljanja napak.
Nov ciljni sistem za prevajanje (target) Hashlink - visoko zmogljivo izvajalno okolje, zasnovano posebej za Haxe, ki podpira prevajanje v bajtno kodo za JIT ali C, ima preprosto integracijo s C, pa tudi dostop do številskih tipov in kazalcev na nizki ravni.
Nov cilj JVM – omogoča ustvarjanje bajtne kode jvm tako, da preskočite korak prevajanja kode Java z dodajanjem zastavice »-D jvm« pri ciljanju v Javi.
Možnost vgrajenega uvajanja na točki klica funkcij ali konstruktorjev, tudi če niso deklarirani kot taki.
Možnost vključitve statične razširitve pri deklaraciji vrste (kot je "enum") z uporabo "@:using(path.ToExtension)".
Abstraktni tipi zdaj podpirajo različico »set« operatorja »@:op(ab)« za ponovno nalaganje izrazov »obj.foo = bar«.
Sintaksa zanke "for" zdaj podpira ponovitev ključ-vrednost: "for (ključ => vrednost v zbirki) {}".
Podpora za uporabo oznak, podobnih xml, v izrazih: “var a = ‹hi/›;”. Za zdaj je ta funkcija na voljo samo za razčlenjevanje z makri in je v fazi načrtovanja.
Sintaksa za izbirna polja v »polnem« zapisu anonimnih strukturnih tipov je: »{ var ?f:Int; }« (alternativa kratkemu »{ ?f:Int }«).
Vrednosti enum so zdaj lahko privzete vrednosti za argumente funkcije: "function foo‹T›(option:Option‹T› = None)".
Sintaksa "enum abstract Name(BasicType) {}" ne zahteva več predpone "@:" v "enum".
Samodejno oštevilčevanje za abstraktna oštevilčenja:
enum abstract Foo(Int) {
var A; // 0
var B; // 1
}
enum abstract Bar(String) {
var A; // "A"
var B; // "B"
}
Ključna beseda "extern" ne zahteva več uporabe predpone "@:".
Odstranjena možnost "izvedbe Dynamic" za dostop do polj razreda prek nizov. Na voljo za eksterne razrede ali z implementacijo z abstraktnim tipom.
Dodana sintaksa »A & B« za križišče tipov, ki trenutno velja samo za anonimne strukture in omejitve parametrov tipa. Stara sintaksa omejitve je bila odstranjena.
Ustvarjanje praznih primerkov »Map« je na voljo prek sintakse »var map:Map‹Int, String› = [];« podobno nizu.
Dodana podatkovna struktura "haxe.ds.ReadOnlyArray".
Metapodatki imajo zdaj lahko imenske prostore (»@:prefix.name function() {…}«). Podobno z definicijami: “#if (some.flag ... #end”.