Tilgjengelig utgivelse av verktøysett Haxe 4.0, som inkluderer multi-paradigme høynivå programmeringsspråk med samme navn med sterk skriving, en krysskompilator og et standard bibliotek med funksjoner. Prosjektet støtter oversettelse til C++, HashLink/C, JavaScript, C#, Java, PHP, Python og Lua, samt kompilering til JVM, HashLink/JIT, Flash og Neko bytecode, med tilgang til de opprinnelige egenskapene til hver målplattform. Kompilatorkode distribuert av under GPLv2-lisensen, og et standardbibliotek og en virtuell maskin utviklet for Haxe neko under MIT-lisensen.
Språket er uttrykksorientert med sterk skriving. Objektorienterte, generiske og funksjonelle programmeringskonsepter støttes.
Haxe-syntaks er nær ECMAScript og utvides funksjonene som statisk skriving, autotype-inferens, mønstertilpasning, generikk, iteratorbasert for loops, AST-makroer, GADT (Generalized Algebraic Data Types), abstrakte typer, anonyme strukturer, forenklede matrisedefinisjoner, betingede kompileringsuttrykk, vedlegge metadata til felt , klasser og uttrykk, strenginterpolasjon ('Mitt navn er $name'), typeparametere ("new Main‹String›('foo')"), og mye mer.
klasse Test {
statisk funksjon main() {
var folk = [
"Elizabeth" => "Programmering",
"Joel" => "Design"
];
for (navn i people.keys()) {
var jobb = personer[navn];
trace('$navn gjør $jobb for en levende!');
}
}
}
Ny syntaks for å spesifisere funksjonstypen "(navn:String, age:Int)->Bool" eller "(String, Int)->Bool" i stedet for "String->Int->Bool".
Pilfunksjonens syntaks er "(a, b) -> a + b" i stedet for "funksjon(a, b) returner a + b".
Beskyttelse mot problemer knyttet til bruk av nullverdier (eksperimentell funksjon, valgfritt aktivert for visse felt, klasser eller pakker).
Det "endelige" nøkkelordet er for klassefelt og lokale variabler som er uforanderlige. "final" kan også brukes til å definere funksjoner for å hindre at de overstyres av arv og for klasser/grensesnitt som ikke kan arves.
Støtte Unicode-standard for basistypen "String" på alle kompileringsmål unntatt Neko.
Innebygd tolk omskrevet fra bunnen av, som nå kommer under navnet Evaluer. Takket være den nye tolken kjører skript og makroer mye raskere. Interaktiv feilsøkingsmodus støttes.
Nytt målsystem for kompilering (mål) Hashlink - en høyytelses kjøretid designet spesielt for Haxe, som støtter kompilering til bytekode for JIT eller C, har enkel integrasjon med C, samt tilgang til numeriske typer og pekere på lavt nivå.
Nytt JVM-mål - lar deg generere jvm-bytekode ved å hoppe over Java-kodekompileringstrinnet ved å legge til "-D jvm"-flagget når du målretter i Java.
Muligheten til å inline-distribuere på tidspunktet for å kalle funksjoner eller konstruktører, selv om de ikke er deklarert som sådan.
Mulighet for inkludering statiske utvidelser når du erklærer en type (som "enum") ved å bruke "@:using(path.ToExtension)".
Abstrakte typer støtter nå en "sett"-versjon av "@:op(a.b)"-operatoren for å laste "obj.foo = bar"-uttrykk på nytt.
"for" loop-syntaksen støtter nå nøkkel-verdi-iterasjon: "for (nøkkel => verdi i samling) {}".
Støtte for bruk av xml-lignende markup i uttrykk: "var a = ‹hi/›;". Foreløpig er denne funksjonen kun tilgjengelig for parsing med makroer og er på designstadiet.
Syntaksen for valgfrie felt i den "fulle" notasjonen for anonyme strukturtyper er: "{ var ?f:Int; }" (et alternativ til den korte "{ ?f:Int }").
Enum-verdier kan nå være standardverdier for funksjonsargumenter: "function foo‹T›(option:Option‹T› = Ingen)".
Syntaksen "enum abstract Name(BasicType) {}" krever ikke lenger prefikset "@:" i "enum".
Autonummerering for abstrakte opplistinger:
enum abstract Foo(Int) {
var A; // 0
var B; // 1
}
enum abstract Bar(String) {
var A; // "A"
var B; // "B"
}
Nøkkelordet "ekstern" krever ikke lenger bruk av prefikset "@:".
Fjernet alternativet "redskaper Dynamisk" for å få tilgang til klassefelt via strenger. Tilgjengelig for eksterne klasser eller gjennom implementering av en abstrakt type.
Lagt til "A & B"-syntaks for typekryss, som foreløpig kun gjelder for anonyme strukturer og typeparameterbegrensninger. Den gamle begrensningssyntaksen er fjernet.
Å lage tomme "Map"-forekomster er tilgjengelig via syntaksen "var map:Map‹Int, String› = [];" ligner på en matrise.
Lagt til datastruktur "haxe.ds.ReadOnlyArray".
Metadata kan nå ha navneområder ("@:prefix.name function() {...}"). Tilsvarende med definisjoner: "#if (some.flag ... #end".