Veröffentlichung der Programmiersprache Haxe 4.2

Es ist eine Version des Haxe 4.2-Toolkits verfügbar, die die gleichnamige Multi-Paradigma-High-Level-Programmiersprache mit starker Typisierung, einen Cross-Compiler und eine Standard-Funktionsbibliothek enthält. Das Projekt unterstützt die Übersetzung in C++, HashLink/C, JavaScript, C#, Java, PHP, Python und Lua sowie die Kompilierung in JVM, HashLink/JIT, Flash und Neko-Bytecode mit Zugriff auf die nativen Funktionen jeder Zielplattform. Der Compiler-Code wird unter der GPLv2-Lizenz vertrieben, und die Standardbibliothek sowie die für Haxe entwickelten virtuellen Maschinen HashLink und Neko werden unter der MIT-Lizenz lizenziert.

Die Sprache ist ausdrucksorientiert mit starker Typisierung. Es werden objektorientierte, generische und funktionale Programmiertechniken unterstützt. Die Syntax von Haxe ähnelt ECMAScript und erweitert sie um Funktionen wie statische Typisierung, automatische Typinferenz, Mustervergleich, Generika, iteratorbasierte for-Schleifen, AST-Makros, GADT (Generalized Algebraic Data Types), abstrakte Typen, anonyme Strukturen und Vereinfachung Definitionen von Arrays, Ausdrücke für die bedingte Kompilierung, Anhängen von Metadaten an Felder, Klassen und Ausdrücke, String-Interpolation ('Mein Name ist $name'), Typparameter ('new Main("foo")') und vieles mehr. class Test { static function main() { final people = [ "Elizabeth" => "Programming", "Joel" => "Design" ]; for (name => Job in People) { Trace(‘$name verdient seinen Lebensunterhalt mit $job!’); } } }

Neue Funktionen in Version 4.2:

  • Deklarieren statischer Variablen und Funktionen auf Modulebene, ohne dass diese in eine Klasse eingeschlossen werden müssen.
  • Unterstützung für „klassische“ abstrakte Klassen und Funktionen.
  • Native Implementierung variadischer Funktionen für alle Zielplattformen (haxe.Rest) und Hinzufügung des Argumenterweiterungsoperators „f(...array)“.
  • Implementierung einer Event-Schleife für einzelne Threads („sys.thread.Thread.events“).
  • „@:inheritDoc“-Metadaten zum Erben der Typ-/Felddokumentation.
  • Unterstützung für Methodenüberladung für externe Methoden auf allen Zielplattformen.
  • Weiterleiten des Konstruktors, der seinem Typ zugrunde liegt, mithilfe der Metadaten „@:forward.new“ an die Zusammenfassung.
  • „EIs“-Konstruktor zu „haxe.macro.Expr“ hinzugefügt.
  • Möglichkeit, eine abstrakte Typvariante mit „@:forward.variance“ zu erstellen.
  • Darstellung des Typs „Any“ als „Dynamic“ bei der Vereinheitlichung von Variationen.
  • Dem Paket „haxe.Exceptions“ wurden einige grundlegende Ausnahmetypen hinzugefügt.
  • Unterstützung für das Anhängen von Metadaten beim Deklarieren von Variablen.
  • Funktion „StringTools.unsafeCharAt“, die für die String-Iteration verwendet wird.
  • eval (Interpreter): Bindungen zu „libuv“ im Paket „eval.luv“ hinzugefügt.
  • eval: Bindungen an native Implementierungen von „Int64“ und „UInt64“ über das Paket „eval.integers“.
  • cs: UDP-Socket-Implementierung.
  • cs: „cs.Syntax“-Modul für Inline-Einfügungen von C#-Code.
  • jvm: Das Flag „-D jvm.dynamic-level=x“ wurde hinzugefügt, um die Anzahl der generierten Optimierungen für dynamischen Code zu steuern. 0 = keine, 1 = Feld-Lese-/Schreiboptimierung, 2 = Methodenschließungen zur Kompilierungszeit.
  • java, jvm: Unterstützung für das Flag „--java-lib “.
  • Python: Threading-API-Implementierung.

Allgemeine Verbesserungen:

  • „expr is SomeType“ erfordert keinen Einschluss in Klammern.
  • Erhöhte Priorität für Erweiterungen vom Typ „@:using“.
  • Ermöglicht die Verwendung statischer Typerweiterungen über „super“.
  • Möglichkeit, Metadaten auf „@:noDoc“-Felder festzulegen.
  • Der abstrakte Typ „Map“ wird transitiv gemacht.
  • Unterstützung für „@:native“ bei Enum-Konstruktoren.
  • Unterstützung für „@:using“ bei Typdeklarationen („typedefs“).
  • Mehrzeilige Fehler verwenden „…“ als Präfix für nachfolgende Zeilen.
  • Die Typinferenz wurde überarbeitet, anonyme Strukturen werden besser in explizite Typen konvertiert und „geschlossen“, wenn die Funktion abgeschlossen ist.
  • Den Typ von Funktionen ohne Argumente als „()->…“ anstelle von „Void->…“ ableiten.
  • Als Paketname ist das Schlüsselwort „function“ zulässig.
  • Verbessertes Inlining von Objekten.
  • cs: Unterstützung für .NET 5.0 hinzugefügt.
  • cpp: Unterstützung für native Konstruktoren für externe Klassen.
  • php: „php.Syntax.customArrayDecl“ hinzugefügt, um ein natives Array zu deklarieren.
  • php: Aktualisierte externe Methoden für verschiedene Funktionen und Klassen.
  • php: Optimierte Implementierung anonymer Strukturen.
  • hl: Kompilierung überspringen, wenn keine Änderungen an Modulen vorgenommen werden.
  • lua: „hx-lua-simdjson“ zum Parsen von JSON verwenden.
  • jvm: Reduzierte CPU-Last in der „sys.thread.Lock“-Implementierung.
  • js: Verbesserte Kompatibilität mit Google Closure Compiler.
  • Null-Sicherheit: Berücksichtigen Sie „@:nullSafety(Off)“ beim Deklarieren von Variablen: „var @:nullSafety(Off) v“.

Außerdem wurde der Zusatz zum VSCode-Editor auf die neue Version des Compilers aktualisiert, in der Hinweise zur Generierung fehlender Felder von Schnittstellen, einfachen und abstrakten Klassen sowie Eigenschaftsmethoden erschienen sind.

Source: opennet.ru

Kommentar hinzufügen