Veröffentlichung des Tools , einschließlich einer hochgradig typisierten, multiparadigmatischen Programmiersprache mit dem gleichen Namen, eines Cross-Compilers und einer Standardbibliothek. Das Projekt unterstützt die Übersetzung nach C++, HashLink/C, JavaScript, C#, Java, PHP, Python und Lua sowie die Kompilierung in JVM-Bytecode, HashLink/JIT, Flash und Neko, mit Zugang zu den nativen Funktionen jeder Zielplattform. Der Compiler-Code ist unter der GPLv2-Lizenz veröffentlicht, während die Standardbibliothek und die für Haxe entwickelten virtuellen Maschinen und unter der MIT-Lizenz.
Die Sprache ist mit strenger Typisierung. Es werden objektorientierte, generische und funktionale Programmieransätze unterstützt. Die Syntax von Haxe ähnelt ECMAScript und besitzt Funktionen wie statische Typisierung, Typinferenz, Musterzuordnung, Generika, iterative `for`-Schleifen, AST-Makros, GADT (Generalized Algebraic Data Types), abstrakte Typen, anonyme Strukturen, vereinfachte Array-Definitionen, Bedingungen zur Kompilierungszeit, Anbringen von Metadaten an Feldern, Klassen und Ausdrücken, String-Interpolation (‚Mein Name ist $name‘), Typparameter (‚new Main<String>(„foo“)‘) und .
Klasse Test {
statische Funktion main() {
final people = [
„Elizabeth“ => „Programmierung“,
„Joel“ => „Design“
];
for (name => job in people) {
trace(‘$name arbeitet als $job!’);
}
}
}
Neuigkeiten der Version 4.1:
- Optimierung der tail-recursion hinzugefügt.
- Ein neues einheitliches API zur Ausnahmebehandlung hinzugefügt.
- Die Struktur „try {} catch(e) {}“ wurde als Abkürzung für „try {} catch(e: haxe.Exception) {}“ erlaubt.
- Die Unterstützung für SSL wurde im eval-Interpreter hinzugefügt.
- Die Zielplattform JVM wird nicht mehr als experimentell betrachtet.
- Für das Language Server Protocol wurde die Unterstützung für die Funktionen „Goto Implementation“ und „Find references“ hinzugefügt.
- Die Benennung von temporären lokalen Variablen im generierten Code wurde verbessert. Überflüssige „return;“-Anweisungen in Pfeilfunktionen ohne Rückgabewert wurden entfernt.
- Eine Zugriffscombination (get, default) für Felder wurde erlaubt (nur Getter, Standardverhalten für Zuweisungen).
- Inkrement- und Dekrementoperatoren für Felder sind erlaubt. .
- Das Inlining von For-Schleifen mit anonymen Iteratoren wurde verbessert.
- js: Verbesserung der StringMap-Implementierung für ES5.
- js: Im Compiler-Option „-D js-es=6“ wurde die Generierung von let-Variablen hinzugefügt, die Generierung von ES6-Klassen verbessert.
- lua: Der „StringIterator“ wurde optimiert, die Fehlerbehandlung verbessert.
- php: „Std.isOfType“ für grundlegende Typen optimiert.
- php: Generierte Arrays implementieren nun die nativen Schnittstellen «Iterator», «IteratorAggregate», «Countable».
- cs: Metadaten «@:assemblyMeta» und «@:assemblyStrict» wurden hinzugefügt.
- python: Die Implementierung «__contains__» wurde zu anonymen Objekten hinzugefügt.
und «__getitem__», was es ermöglicht, sie im generierten Code wie Wörterbücher zu verwenden. - jvm: Die Leistung wurde erheblich verbessert durch eine neue Methode zur Anrede von typisierten Funktionen und die Generierung zusätzlicher Schnittstellen, wenn Objekte als anonyme Strukturen verwendet werden (dynamische Eigenschaftensuche wurde verhindert):
Verbesserungen in der Standardbibliothek:
- Die Funktion «Array.contains» wurde hinzugefügt.
- «Array.keyValueIterator» wurde implementiert, um eine key-value Iteration für Arrays zu ermöglichen («for (key => value in array)»).
- Ein Typbeschränkung «haxe.Constraints.NotVoid» wurde hinzugefügt.
- Im «Lambda»-Klasse wurden die Funktionen «findIndex» und «foldi» hinzugefügt.
- Der «array access» (Zugriff über «arr[i]») und key-value Iteration für «haxe.ds.HashMap» wurde implementiert.
- jvm: JVM-spezifische Versionen von «StringMap», «sys.thread.Lock», «sys.thread.Thread» wurden implementiert.
- java/jvm: Native Implementierungen von «MD5», «SHA-1» und «SHA-256» für die Module «haxe.crypto» wurden verwendet.
- macro: «haxe.macro.Context.containsDisplayPosition(pos)» wurde hinzugefügt.
- nullsafety: Der Modus «Strict» wird jetzt als einsträngig betrachtet; der Modus «StrictThreaded» wurde hinzugefügt.
- «Std.is» ist als veraltet markiert zugunsten von «Std.isOfType».
- Es wird eine Warnung ausgegeben, wenn lokale Variablen ohne Werte in Closures verwendet werden.
- js: «untyped __js__(code, args)» ist als veraltet markiert und wird durch «js.Syntax.code(code, args)» ersetzt.
- php/neko: «neko.Web» und «php.Web» sind als veraltet markiert und werden später in die Bibliothek «hx4compat» verschoben.
Im nächsten Release :
- Verbesserung des Paketmanagers .
- Asynchrones System-API basierend auf .
- Koroutinen.
- Deklaration von modulare statische Funktionen und Variablen ohne Erstellen von Klassen (bereits in Nachbauversionen verfügbar).
Quelle: opennet.ru
