værktøjskasse frigivelse , 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 under GPLv2-licensen og et standardbibliotek og en virtuel maskine udviklet til Haxe under MIT-licensen.
Sproget er med stærk skrivning. Objektorienterede, generiske og funktionelle programmeringskoncepter understøttes.
Haxe-syntaks er tæt på ECMAScript og 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 .
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!’);
}
}
}
The main version 4.0:
- 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.
- Unicode-standard for basistypen "String" på alle kompileringsmål undtagen Neko.
- Indbygget tolk omskrevet fra bunden, som nu kommer under navnet . 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) - 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 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".
- Ny serviceprotokol til IDE'er brugt i .
- Opdaterede eksterne definitioner (ekstern) for web-API'er og tilføjede manglende.
Kilde: opennet.ru
