Izid programskega jezika Haxe 4.0

Na voljo izdaja kompleta orodij Haxe 4.0, 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 distributer pod licenco GPLv2 ter standardno knjižnico in virtualni stroj, razvit za Haxe Neko pod licenco MIT.

Jezik je izrazno usmerjeni z močnim tipkanjem. Podprti so koncepti objektno usmerjenega, splošnega in funkcionalnega programiranja.
Sintaksa Haxe je blizu ECMAScriptu in širi 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 veliko več.

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 inovacije 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.
  • Podpora Standard Unicode za osnovni tip "String" na vseh ciljih prevajanja razen Neko.
  • Vgrajeni tolmač, prepisan iz nič, ki je zdaj pod imenom Oceni. Zahvaljujoč novemu tolmaču se skripti in makri izvajajo veliko hitreje. Podprt je interaktivni način odpravljanja napak.
  • Nov ciljni sistem za prevajanje (target) Hashlink - 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 statične razširitve 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 vtičnik za VSCode.
  • Posodobljene zunanje definicije (extern) za spletne API-je in dodane manjkajoče.

Vir: opennet.ru

Dodaj komentar