Liberazione di a lingua di prugrammazione Haxe 4.0

Dispunibule liberazione di u toolkit Haxe 4.0, chì include u linguaghju di prugrammazione multi-paradigma d'altu livellu di u listessu nome cù un forte typing, un compilatore cross è una biblioteca standard di funzioni. U prughjettu sustene a traduzzione in C++, HashLink/C, JavaScript, C#, Java, PHP, Python è Lua, è ancu a compilazione à JVM, HashLink/JIT, Flash è Neko bytecode, cù accessu à e capacità native di ogni piattaforma di destinazione. codice compilatore distribuitu da sottu a licenza GPLv2, è una biblioteca standard è una macchina virtuale sviluppata per Haxe neko sottu a licenza MIT.

A lingua hè orientatu à l'espressione cù una scrittura forte. I cuncetti di prugrammazione orientati à l'ughjettu, generici è funziunali sò supportati.
A sintassi Haxe hè vicinu à ECMAScript è si espande e so caratteristiche cum'è a tipografia statica, l'inferenza di l'autotipu, l'abbinamentu di mudelli, i generici, basati in iteratori per i loops, macros AST, GADT (Tipi di dati algebrici generalizati), tipi astratti, strutture anonime, definizioni di array simplificate, espressioni di compilazione cundiziunali, attache metadata à i campi , classi è espressioni, interpolazione di stringa ("U mo nome hè $name"), paràmetri di tipu ("new Main‹String›('foo')"), è assai di più.

prova di classe {
funzione statica main() {
var people = [
"Elizabeth" => "Programmazione",
"Joel" => "Design"
];

per (nome in people.keys ()) {
var job = persone [nome];
trace('$name face $travagliu per campà!');
}
}
}

menu innovazioni versione 4.0:

  • Nova sintassi per specificà u tipu di funzione "(name:String, age:Int)->Bool" o "(String, Int)->Bool" invece di "String->Int->Bool".
  • A sintassi di a funzione di freccia hè "(a, b) -> a + b" invece di "funzione (a, b) return a + b".
  • Prutezzione contr'à i prublemi assuciati cù l'usu di i valori Null (funzione sperimentale, attivata opzionalmente per certi campi, classi o pacchetti).
  • A chjave "finale" hè per i campi di classi è variabili lucali chì sò immutable. "finale" pò ancu esse usatu per definisce e funzioni per impediscenu di esse rimpiazzate da l'eredità è per classi / interfacce chì ùn ponu micca ereditatu.
  • sustegnu Unicode standard per u tipu di basa "String" in tutti i miri di compilazione eccettu Neko.
  • Interprete integratu riscritto da zero, chì avà vene sottu u nome Evaluate. Grazie à u novu interprete, scripts è macros funzionanu assai più veloce. U modu di debugging interattivu hè supportatu.
  • Novu sistema di destinazione per a compilazione (target) Hashlink - un runtime d'altu rendiment cuncepitu specificamente per Haxe, chì sustene a compilazione di bytecode per JIT o C, hà una integrazione faciule cù C, è ancu accessu à tippi numerichi è puntatori di livellu bassu.
  • New JVM target - permette di generà jvm bytecode saltendu u passu di compilazione di codice Java aghjustendu a bandiera "-D jvm" quandu targeting in Java.
  • A capacità di implementà in linea à u puntu di chjamà funzioni o custruttori, ancu s'ellu ùn sò micca dichjarati cum'è tali.
  • Possibilità di inclusione estensioni statiche quandu dichjarà un tipu (cum'è "enum") usendu "@:using (path.ToExtension)".
  • I tipi astratti supportanu avà una versione "set" di l'operatore "@:op(ab)" per ricaricà l'espressioni "obj.foo = bar".
  • A sintassi di loop "for" supporta avà l'iterazione chjave-valore: "for (key => value in collection) {}".
  • Supportu per l'usu di marcatura xml-like in espressioni: "var a = ‹hi/›;". Per avà, sta funzione hè solu dispunibule per l'analisi cù macros è hè in u stadiu di cuncepimentu.
  • A sintassi per i campi opzionali in a notazione "piena" di tipi di struttura anonima hè: "{ var ?f:Int; }" (una alternativa à u cortu "{ ?f:Int }").
  • I valori di enumerazione ponu avà esse valori predeterminati per l'argumenti di a funzione: "funzione foo‹T› (opzione: Opzione‹T› = Nessuna)".
  • A sintassi "enum abstract Name(BasicType) {}" ùn hà più bisognu di u prefissu "@:" in "enum".
  • Numerazione automatica per enumerazioni astratte:

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

  • A chjave "esterna" ùn hè più bisognu di l'usu di u prefissu "@:".
  • Eliminatu l'opzione "impieghi Dynamic" per accede à i campi di classi via stringhe. Disponibile per classi esterni o per implementazione da un tipu astrattu.
  • Aggiunta sintassi "A & B" per l'intersezzione di u tipu, chì attualmente si applica solu à strutture anonime è restrizioni di paràmetri di tipu. L'antica sintassi di limitazione hè stata eliminata.
  • A creazione di casi vacanti "Map" hè dispunibule via a sintassi "var map:Map‹Int, String› = [];" simile à un array.
  • A struttura di dati aghjunta "haxe.ds.ReadOnlyArray".
  • I metadati ponu avà spazii di nomi ("@:funzione prefix.name () {…}"). Similmente cù e definizione: "#if (alcuni.bandiera ... #fine".
  • Novu protocolu di serviziu per l'IDE utilizatu in plugin per VSCode.
  • Definizioni esterni aghjurnati (esterni) per l'API Web è aghjustatu quelli mancanti.

Source: opennet.ru

Add a comment