Izdanje programskog jezika Haxe 4.0

Dostupno izdanje alata Haxe 4.0, koji uključuje istoimeni programski jezik visoke razine s više paradigmi s jakim tipiziranjem, unakrsnim kompajlerom i standardnom bibliotekom funkcija. Projekt podržava prijevod u C++, HashLink/C, JavaScript, C#, Java, PHP, Python i Lua, kao i kompilaciju u JVM, HashLink/JIT, Flash i Neko bajt kod, s pristupom nativnim mogućnostima svake ciljne platforme. Kod prevoditelja distribuira pod licencom GPLv2, te standardna biblioteka i virtualni stroj razvijen za Haxe Neko pod licencom MIT-a.

Jezik je usmjeren na izražavanje s jakim tipkanjem. Podržani su objektno orijentirani, generički i funkcionalni koncepti programiranja.
Haxe sintaksa je bliska ECMAScriptu i širi se njegove značajke kao što su statički tip, zaključivanje autotipa, podudaranje uzoraka, generički, petlje for na temelju iteratora, AST makronaredbe, GADT (općeniti algebarski tipovi podataka), apstraktni tipovi, anonimne strukture, pojednostavljene definicije polja, izrazi uvjetne kompilacije, prilaganje metapodataka poljima , klase i izrazi, interpolacija niza ('Zovem se $name'), parametri tipa ("novi glavni‹string›('foo')") i mnogo više.

klasa Test {
statička funkcija main() {
var ljudi = [
"Elizabeta" => "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 "funkcija(a, b) vraća a + b".
  • Zaštita od problema povezanih s korištenjem Null vrijednosti (eksperimentalna značajka, izborno 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 eval. Zahvaljujući novom tumaču, skripte i makronaredbe rade mnogo brže. Podržan je interaktivni način otklanjanja pogrešaka.
  • Novi ciljni sustav za kompilaciju (target) Hashlink - runtime visokih performansi dizajniran posebno za Haxe, podržava kompilaciju u bajt kod za JIT ili C, ima jednostavnu integraciju sa C, kao i pristup numeričkim tipovima i pokazivačima niske razine.
  • Novi JVM cilj - omogućuje vam generiranje jvm bajt koda preskakanjem koraka kompilacije Java koda dodavanjem oznake "-D jvm" prilikom ciljanja u Javi.
  • Sposobnost ugrađene implementacije u trenutku pozivanja funkcija ili konstruktora, čak i ako nisu deklarirani kao takvi.
  • Mogućnost uključivanja statička proširenja kada deklarirate tip (kao što je "enum") koristeći "@:using(path.ToExtension)".
  • Apstraktni tipovi sada podržavaju "set" verziju operatora "@:op(ab)" za ponovno učitavanje izraza "obj.foo = bar".
  • Sintaksa petlje "for" sada podržava iteraciju ključ-vrijednost: "za (ključ => vrijednost u kolekciji) {}".
  • Podrška za korištenje oznaka nalik xml-u u izrazima: “var a = ‹hi/›;”. Za sada je ova značajka dostupna samo za raščlanjivanje pomoću makronaredbi i u fazi je dizajna.
  • Sintaksa za neobavezna polja u “punom” zapisu anonimnih tipova struktura 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 abstract Name(BasicType) {}" više ne zahtijeva prefiks "@:" u "enum".
  • Automatsko numeriranje za apstraktne nabrajanja:

    enum abstract 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 "provodi Dynamic" za pristup poljima klase putem nizova. Dostupno za vanjske razrede ili kroz implementaciju apstraktnog tipa.
  • Dodana je sintaksa "A & B" za križanje tipa, koja se trenutno odnosi samo na anonimne strukture i ograničenja parametara tipa. Stara sintaksa ograničenja je uklonjena.
  • Stvaranje praznih instanci "Mapa" dostupno je putem sintakse "var map:Map‹Int, String› = [];" sličan nizu.
  • Dodana struktura podataka "haxe.ds.ReadOnlyArray".
  • Metapodaci sada mogu imati prostore imena (“@:prefix.name function() {…}”). Slično s definicijama: “#ako (neka.zastavica ... #kraj”.
  • Novi servisni protokol za IDE-ove koji se koriste u dodatak za VSCode.
  • Ažurirane vanjske definicije (extern) za web API-je i dodane one koje nedostaju.

Izvor: opennet.ru

Dodajte komentar