Release der Programmiersprache Haxe 4.0

Verfügbar Release des Toolkits Haxe 4.0, das die gleichnamige multiparadigmatische Hochsprache mit strenger Typisierung, einen Cross-Compiler und eine Standardbibliothek mit Funktionen umfasst. Das Projekt unterstützt die Transpilation nach C++, HashLink/C, JavaScript, C#, Java, PHP, Python und Lua sowie die Kompilierung in JVM-Bytecode, HashLink/JIT, Flash und Neko, wobei der Zugang zu den nativen Funktionen jeder Zielplattform gegeben ist. Der Compiler-Code wird unter der GPLv3-Lizenz bereitgestellt. steht unter der GPLv2-Lizenz, während die Standardbibliothek und die für die Haxe virtuelle Maschine sich in der Entwicklung befinden. Neko unter der MIT-Lizenz.

Die Sprache ist ausdrucksorientiert mit strenger Typisierung. Sie unterstützt paradigmen des objektorientierten, generischen und funktionalen Programmierens.
Die Syntax von Haxe ähnelt ECMAScript und erweitert mit Funktionen wie statischer Typisierung, automatischer Typableitung, Pattern Matching, Generika, iteratorbasierten for-Schleifen, AST-Makros, GADT (Generalized Algebraic Data Types), abstrakten Typen, anonymen Strukturen, vereinfachten Array-Definitionen, Bedingungen für die bedingte Kompilierung, das Anhängen von Metadaten an Felder, Klassen und Ausdrücke, String-Interpolation (‘Mein Name ist $name’), Typ-Parameter (‘new Main‹String›(‘foo’)’) und und vieles mehr.

Klasse Test {
statische Funktion main() {
var people = [
„Elizabeth“ => „Programmierung“,
„Joel“ => „Design“
];

für (name in people.keys()) {
var job = people[name];
trace(‘$name arbeitet als $job!’);
}
}
}

Haupt Neuerungen Version 4.0:

  • Neue Syntax zur Angabe von Funktionstypen „(name:String, age:Int)->Bool“ oder „(String, Int)->Bool“ anstelle von „String->Int->Bool“.
  • Syntax von Pfeilfunktionen „(a, b) -> a + b“ anstelle von „function(a, b) return a + b“.
  • Schutz gegen Probleme im Zusammenhang mit Null-Werten (experimentelle Funktion, die auf Wunsch für bestimmte Felder, Klassen oder Pakete aktiviert werden kann).
  • Das Schlüsselwort „final“ für Klassen- und lokale Variablen, die unveränderlich sind. „final“ kann auch verwendet werden, um Funktionen zu definieren, um deren Überschreibung bei der Vererbung zu verhindern, sowie für Klassen/Schnittstellen, die nicht vererbt werden können.
  • Support Der Unicode-Standard für den Basistyp „String“ gilt für alle Kompilierungsziele, ausgenommen Neko.
  • Ein von Grund auf neu geschriebener eingebauter Interpreter, der jetzt unter dem Namen Evalverfügbar ist. Dank des neuen Interpreters werden Skripte und Makros deutlich schneller ausgeführt. Der interaktive Debugging-Modus wird unterstützt.
  • Ein neues Zielsystem für die Kompilierung (target) Hashlink ist eine leistungsstarke Laufzeit, die speziell für Haxe entwickelt wurde, unterstützt die Kompilierung in Bytecode für JIT oder C, bietet eine einfache Integration mit C und ermöglicht den Zugriff auf niedrigstufige numerische Typen und Zeiger.
  • Das neue Zielsystem JVM — ermöglicht die Generierung von JVM-Bytecode, indem die Java-Compilation-Phase übersprungen wird, indem das Flag „-D jvm“ beim Targeting in Java hinzugefügt wird.
  • Die Möglichkeit des Inline-Deployments an der Stelle des Funktions- oder Konstruktoraufrufs, auch wenn sie nicht als solche deklariert sind.
  • Aktivierungsmöglichkeit statischer Erweiterungen beim Deklarieren eines Typs (z.B. «enum») mit «@:using(path.ToExtension)».
  • Abstrakte Typen unterstützen jetzt die «set»-Version des Operators «@:op(a.b)» zur Überladung von Ausdrücken wie «obj.foo = bar».
  • Die Syntax der «for»-Schleife unterstützt jetzt die Iteration «Schlüssel-Wert»: «for (key => value in collection) {}».
  • Unterstützung für die Verwendung von xml-ähnlicher Markup in Ausdrücken: «var a = ‹hi/›;». Derzeit ist diese Funktion nur für die Verarbeitung durch Makros verfügbar und befindet sich in der Entwurfsphase.
  • Syntax für optionale Felder in der «vollständigen» Notation von anonymen Strukturen: «{ var ?f:Int; }» (Alternative zur «kurzen» «{ ?f:Int }»).
  • Enumerationswerte können jetzt Standardwerte für Funktionen darstellen: «function foo‹T›(option:Option‹T› = None)».
  • Die Syntax «enum abstract Name(BasicType) {}» erfordert kein «@:»-Präfix mehr in «enum».
  • Automatische Nummerierung für abstrakte Enumerationen:

    enum abstract Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enum abstract Bar(String) {
    var A; // «A»
    var B; // «B»
    }

  • Das Schlüsselwort «extern» benötigt kein «@:»-Präfix mehr.
  • Die Möglichkeit «implements Dynamic» für den Zugriff auf Klassenfelder über Strings. Verfügbar für extern-Klassen oder durch Implementierung eines abstrakten Typs.
  • Die Syntax «A & B» für die Typintersection wurde hinzugefügt und wird derzeit nur für anonyme Strukturen und Typparameterbeschränkungen verwendet. Die alte Syntax für Beschränkungen wurde entfernt.
  • Die Erstellung leerer Instanzen von «Map» ist nun möglich über die Syntax «var map:Map‹Int, String› = [];» analog zu Arrays.
  • Eine neue Datenstruktur «haxe.ds.ReadOnlyArray» wurde hinzugefügt.
  • Metadaten können jetzt Namespaces haben («@:prefix.name function() {…}»). Ähnliches gilt für Definitionen: «#if (some.flag … #end».
  • Ein neues Service-Protokoll für in IDEs verwendete Dienste wurde eingeführt im VSCode-Plugin.
  • Externe Definitionen (extern) für Web-APIs wurden aktualisiert und fehlende hinzugefügt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster