Rilascio del linguaggio di programmazione Haxe 4.0

A disposizione rilascio del toolkit Hax 4.0, che include l'omonimo linguaggio di programmazione di alto livello multiparadigma con tipizzazione 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. Codice del compilatore distribuito da sotto la licenza GPLv2, una libreria standard e una macchina virtuale sviluppata per Haxe neko con licenza MIT.

La lingua è orientato all'espressione con digitazione forte. Sono supportati concetti di programmazione orientata agli oggetti, generica e funzionale.
La sintassi Haxe è vicina a ECMAScript e espande le sue funzionalità come tipizzazione statica, inferenza di autotipizzazione, corrispondenza di modelli, generici, cicli for basati su iteratori, macro AST, GADT (tipi di dati algebrici generalizzati), tipi astratti, strutture anonime, definizioni di array semplificate, espressioni di compilazione condizionale, allegando metadati ai campi , classi ed espressioni, interpolazione di stringhe ('Il mio nome è $nome'), parametri di tipo ("new Main‹String›('foo')") e molto di piu.

prova di classe {
funzione statica main() {
var persone = [
"Elizabeth" => "Programmazione",
"Gioele" => "Progettazione"
];

for (nome in people.keys()) {
var lavoro = persone[nome];
trace('$nome fa $lavoro per vivere!');
}
}
}

Il principale innovazioni versione 4.0:

  • Nuova sintassi per specificare il tipo di funzione "(name:String, age:Int)->Bool" o "(String, Int)->Bool" invece di "String->Int->Bool".
  • La sintassi della funzione freccia è "(a, b) -> a + b" anziché "funzione (a, b) restituisce a + b".
  • Protezione contro i problemi associati all'utilizzo di valori Null (funzionalità sperimentale, abilitata facoltativamente per determinati campi, classi o pacchetti).
  • La parola chiave "final" è per i campi di classe e le variabili locali che sono immutabili. "final" può essere utilizzato anche per definire funzioni per evitare che vengano sovrascritte dall'ereditarietà e per classi/interfacce che non possono essere ereditate.
  • Sostegno Standard Unicode per il tipo base "String" su tutte le destinazioni di compilazione tranne Neko.
  • Interprete integrato riscritto da zero, che ora ha il nome val. Grazie al nuovo interprete, gli script e le macro vengono eseguiti molto più velocemente. È supportata la modalità di debug interattivo.
  • Nuovo sistema target per la compilazione (target) Hashlink - un runtime ad alte prestazioni progettato specificamente per Haxe, che supporta la compilazione in bytecode per JIT o C, ha una facile integrazione con C, nonché l'accesso a tipi numerici e puntatori di basso livello.
  • Nuovo target JVM: consente di generare bytecode jvm saltando il passaggio di compilazione del codice Java aggiungendo il flag "-D jvm" durante il targeting in Java.
  • La possibilità di eseguire la distribuzione in linea nel momento in cui si chiamano funzioni o costruttori, anche se non sono dichiarati come tali.
  • Possibilità di inclusione estensioni statiche quando si dichiara un tipo (come "enum") utilizzando "@:using(path.ToExtension)".
  • I tipi astratti ora supportano una versione "set" dell'operatore "@:op(a.b)" per ricaricare le espressioni "obj.foo = bar".
  • La sintassi del ciclo "for" ora supporta l'iterazione del valore-chiave: "for (chiave => valore nella raccolta) {}".
  • Supporto per l'utilizzo di markup simile a xml nelle espressioni: “var a = ‹hi/›;”. Per ora, questa funzionalità è disponibile solo per l'analisi con macro ed è in fase di progettazione.
  • La sintassi per i campi facoltativi nella notazione “completa” dei tipi di struttura anonima è: “{ var ?f:Int; }" (un'alternativa al breve "{ ?f:Int }").
  • I valori enum ora possono essere valori predefiniti per gli argomenti della funzione: "funzione foo‹T›(opzione:Opzione‹T› = None)".
  • La sintassi "enum abstract Name(BasicType) {}" non richiede più il prefisso "@:" in "enum".
  • Numerazione automatica per enumerazioni astratte:

    enum abstract Foo(Int) {
    varietà A; // 0
    var B; // 1
    }
    enum abstract Bar(Stringa) {
    varietà A; // "UN"
    var B; // "B"
    }

  • La parola chiave "extern" non richiede più l'uso del prefisso "@:".
  • Rimossa l'opzione "attrezzi Dynamic" per accedere ai campi della classe tramite stringhe. Disponibile per classi esterne o tramite l'implementazione tramite un tipo astratto.
  • Aggiunta la sintassi "A e B" per l'intersezione dei tipi, che attualmente si applica solo alle strutture anonime e ai vincoli dei parametri di tipo. La vecchia sintassi dei vincoli è stata rimossa.
  • La creazione di istanze "Map" vuote è disponibile tramite la sintassi "var map:Map‹Int, String› = [];" simile ad un array.
  • Aggiunta struttura dati "haxe.ds.ReadOnlyArray".
  • I metadati ora possono avere spazi dei nomi (“@:prefix.name function() {…}”). Allo stesso modo con le definizioni: “#if (some.flag ... #end”.
  • Nuovo protocollo di servizio per gli IDE utilizzati in plugin per VSCode.
  • Aggiornate le definizioni esterne (extern) per le API Web e aggiunte quelle mancanti.

Fonte: opennet.ru

Aggiungi un commento