Disponebla liberigo de ilaro Haxe 4.0, kiu inkluzivas la samnoman mult-paradigma altnivelan programlingvon kun forta tajpado, kruckompililon kaj norman bibliotekon de funkcioj. La projekto subtenas tradukadon al C++, HashLink/C, JavaScript, C#, Java, PHP, Python kaj Lua, same kiel kompilon al JVM, HashLink/JIT, Flash kaj Neko-bajtokodo, kun aliro al la indiĝenaj kapabloj de ĉiu celplatformo. Kompilkodo distribuita de sub la licenco GPLv2, kaj norma biblioteko kaj virtuala maŝino evoluigita por Haxe neko sub la MIT-licenco.
Lingvo estas esprimorientita kun forta tajpado. Objekt-orientitaj, senmarkaj kaj funkciaj programaj konceptoj estas subtenataj.
Haxe-sintakso estas proksima al ECMAScript kaj vastiĝas ĝiaj trajtoj kiel ekzemple senmova tajpado, aŭtotipa inferenco, padronkongruo, senmarkaj, iterator-bazita por bukloj, AST-makrooj, GADT (Ĝeneraligitaj Algebraj Datumoj-Tipoj), abstraktaj tipoj, anonimaj strukturoj, simpligitaj tabelaj difinoj, kondiĉaj kompilesprimoj, alkroĉante metadatenojn al kampoj , klasoj kaj esprimoj, ĉeninterpolado ("Mia nomo estas $nomo"), tajpu parametrojn ("nova Ĉefa‹String›('foo')"), kaj multe pli.
klastesto {
senmova funkcio ĉefa () {
var homoj = [
"Elizabeth" => "Programado",
"Joel" => "Dezajno"
];
por (nomo en homoj.klavoj()) {
var laboro = homoj[nomo];
trace('$nomo faras $laboron por vivteni!');
}
}
}
Nova sintakso por specifi funkciotipo "(nomo:String, aĝo:Int)->Bool" aŭ "(String, Int)->Bool" anstataŭ "String->Int->Bool".
Sago-funkcia sintakso estas "(a, b) -> a + b" anstataŭ "funkcio (a, b) redoni a + b".
Protekto kontraŭ problemoj asociitaj kun la uzo de Nulaj valoroj (eksperimenta trajto, laŭvole ebligita por iuj kampoj, klasoj aŭ pakaĵoj).
La "fina" ŝlosilvorto estas por klaskampoj kaj lokaj variabloj kiuj estas neŝanĝeblaj. "fina" ankaŭ povas esti uzita por difini funkciojn por malhelpi ilin esti superregata de heredo kaj por klasoj/interfacoj kiuj ne povas esti hereditaj.
subteno Unikoda normo por la baza tipo "String" en ĉiuj kompilceloj krom Neko.
Enkonstruita interpretisto reverkita de nulo, kiu nun venas sub la nomo Taksi. Danke al la nova interpretisto, skriptoj kaj makrooj funkcias multe pli rapide. Interaga sencimiga reĝimo estas subtenata.
Nova celsistemo por kompilo (celo) Hashlink - alt-efikeca rultempo desegnita specife por Haxe, subtenanta kompilon al bajtokodo por JIT aŭ C, havas facilan integriĝon kun C, same kiel aliron al malaltnivelaj nombraj tipoj kaj montriloj.
Nova JVM-celo - ebligas al vi generi jvm-bajtkodon preterpasante la Java-kodan kompilpaŝon aldonante la "-D jvm" flagon kiam celado en Java.
La kapablo enlini-deploji ĉe la punkto de vokado de funkcioj aŭ konstrukciistoj, eĉ se ili ne estas deklaritaj kiel tia.
Eblo de inkludo statikaj etendaĵoj kiam oni deklaras tipon (kiel ekzemple "enum") uzante "@:using(path.ToExtension)".
Abstraktaj tipoj nun subtenas "aro" version de la "@:op(a.b)" operatoro por reŝargi "obj.foo = bar" esprimojn.
La "for" buklosintakso nun subtenas ŝlosilvaloran ripeton: "for (ŝlosilo => valoro en kolekto) {}".
Subteno por uzi xml-similan markadon en esprimoj: "var a = ‹hi/›;". Nuntempe, ĉi tiu funkcio disponeblas nur por analizado per makrooj kaj estas en la dezajna stadio.
La sintakso por nedevigaj kampoj en la “plena” notacio de anonimaj strukturspecoj estas: “{ var ?f:Int; }" (alternativo al la mallonga "{ ?f:Int }").
Enumvaloroj nun povas esti defaŭltaj valoroj por funkcio-argumentoj: "funkcio foo‹T› (opcio:Opcio‹T› = Neniu)".
La sintakso "enum abstrakta Nomo(BasicType) {}" ne plu postulas la prefikson "@:" en "enum".
Aŭtomata numerado por abstraktaj enumeradoj:
enumeracio abstrakta Foo(Int) {
var A; // 0
var B; // 1
}
enum abstrakta Bar(String) {
var A; // "A"
var B; // "B"
}
La ŝlosilvorto "ekstera" ne plu postulas la uzon de la prefikso "@:".
Forigis la opcion "iloj Dinamika" por aliri klaskampojn per ŝnuroj. Havebla por eksteraj klasoj aŭ per efektivigo per abstrakta tipo.
Aldonita "A & B" sintakso por tipintersekco, kiu nuntempe nur validas por anonimaj strukturoj kaj tipparametrolimigoj. La malnova lima sintakso estis forigita.
Krei malplenajn "Map" petskribojn disponeblas per la sintakso "var map:Map‹Int, String› = [];" simila al tabelo.
Aldonita datumstrukturo "haxe.ds.ReadOnlyArray".
Metadatenoj nun povas havi nomspacojn ("@:prefix.name function() {...}"). Simile kun difinoj: "#se (iu.flago ... #fino".