Release der Programmiersprache Haxe 4.2

Die Version des Haxe 4.2 Toolkits ist jetzt verfügbar. Es umfasst die gleichnamige multiparadigmatische Hochsprache mit strenger Typisierung, einen Cross-Compiler und eine Standardbibliothek. 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, mit Zugriff auf die nativen Funktionen jeder Zielplattform. Der Quellcode des Compilers wird unter der GPLv2-Lizenz veröffentlicht, während die Standardbibliothek und die für Haxe entwickelten virtuellen Maschinen HashLink und Neko unter der MIT-Lizenz verfügbar sind.

Haxe ist eine ausdrucksorientierte Sprache mit strenger Typisierung. Sie unterstützt objektorientierte, generische und funktionale Programmieransätze. Die Syntax von Haxe ist ähnlich wie bei ECMAScript, erweitert um Funktionen wie statische Typisierung, Typinferenz, Pattern Matching, Generics, iterierende „for“-Schleifen, AST-Makros, GADT (Generalized Algebraic Data Types), abstrakte Typen, anonyme Strukturen, vereinfachte Array-Definitionen, Ausdrücke für bedingte Kompilierung, das Anbringen von Metadaten an Feldern, Klassen und Ausdrücken, die Interpolation von Strings (‘Mein Name ist $name’), Typ-Parameter (‘new Main<String>(“foo”)’) und vieles mehr. class Test { static function main() { final people = [ «Elizabeth» => «Programmierung», «Joel» => «Design» ]; for (name => job in people) { trace(‘$name arbeitet als $job!’); } } }

Neue Funktionen in Version 4.2:

  • Deklaration von statischen Variablen und Funktionen auf Modulebene, ohne die Notwendigkeit, sie in eine Klasse einzufassen.
  • Unterstützung für 'klassische' abstrakte Klassen und Funktionen.
  • Native Implementierung variadischer Funktionen für alle Zielplattformen (haxe.Rest) und Hinzufügen des Entpackungsoperators für Argumente ‘f(…array)’.
  • Implementierung einer Ereignisschleife (event loop) für einzelne Threads („sys.thread.Thread.events“).
  • Metadaten „@:inheritDoc“ zum Erben der Dokumentation von Typen/Feldern.
  • Unterstützung für die Überladung von Methoden für externe Methoden auf allen Zielplattformen.
  • Weiterleitung im abstrakten Konstruktor, der dem Typ durch Metadaten „@:forward.new“ zugrunde liegt.
  • Im „haxe.macro.Expr“ wurde der Konstruktor „EIs“ hinzugefügt.
  • Möglichkeit, einen abstrakten Typ mit „@:forward.variance“ variabel zu gestalten.
  • Darstellung des Typs „Any“ als „Dynamic“ bei der Vereinheitlichung der Varianz.
  • Der Paket „haxe.exceptions“ beinhaltet einige grundlegende Ausnahmetypen.
  • Unterstützung für das Anbringen von Metadaten bei der Variablendeklaration.
  • Funktion „StringTools.unsafeCharAt“, die bei der String-Iteration verwendet wird.
  • eval (Interpreter): Im Paket „eval.luv“ wurden Bindungen an „libuv“ hinzugefügt.
  • eval: Bindungen an native Implementierungen von „Int64“ und „UInt64“ über das Paket „eval.integers“.
  • cs: Implementierung eines UDP-Sockets.
  • cs: Modul „cs.Syntax“ für Inline-Einfügungen von C#-Code.
  • jvm: Flag „-D jvm.dynamic-level=x“ hinzugefügt zur Kontrolle der Anzahl generierter Optimierungen im dynamischen Code. 0 = keine, 1 = Optimierung des Lese-/Schreibzugriffs auf Felder, 2 = Schließungen von Methoden zur Kompilierungszeit.
  • java, jvm: Unterstützung des Flags „—java-lib “.
  • python: Implementierung der threading-API.

Allgemeine Verbesserungen:

  • „expr ist SomeType“ erfordert keine Klammerung.
  • Die Priorität der Typerweiterungen „@:using“ wurde erhöht.
  • Die Verwendung statischer Typerweiterungen über „super“ ist erlaubt.
  • Die Möglichkeit, Metadaten für die Felder „@:noDoc“ festzulegen.
  • Der abstrakte Typ „Map“ wurde transitiv gemacht.
  • Unterstützung von „@:native“ bei Konstruktoren von Aufzählungen.
  • Unterstützung von „@:using“ bei Typdeklarationen („typedefs“).
  • Mehrzeilige Fehler verwenden „…“ als Präfix für folgende Zeilen.
  • Die Typausgabe wurde überarbeitet; anonyme Strukturen werden besser in explizite Typen umgewandelt und „geschlossen“ nach Abschluss der Funktion.
  • Ausgabe des Funktionstyps ohne Argumente als „()->…“ statt „Void->…“.
  • Das Schlüsselwort „function“ ist als Paketname erlaubt.
  • Die Inline-Implementierung von Objekten wurde verbessert.
  • cs: Unterstützung für .NET 5.0 hinzugefügt.
  • cpp: Unterstützung für native Konstruktoren in externen Klassen.
  • php: „php.Syntax.customArrayDecl“ hinzugefügt, um native Arrays zu deklarieren.
  • php: Externe Methoden (externs) für verschiedene Funktionen und Klassen aktualisiert.
  • php: Implementierung anonymer Strukturen optimiert.
  • hl: Kompilierungsübergang bei fehlenden Änderungen in Modulen.
  • lua: Verwendung von „hx-lua-simdjson“ zum Parsen von JSON.
  • jvm: Reduzierte CPU-Auslastung in der Implementierung von „sys.thread.Lock“.
  • js: Verbesserte Kompatibilität mit dem Google Closure Compiler.
  • Null Safety: Berücksichtigung von „@:nullSafety(Off)“ bei der Deklaration von Variablen: „var @:nullSafety(Off) v“.

Außerdem wurde das Editor-Plugin für VSCode auf eine neue Compiler-Version aktualisiert, die Hinweise zur Generierung fehlender Felder in Schnittstellen, einfachen und abstrakten Klassen sowie von Eigenschaftsmethoden bietet.

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