Rilascio del linguaggio di programmazione Haxe 4.2

È disponibile il rilascio del toolkit Haxe 4.2, che include il linguaggio di programmazione multiparadigma ad alto livello omonimo, con tipizzazione statica, un cross-compilatore e una libreria standard di funzioni. Il progetto supporta la compilazione in C++, HashLink/C, JavaScript, C#, Java, PHP, Python e Lua, oltre alla compilazione in bytecode JVM, HashLink/JIT, Flash e Neko, con accesso alle funzionalità native di ogni piattaforma target. Il codice del compilatore è distribuito sotto licenza GPLv2, mentre la libreria standard e le virtual machine in sviluppo per Haxe, HashLink e Neko, sono sotto licenza MIT.

Il linguaggio è espressione-orientato con tipizzazione rigorosa. Supporta paradigmi di programmazione orientata agli oggetti, generica e funzionale. La sintassi di Haxe è simile a ECMAScript e la estende con funzionalità come tipizzazione statica, inferenza dei tipi, corrispondenza dei pattern, generici, ciclo 'for' basato su iteratori, macro AST, GADT (Generalized Algebraic Data Types), tipi astratti, strutture anonime, definizioni semplificate degli array, espressioni per compilazione condizionale, associazione di metadati a campi, classi ed espressioni, interpolazione delle stringhe ('Il mio nome è $name'), parametri di tipo ('new Main<String>("foo")') e molto altro. class Test { static function main() { final people = [ «Elizabeth» => «Programmazione», «Joel» => «Design» ]; for (name => job in people) { trace(‘$name fa $job per vivere!’); } } }

Nuove funzionalità della versione 4.2:

  • Dichiarazione di variabili e funzioni statiche a livello di modulo, senza necessità di racchiuderle in una classe.
  • Supporto per classi e funzioni astratte "classiche".
  • Implementazione nativa di funzioni variabili per tutte le piattaforme target (haxe.Rest) e aggiunta dell'operatore di espansione degli argomenti «f(…array)».
  • Implementazione del ciclo degli eventi (event loop) per thread separati («sys.thread.Thread.events»).
  • Metadati «@:inheritDoc» per l'ereditarietà della documentazione di tipi/campi.
  • Supporto per il sovraccarico dei metodi per metodi esterni su tutte le piattaforme target.
  • Inoltro all'astratto costruttore sottostante il suo tipo tramite metadati «@:forward.new».
  • A «haxe.macro.Expr» è stato aggiunto il costruttore «EIs».
  • Possibilità di rendere un tipo astratto variabile con «@:forward.variance».
  • Rappresentazione del tipo «Any» come «Dynamic» durante l'unificazione della variabilità.
  • Nel pacchetto «haxe.exceptions» sono stati aggiunti alcuni tipi di eccezioni di base.
  • Supporto per l'aggiunta di metadati durante la dichiarazione di variabili.
  • Funzione «StringTools.unsafeCharAt» utilizzata durante l'iterazione delle stringhe.
  • eval (interprete): bindings a «libuv» sono stati aggiunti nel pacchetto «eval.luv».
  • eval: bindings 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: aggiunta l'opzione «-D jvm.dynamic-level=x» per controllare il numero di ottimizzazioni generate per il codice dinamico. 0 = assente, 1 = ottimizzazione della lettura/scrittura dei campi, 2 = chiusure di metodi in fase di compilazione.
  • java, jvm: Supporto dell'opzione «—java-lib ».
  • python: implementazione dell'API threading.

Miglioramenti generali:

  • «expr is SomeType» non richiede di essere racchiuso tra parentesi.
  • Aumentata la priorità delle estensioni di tipo «@:using».
  • Consentito l'uso delle estensioni di tipo statico tramite «super».
  • Possibilità di definire metadati per i campi «@:noDoc».
  • Il tipo astratto «Map» è stato reso transitivo.
  • Supporto di «@:native» per i costruttori delle enumerazioni.
  • Supporto di «@:using» per le dichiarazioni di tipo («typedefs»).
  • Gli errori multilinea utilizzano «…» come prefisso per le righe successive.
  • Ristrutturato l'output dei tipi, le strutture anonime vengono meglio convertite in tipi espliciti e «chiuse» al termine della funzione.
  • Output del tipo delle funzioni senza argomenti come «()->…» invece di «Void->…».
  • La parola chiave «function» è consentita come nome del pacchetto.
  • Migliorata l'inclusione (inlining) degli oggetti.
  • cs: Aggiunto supporto a .NET 5.0.
  • cpp: Supporto per costruttori nativi in classi esterne.
  • php: Aggiunto «php.Syntax.customArrayDecl» per dichiarare un array nativo.
  • php: Aggiornati i metodi esterni (externs) per varie funzioni e classi.
  • php: Ottimizzata l'implementazione delle strutture anonime.
  • hl: Salto di compilazione in assenza di modifiche nei moduli.
  • lua: Utilizzo di «hx-lua-simdjson» per il parsing di json.
  • jvm: Ridotto il carico sulla CPU nell'implementazione di «sys.thread.Lock».
  • js: Migliorata la compatibilità con Google Closure Compiler.
  • Null Safety: Considerazione di «@:nullSafety(Off)» nella dichiarazione delle variabili: «var @:nullSafety(Off) v».

Aggiornato anche l'estensione per l'editor VSCode alla nuova versione del compilatore, che ora include suggerimenti per la generazione dei campi mancanti delle interfacce, classi semplici e astratte, nonché metodi delle proprietà.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster