Rilascio del linguaggio di programmazione Haxe 4.2

È disponibile una versione del toolkit Haxe 4.2, che include l'omonimo linguaggio di programmazione di alto livello multiparadigma con digitazione forte, un compilatore incrociato e una libreria di funzioni standard. Il progetto supporta la traduzione in C++, HashLink/C, JavaScript, C#, Java, PHP, Python e Lua, nonché la compilazione in JVM, HashLink/JIT, Flash e Neko bytecode, con accesso alle funzionalità native di ciascuna piattaforma di destinazione. Il codice del compilatore è distribuito con licenza GPLv2, mentre la libreria standard e le macchine virtuali HashLink e Neko sviluppate per Haxe sono concesse con licenza MIT.

Il linguaggio è orientato all'espressione con una digitazione forte. Sono supportate tecniche di programmazione orientate agli oggetti, generiche e funzionali. La sintassi di Haxe è vicina a ECMAScript e lo estende con funzionalità come tipizzazione statica, inferenza di tipo automatico, corrispondenza di modelli, generici, cicli for basati su iteratori, macro AST, GADT (tipi di dati algebrici generalizzati), tipi astratti, strutture anonime, semplificati array di definizioni, espressioni per la compilazione condizionale, allegare metadati a campi, classi ed espressioni, interpolazione di stringhe ('My name is $name'), parametri di tipo ('new Main (“foo”)') e molti altri. class Test { funzione statica main() { final people = [ "Elizabeth" => "Programmazione", "Joel" => "Design" ]; for (nome => lavoro in persone) { trace('$nome fa $lavoro per vivere!'); } } }

Nuove funzionalità nella versione 4.2:

  • Dichiarare variabili e funzioni statiche a livello di modulo, senza la necessità di racchiuderle in una classe.
  • Supporto per classi e funzioni astratte “classiche”.
  • Implementazione nativa di funzioni variadiche per tutte le piattaforme target (haxe.Rest) e aggiunta dell'operatore di espansione dell'argomento “f(...array)”.
  • Implementazione di un ciclo di eventi per singoli thread (“sys.thread.Thread.events”).
  • Metadati "@:inheritDoc" per ereditare la documentazione di tipo/campo.
  • Supporto per l'overload dei metodi per metodi esterni su tutte le piattaforme di destinazione.
  • Inoltro del costruttore sottostante al suo tipo all'abstract utilizzando i metadati "@:forward.new".
  • Aggiunto il costruttore "EIs" a "haxe.macro.Expr".
  • Possibilità di creare una variante di tipo astratto con "@:forward.variance".
  • Rappresentazione del tipo “Qualsiasi” come “Dinamico” quando si unifica la variazione.
  • Aggiunti alcuni tipi di eccezioni di base al pacchetto "haxe.exceptions".
  • Supporto per allegare metadati durante la dichiarazione delle variabili.
  • Funzione "StringTools.unsafeCharAt" utilizzata per l'iterazione delle stringhe.
  • eval (interprete): Aggiunti collegamenti a "libuv" nel pacchetto "eval.luv".
  • eval: collegamenti alle implementazioni native di "Int64" e "UInt64" tramite il pacchetto "eval.integers".
  • cs: implementazione del socket UDP.
  • cs: modulo “cs.Syntax” per inserimenti inline di codice C#.
  • jvm: aggiunto il flag "-D jvm.dynamic-level=x" per controllare il numero di ottimizzazioni generate per il codice dinamico. 0 = nessuno, 1 = ottimizzazione lettura/scrittura del campo, 2 = chiusure del metodo in fase di compilazione.
  • java, jvm: supporto per il flag "--java-lib <directory>".
  • python: implementazione dell'API di threading.

Miglioramenti generali:

  • "expr is SomeType" non richiede il racchiuso tra parentesi.
  • Priorità aumentata per le estensioni di tipo "@:using".
  • Consente l'utilizzo di estensioni di tipo statico tramite "super".
  • Possibilità di impostare metadati nei campi "@:noDoc".
  • Il tipo astratto "Mappa" è reso transitivo.
  • Supporto per "@:native" sui costruttori enum.
  • Supporto per "@:using" nelle dichiarazioni di tipo ("typedefs").
  • Gli errori su più righe utilizzano "..." come prefisso per le righe successive.
  • L'inferenza del tipo è stata rielaborata, le strutture anonime vengono convertite meglio in tipi espliciti e "chiuse" quando la funzione viene completata.
  • Deducendo il tipo di funzioni senza argomenti come "()->..." invece di "Void->...".
  • La parola chiave "funzione" è consentita come nome del pacchetto.
  • Incorporamento degli oggetti migliorato.
  • cs: aggiunto il supporto per .NET 5.0.
  • cpp: supporto per costruttori nativi per classi esterne.
  • php: aggiunto "php.Syntax.customArrayDecl" per dichiarare un array nativo.
  • php: metodi esterni aggiornati per varie funzioni e classi.
  • php: implementazione ottimizzata di strutture anonime.
  • hl: salta la compilazione se non ci sono modifiche ai moduli.
  • lua: utilizzo di "hx-lua-simdjson" per analizzare json.
  • jvm: carico della CPU ridotto nell'implementazione "sys.thread.Lock".
  • js: compatibilità migliorata con Google Closure Compiler.
  • Sicurezza Null: considerare "@:nullSafety(Off)" quando si dichiarano le variabili: "var @:nullSafety(Off) v".

Inoltre, alla nuova versione del compilatore è stata aggiornata l'aggiunta all'editor VSCode, in cui sono apparsi suggerimenti con la generazione di campi mancanti di interfacce, classi semplici e astratte, nonché metodi di proprietà.

Fonte: opennet.ru

Aggiungi un commento