Veröffentlichung der Programmiersprache Haxe 4.0

Verfügbar Toolkit-Veröffentlichung Haxe 4.0, das die gleichnamige Multi-Paradigma-High-Level-Programmiersprache mit starker Typisierung, einen Cross-Compiler und eine Standard-Funktionsbibliothek umfasst. 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. Compiler-Code vertrieben von unter der GPLv2-Lizenz sowie eine für Haxe entwickelte Standardbibliothek und eine virtuelle Maschine neko unter der MIT-Lizenz.

Sprache ist ausdrucksorientiert mit starkem Tippen. Es werden objektorientierte, generische und funktionale Programmierkonzepte unterstützt.
Die Haxe-Syntax ähnelt ECMAScript und expandiert Seine Funktionen umfassen statische Typisierung, automatische Typinferenz, Mustervergleich, Generika, iteratorbasierte For-Schleifen, AST-Makros, GADT (Generalized Algebraic Data Types), abstrakte Typen, anonyme Strukturen, vereinfachte Array-Definitionen, bedingte Kompilierungsausdrücke und das Anhängen von Metadaten an Felder , Klassen und Ausdrücke, String-Interpolation („Mein Name ist $name“), Typparameter („new Main‹String›(‘foo‘)“) und vieles andere.

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

for (Name in people.keys()) {
var job = people[name];
Trace('$name verdient seinen Lebensunterhalt!');
}
}
}

Haupt- Innovationen Version 4.0:

  • Neue Syntax zur Angabe des Funktionstyps „(name:String, age:Int)->Bool“ oder „(String, Int)->Bool“ anstelle von „String->Int->Bool“.
  • Die Syntax der Pfeilfunktion lautet „(a, b) -> a + b“ anstelle von „Funktion(a, b) gibt a + b zurück“.
  • Schutz vor Problemen im Zusammenhang mit der Verwendung von Nullwerten (experimentelle Funktion, optional für bestimmte Felder, Klassen oder Pakete aktiviert).
  • Das Schlüsselwort „final“ gilt für Klassenfelder und lokale Variablen, die unveränderlich sind. „final“ kann auch verwendet werden, um Funktionen zu definieren, um zu verhindern, dass sie durch Vererbung überschrieben werden, und für Klassen/Schnittstellen, die nicht vererbt werden können.
  • Unterstützen Unicode-Standard für den Basistyp „String“ auf allen Kompilierungszielen außer Neko.
  • Von Grund auf neu geschriebener integrierter Interpreter, der jetzt unter dem Namen bekannt ist Eval. Dank des neuen Interpreters laufen Skripte und Makros deutlich schneller. Der interaktive Debugging-Modus wird unterstützt.
  • Neues Zielsystem für die Kompilierung (target) Hashlink – eine Hochleistungslaufzeit, die speziell für Haxe entwickelt wurde, die Kompilierung in Bytecode für JIT oder C unterstützt, eine einfache Integration mit C sowie Zugriff auf numerische Typen und Zeiger auf niedriger Ebene bietet.
  • Neues JVM-Ziel – ermöglicht Ihnen die Generierung von JVM-Bytecode, indem Sie den Java-Code-Kompilierungsschritt überspringen, indem Sie beim Targeting in Java das Flag „-D jvm“ hinzufügen.
  • Die Möglichkeit zur Inline-Bereitstellung beim Aufruf von Funktionen oder Konstruktoren, auch wenn diese nicht als solche deklariert sind.
  • Möglichkeit der Inklusion statische Erweiterungen beim Deklarieren eines Typs (z. B. „enum“) mit „@:using(path.ToExtension)“.
  • Abstrakte Typen unterstützen jetzt eine „set“-Version des „@:op(ab)“-Operators, um „obj.foo = bar“-Ausdrücke neu zu laden.
  • Die „for“-Schleifensyntax unterstützt jetzt die Schlüsselwert-Iteration: „for (key => value in Collection) {}“.
  • Unterstützung für die Verwendung von XML-ähnlichem Markup in Ausdrücken: „var a = ‹hi/›;“. Derzeit ist diese Funktion nur für das Parsen mit Makros verfügbar und befindet sich in der Entwurfsphase.
  • Die Syntax für optionale Felder in der „vollständigen“ Notation anonymer Strukturtypen lautet: „{ var ?f:Int; }“ (eine Alternative zum kurzen „{ ?f:Int }“).
  • Enum-Werte können jetzt Standardwerte für Funktionsargumente sein: „function foo‹T›(option:Option‹T› = None)“.
  • Die Syntax „enum abstract Name(BasicType) {}“ erfordert nicht mehr das Präfix „@:“ in „enum“.
  • Automatische Nummerierung für abstrakte Aufzählungen:

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

  • Das Schlüsselwort „extern“ erfordert nicht mehr die Verwendung des Präfixes „@:“.
  • Die Option „implementiert Dynamic“, um über Strings auf Klassenfelder zuzugreifen. Verfügbar für externe Klassen oder durch Implementierung durch einen abstrakten Typ.
  • „A & B“-Syntax für Typüberschneidung hinzugefügt, die derzeit nur für anonyme Strukturen und Typparametereinschränkungen gilt. Die alte Einschränkungssyntax wurde entfernt.
  • Das Erstellen leerer „Map“-Instanzen ist über die Syntax „var map:Map‹Int, String› = [];“ möglich. ähnlich einem Array.
  • Datenstruktur „haxe.ds.ReadOnlyArray“ hinzugefügt.
  • Metadaten können jetzt Namespaces haben („@:prefix.name function() {…}“). Ebenso mit Definitionen: „#if (some.flag ... #end“.
  • Neues Dienstprotokoll für IDEs, die in verwendet werden Plugin für VSCode.
  • Externe Definitionen (extern) für Web-APIs aktualisiert und fehlende hinzugefügt.

Source: opennet.ru

Kommentar hinzufügen