Izdanje programskog jezika Haxe 4.0

Dostupno izdanje kompleta alata Haxe 4.0, koji uključuje istoimeni programski jezik visokog nivoa sa više paradigmi sa jakim kucanjem, unakrsni kompajler i standardnu ​​biblioteku funkcija. Projekat podržava prevođenje na C++, HashLink/C, JavaScript, C#, Java, PHP, Python i Lua, kao i kompilaciju u JVM, HashLink/JIT, Flash i Neko bajt kod, uz pristup izvornim mogućnostima svake ciljne platforme. Kod kompajlera distribuira pod GPLv2 licencom, i standardnu ​​biblioteku i virtuelnu mašinu razvijenu za Haxe neko pod MIT licencom.

Jezik je orijentisan na ekspresiju sa jakim kucanjem. Podržani su objektno orijentisani, generički i funkcionalni koncepti programiranja.
Haxe sintaksa je bliska ECMAScript i širi se njegove karakteristike kao što su statičko kucanje, zaključivanje autotipova, podudaranje uzoraka, generika, iteratorski bazirani za petlje, AST makroi, GADT (generalizovani algebarski tipovi podataka), apstraktni tipovi, anonimne strukture, pojednostavljene definicije nizova, izrazi za uslovnu kompilaciju, pričvršćivanje metapodataka poljima , klase i izrazi, interpolacija niza ('Moje ime je $name'), parametri tipa ("new Main‹String›('foo')") i mnogo više.

razred Test {
statička funkcija main() {
var ljudi = [
"Elizabeth" => "Programiranje",
"Joel" => "Dizajn"
];

za (ime u people.keys()) {
var posao = ljudi[ime];
trace('$name radi $posao za život!');
}
}
}

Glavni inovacije verzija 4.0:

  • Nova sintaksa za određivanje tipa funkcije "(name:String, age:Int)->Bool" ili "(String, Int)->Bool" umjesto "String->Int->Bool".
  • Sintaksa funkcije strelice je "(a, b) -> a + b" umjesto "function(a, b) return a + b".
  • Zaštita od problema povezanih s korištenjem Null vrijednosti (eksperimentalna funkcija, opcionalno omogućena za određena polja, klase ili pakete).
  • Ključna riječ "final" je za polja klase i lokalne varijable koje su nepromjenjive. "final" se također može koristiti za definiranje funkcija kako bi se spriječilo njihovo nadjačavanje nasljeđivanjem i za klase/sučelja koja se ne mogu naslijediti.
  • podrška Unicode standard za osnovni tip "String" na svim ciljevima kompilacije osim Neko.
  • Ugrađeni tumač prepisan od nule, koji sada dolazi pod imenom Evaluate. Zahvaljujući novom tumaču, skripte i makroi rade mnogo brže. Interaktivni način za otklanjanje grešaka je podržan.
  • Novi ciljni sistem za kompilaciju (cilj) Hashlink - runtime visokih performansi dizajnirano posebno za Haxe, podržava kompilaciju u bajtkod za JIT ili C, ima laku integraciju sa C, kao i pristup numeričkim tipovima niskog nivoa i pokazivačima.
  • Novi JVM cilj - omogućava vam da generišete jvm bajtkod preskakanjem koraka kompilacije Java koda dodavanjem oznake "-D jvm" kada ciljate u Javi.
  • Sposobnost inline-deploy-a na mjestu pozivanja funkcija ili konstruktora, čak i ako nisu deklarirani kao takvi.
  • Mogućnost uključivanja statičke ekstenzije kada deklarirate tip (kao što je "enum") koristeći "@:using(path.ToExtension)".
  • Apstraktni tipovi sada podržavaju "set" verziju operatora "@:op(a.b)" za ponovno učitavanje izraza "obj.foo = bar".
  • Sintaksa petlje "for" sada podržava iteraciju ključ/vrijednost: "for (ključ => vrijednost u kolekciji) {}".
  • Podrška za korištenje oznaka poput xml u izrazima: “var a = ‹hi/›;”. Za sada je ova funkcija dostupna samo za raščlanjivanje s makroima i u fazi je dizajna.
  • Sintaksa za opciona polja u “punom” zapisu anonimnih tipova strukture je: “{ var ?f:Int; }" (alternativa kratkom "{ ?f:Int }").
  • Enum vrijednosti sada mogu biti zadane vrijednosti za argumente funkcije: "function foo‹T›(option:Option‹T› = None)".
  • Sintaksa "enum apstract Name(BasicType) {}" više ne zahtijeva prefiks "@:" u "enum".
  • Automatsko numerisanje za apstraktne enumeracije:

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

  • Ključna riječ "extern" više ne zahtijeva upotrebu prefiksa "@:".
  • Uklonjena opcija "realizacije Dynamic" za pristup poljima klase putem stringova. Dostupno za eksterne klase ili kroz implementaciju apstraktnog tipa.
  • Dodata "A & B" sintaksa za raskrsnicu tipa, koja se trenutno primjenjuje samo na anonimne strukture i ograničenja tipa parametara. Stara sintaksa ograničenja je uklonjena.
  • Kreiranje praznih instanci "Map" dostupno je putem sintakse "var map:Map‹Int, String› = [];" slično nizu.
  • Dodata struktura podataka "haxe.ds.ReadOnlyArray".
  • Metapodaci sada mogu imati prostore imena (“@:prefix.name function() {…}”). Slično sa definicijama: “#if (neka.zastava ... #kraj”.
  • Novi servisni protokol za IDE koji se koristi u dodatak za VSCode.
  • Ažurirane vanjske definicije (extern) za Web API-je i dodane one koje nedostaju.

izvor: opennet.ru

Dodajte komentar