rilascio del toolkit , che include un linguaggio di programmazione multi-paradigma di alto livello con tipizzazione rigorosa, un cross-compiler e una libreria standard di funzioni. Il progetto supporta la traduzione 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 ciascuna piattaforma di destinazione. Il codice del compilatore è sotto licenza GPLv2, mentre la libreria standard e le macchine virtuali sviluppate per Haxe e sotto licenza MIT.
Il linguaggio è con tipizzazione rigorosa. Sono supportate tecniche di programmazione ad oggetti, generica e funzionale. La sintassi di Haxe è simile a ECMAScript e presenta funzionalità come la tipizzazione statica, l'inferenza dei tipi, le corrispondenze dei modelli, i generici, il ciclo 'for' basato su iteratori, macro AST, GADT (Generalized Algebraic Data Types), tipi astratti, strutture anonime, definizioni semplificate degli array, espressioni per la compilazione condizionale, collegamento di metadati a campi, classi ed espressioni, interpolazione delle stringhe ('My name is $name'), parametri di tipo ('new Main("foo")') e .
class Test {
static function main() {
final people = [
«Elizabeth» => «Programmazione»,
«Joel» => «Design»
];
for (name => job in people) {
trace(‘$name lavora come $job!’);
}
}
}
Novità della versione 4.1:
- Ottimizzazione della ricorsione terminale aggiunta.
- Nuovo API unificato per la gestione delle eccezioni aggiunto.
- La costrutto «try {} catch(e) {}» è stata consentita come abbreviazione per «try {} catch(e: haxe.Exception) {}».
- Supporto SSL aggiunto nell'interprete eval.
- La piattaforma target JVM non è più considerata sperimentale.
- Supporto per le funzioni «Goto Implementation» e «Find references» aggiunto al Language Server Protocol.
- Migliorato il naming delle variabili locali temporanee nel codice generato. Rimossi i «return;» ridondanti nelle funzioni freccia senza valore di ritorno.
- Combinazione di accesso (get, default) consentita per i campi (solo getter, comportamento di assegnazione predefinito).
- Operatori di incremento e decremento consentiti per i campi .
- Migliorato l'inlining dei cicli for utilizzando iteratori anonimi.
- js: Migliorata l'implementazione di StringMap per ES5.
- js: Generazione di variabili let aggiunta all'opzione del compilatore «-D js-es=6», migliorata la generazione delle classi ES6.
- lua: ottimizzato «StringIterator», migliorata la gestione degli errori.
- php: Ottimizzato «Std.isOfType» per i tipi base.
- php: Gli array generati ora implementano le interfacce native «Iterator», «IteratorAggregate», «Countable».
- cs: Aggiunte le metadata «@:assemblyMeta» e «@:assemblyStrict».
- python: Aggiunta l'implementazione di «__contains__» negli oggetti anonimi.
e «__getitem__», che consente di utilizzarli come dizionari nel codice generato. - jvm: Notevolmente migliorata la prestazione grazie a un nuovo modo di accedere alle funzioni tipizzate e generare interfacce aggiuntive nei casi in cui si utilizzano oggetti come strutture anonime (previene la ricerca dinamica delle proprietà):
Miglioramenti nella libreria standard:
- Aggiunta la funzione «Array.contains».
- Aggiunto «Array.keyValueIterator», che implementa l'iterazione key-value per gli array («for (key => value in array)»).
- Aggiunto un vincolo di tipo «haxe.Constraints.NotVoid».
- Nel classe «Lambda» sono state aggiunte le funzioni «findIndex» e «foldi».
- Implementato l'accesso all'array (accesso tramite «arr[i]») e l'iterazione key-value per «haxe.ds.HashMap».
- jvm: Implementate versioni specifiche per JVM di «StringMap», «sys.thread.Lock», «sys.thread.Thread».
- java/jvm: Utilizzate implementazioni native di «MD5», «SHA-1» e «SHA-256» per i moduli «haxe.crypto».
- macro: Aggiunto «haxe.macro.Context.containsDisplayPosition(pos)».
- nullsafety: la modalità «Strict» ora è considerata monothread; aggiunta la modalità «StrictThreaded».
- «Std.is» è deprecato a favore di «Std.isOfType».
- Aggiunta una segnalazione per l'uso di variabili locali senza valori nelle chiusure.
- js: «untyped __js__(code, args)» è deprecato, viene fornito «js.Syntax.code(code, args)» al suo posto.
- php/neko: «neko.Web» e «php.Web» sono deprecati e verranno successivamente trasferiti nella libreria «hx4compat».
Nella prossima versione :
- Miglioramento del gestore pacchetti .
- API di sistema asincrono basato su .
- Coroutines.
- Dichiarazione di funzioni e variabili statiche modulari senza creare classi (già disponibili nelle versioni notturne).
Fonte: opennet.ru
