Ledig værktøjskasse frigivelse Haxe 4.0, som inkluderer multi-paradigme højniveau programmeringssprog af samme navn med stærk indtastning, en cross-compiler og et standard bibliotek af funktioner. Projektet understøtter oversættelse til C++, HashLink/C, JavaScript, C#, Java, PHP, Python og Lua samt kompilering til JVM, HashLink/JIT, Flash og Neko bytecode, med adgang til de native muligheder for hver målplatform. Compiler kode distribueret af under GPLv2-licensen og et standardbibliotek og en virtuel maskine udviklet til Haxe Neko under MIT-licensen.
Sproget er udtryksorienteret med stærk skrivning. Objektorienterede, generiske og funktionelle programmeringskoncepter understøttes.
Haxe-syntaks er tæt på ECMAScript og udvider sig dens funktioner såsom statisk typning, autotype-inferens, mønstermatchning, generiske, iterator-baseret for loops, AST-makroer, GADT (Generalized Algebraic Data Types), abstrakte typer, anonyme strukturer, forenklede array-definitioner, betingede kompileringsudtryk, vedhæftning af metadata til felter , klasser og udtryk, strenginterpolation ('Mit navn er $navn'), typeparametre ("ny hovedstreng›('foo')"), og meget mere.
klasse Test {
statisk funktion main() {
var mennesker = [
"Elizabeth" => "Programmering",
"Joel" => "Design"
];
for (navn i people.keys()) {
var job = personer[navn];
trace(‘$navn gør $job for en levevej!’);
}
}
}
Ny syntaks til angivelse af funktionstypen "(navn:String, age:Int)->Bool" eller "(String, Int)->Bool" i stedet for "String->Int->Bool".
Pilfunktionssyntaks er "(a, b) -> a + b" i stedet for "funktion(a, b) returnerer a + b".
Beskyttelse mod problemer forbundet med brugen af Null-værdier (eksperimentel funktion, valgfrit aktiveret for visse felter, klasser eller pakker).
Det "endelige" nøgleord er for klassefelter og lokale variabler, der er uforanderlige. "final" kan også bruges til at definere funktioner for at forhindre dem i at blive tilsidesat af nedarvning og for klasser/grænseflader, der ikke kan nedarves.
Support Unicode-standard for basistypen "String" på alle kompileringsmål undtagen Neko.
Indbygget tolk omskrevet fra bunden, som nu kommer under navnet eval. Takket være den nye fortolker kører scripts og makroer meget hurtigere. Interaktiv debugging-tilstand er understøttet.
Nyt målsystem til kompilering (mål) Hashlink - en højtydende runtime designet specifikt til Haxe, der understøtter kompilering til bytekode til JIT eller C, har nem integration med C, samt adgang til numeriske typer og pointere på lavt niveau.
Nyt JVM-mål - giver dig mulighed for at generere jvm-bytekode ved at springe Java-kodekompileringstrinet over ved at tilføje "-D jvm"-flaget, når du målretter i Java.
Evnen til at inline-deployere på tidspunktet for at kalde funktioner eller konstruktører, selvom de ikke er erklæret som sådan.
Mulighed for inklusion statiske udvidelser når du erklærer en type (såsom "enum") ved hjælp af "@:using(path.ToExtension)".
Abstrakte typer understøtter nu en "set"-version af "@:op(a.b)"-operatoren til at genindlæse "obj.foo = bar"-udtryk.
"for" loop-syntaksen understøtter nu nøgle-værdi iteration: "for (nøgle => værdi i samling) {}".
Understøttelse af brug af xml-lignende markup i udtryk: "var a = ‹hi/›;". Indtil videre er denne funktion kun tilgængelig til parsing med makroer og er på designstadiet.
Syntaksen for valgfrie felter i den "fulde" notation af anonyme strukturtyper er: "{ var ?f:Int; }" (et alternativ til det korte "{ ?f:Int }").
Enum-værdier kan nu være standardværdier for funktionsargumenter: "funktion foo‹T›(option:Option‹T› = Ingen)”.
Syntaksen "enum abstract Name(BasicType) {}" kræver ikke længere "@:"-præfikset i "enum".
Automatisk nummerering for abstrakte opregninger:
enum abstract Foo(Int) {
var A; // 0
var B; // 1
}
enum abstract Bar(String) {
var A; // "A"
var B; // "B"
}
Nøgleordet "ekstern" kræver ikke længere brug af præfikset "@:".
Fjernede muligheden "redskaber Dynamisk" for at få adgang til klassefelter via strenge. Tilgængelig for eksterne klasser eller gennem implementering af en abstrakt type.
Tilføjet "A & B" syntaks for type skæringspunkt, som i øjeblikket kun gælder for anonyme strukturer og type parameter begrænsninger. Den gamle begrænsningssyntaks er blevet fjernet.
Oprettelse af tomme "Map"-instanser er tilgængelig via syntaksen "var map:Map‹Int, String› = [];" ligner et array.
Tilføjet datastruktur "haxe.ds.ReadOnlyArray".
Metadata kan nu have navnerum ("@:præfiks.navn funktion() {...}"). Tilsvarende med definitioner: "#if (some.flag ... #end".