A Haxe 4.0 programozási nyelv kiadása

Elérhető eszköztár kiadása Haxe 4.0, amely tartalmazza az azonos nevű, többparadigmás magas szintű programozási nyelvet, erős gépeléssel, egy keresztfordítót és egy szabványos függvénykönyvtárat. A projekt támogatja a fordítást C++, HashLink/C, JavaScript, C#, Java, PHP, Python és Lua nyelvekre, valamint JVM-re, HashLink/JIT-re, Flash-re és Neko bájtkódra fordítást, az egyes célplatformok natív képességeihez való hozzáféréssel. Fordító kód forgalmazza a GPLv2 licenc alatt, valamint egy szabványos könyvtár és egy Haxe számára kifejlesztett virtuális gép neko az MIT engedélye alapján.

A nyelv az kifejezés-orientált erős gépeléssel. Objektumorientált, általános és funkcionális programozási koncepciók támogatottak.
A Haxe szintaxis közel áll az ECMAScript és kitágul jellemzői, mint például statikus gépelés, autotípus-következtetés, mintaillesztés, általánosságok, iterátor alapú ciklusokhoz, AST makrók, GADT (Általános algebrai adattípusok), absztrakt típusok, névtelen struktúrák, egyszerűsített tömbdefiníciók, feltételes fordítási kifejezések, metaadatok csatolása mezőkhöz , osztályok és kifejezések, karakterlánc-interpoláció ('A nevem $name'), típusparaméterek ("new Main‹String›('foo')"), és sokkal több.

osztály teszt {
static function main() {
var people = [
"Elizabeth" => "Programozás",
"Joel" => "Dizájn"
];

for (név a people.keys()-ben) {
var job = emberek[név];
trace('$name a megélhetésért $munkát végez!');
}
}
}

A főbb innovációk 4.0 verzió:

  • Új szintaxis a "(név:String, age:Int)->Bool" vagy "(String, Int)->Bool" függvénytípus megadásához a "String->Int->Bool" helyett.
  • A nyíl függvény szintaxisa "(a, b) -> a + b" a "függvény(a, b) return a + b" helyett.
  • Védelem a Null értékek használatával kapcsolatos problémák ellen (kísérleti szolgáltatás, opcionálisan engedélyezve bizonyos mezőknél, osztályoknál vagy csomagoknál).
  • A "végső" kulcsszó az osztálymezőkre és a megváltoztathatatlan helyi változókra vonatkozik. A "final" függvények meghatározására is használható, hogy megakadályozzák azok öröklődés általi felülbírálását, valamint olyan osztályok/interfészek esetében, amelyek nem örökölhetők.
  • támogatás Unicode szabvány a "String" alaptípushoz az összes fordítási célhoz, kivéve a Neko-t.
  • A nulláról átírt beépített tolmács, ami most a név alatt jön Értékelés. Az új értelmezőnek köszönhetően a szkriptek és makrók sokkal gyorsabban futnak. Az interaktív hibakeresési mód támogatott.
  • Új célrendszer a fordításhoz (cél) Hashlink - egy nagy teljesítményű futtatókörnyezet, amelyet kifejezetten a Haxe-hoz terveztek, támogatja a JIT vagy C bájtkódra való fordítását, könnyen integrálható a C-vel, valamint hozzáférést biztosít az alacsony szintű numerikus típusokhoz és mutatókhoz.
  • Új JVM-cél – lehetővé teszi jvm bájtkód generálását a Java kódfordítási lépés kihagyásával a „-D jvm” jelző hozzáadásával, amikor Java-ban céloz.
  • Lehetőség a soron belüli telepítésre a függvények vagy konstruktorok hívásakor, még akkor is, ha nincsenek ekként deklarálva.
  • Beépítési lehetőség statikus kiterjesztések amikor egy típust (például "enum") deklarál a "@:using(path.ToExtension)" használatával.
  • Az absztrakt típusok mostantól támogatják a "@:op(a.b)" operátor "set" változatát az "obj.foo = bar" kifejezések újratöltéséhez.
  • A "for" ciklus szintaxisa mostantól támogatja a kulcsérték iterációját: "for (kulcs => érték a gyűjteményben) {}".
  • Támogatás az xml-szerű jelölés használatához a következő kifejezésekben: “var a = ‹hi/›;”. Ez a funkció egyelőre csak makrók elemzéséhez érhető el, és a tervezési szakaszban van.
  • Az anonim szerkezettípusok „teljes” jelölésében az opcionális mezők szintaxisa a következő: „{ var ?f:Int; }" (a rövid "{ ?f:Int }" alternatívája).
  • Az enum értékek mostantól alapértelmezett értékei lehetnek a függvényargumentumok számára: "function foo‹T›(opció:Opció‹T› = Nincs)".
  • Az "enum abstract Name(BasicType) {}" szintaxis többé nem igényli a "@:" előtagot az "enum"-ban.
  • Automatikus számozás absztrakt felsorolásokhoz:

    enum abstract Foo(Int) {
    var A; // 0
    var B; 1
    }
    enum abstract Bar(String) {
    var A; // "A"
    var B; "B"
    }

  • Az "extern" kulcsszóhoz már nem szükséges a "@:" előtag használata.
  • Eltávolította a " opciótmunkagépek Dinamikus" az osztálymezők karakterláncokon keresztüli eléréséhez. Elérhető külső osztályokhoz vagy absztrakt típussal való megvalósítással.
  • "A és B" szintaxis hozzáadva a típusmetszethez, amely jelenleg csak a névtelen struktúrákra és a típusparaméter-megkötésekre vonatkozik. A régi kényszerszintaxis eltávolítva.
  • Üres "Map" példányok létrehozása a "var map:Map‹Int, String› = [];" szintaxissal érhető el. tömbhöz hasonló.
  • Hozzáadott adatstruktúra "haxe.ds.ReadOnlyArray".
  • A metaadatok most már rendelkezhetnek névterekkel („@:prefix.name function() {…}”). Hasonlóan a definíciókkal: „#if (valami.zászló ... #vége”.
  • Új szolgáltatási protokoll a használt IDE-ekhez plugin a VSCode-hoz.
  • Frissített külső definíciók (extern) a webes API-khoz, és hozzáadtuk a hiányzókat.

Forrás: opennet.ru

Hozzászólás