izdaja kompleta orodij , 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 pod licenco GPLv2 ter standardno knjižnico in virtualni stroj, razvit za Haxe pod licenco MIT.
Jezik je z močnim tipkanjem. Podprti so koncepti objektno usmerjenega, splošnega in funkcionalnega programiranja.
Sintaksa Haxe je blizu ECMAScriptu in 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 .
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!');
}
}
}
Glavni različica 4.0:
- 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.
- Standard Unicode za osnovni tip "String" na vseh ciljih prevajanja razen Neko.
- Vgrajeni tolmač, prepisan iz nič, ki je zdaj pod imenom . Zahvaljujoč novemu tolmaču se skripti in makri izvajajo veliko hitreje. Podprt je interaktivni način odpravljanja napak.
- Nov ciljni sistem za prevajanje (target) - 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 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”.
- Nov servisni protokol za IDE, ki se uporablja v .
- Posodobljene zunanje definicije (extern) za spletne API-je in dodane manjkajoče.
Vir: opennet.ru
