Sortie du langage de programmation Haxe 4.2

Une version de la boîte à outils Haxe 4.2 est disponible, qui comprend le langage de programmation multi-paradigme de haut niveau du même nom avec un typage fort, un compilateur croisé et une bibliothèque standard de fonctions. Le projet prend en charge la traduction vers C++, HashLink/C, JavaScript, C#, Java, PHP, Python et Lua, ainsi que la compilation vers JVM, HashLink/JIT, Flash et Neko bytecode, avec accès aux capacités natives de chaque plateforme cible. Le code du compilateur est distribué sous licence GPLv2, et la bibliothèque standard et les machines virtuelles HashLink et Neko développées pour Haxe sont sous licence MIT.

Le langage est orienté expression avec un typage fort. Les techniques de programmation orientées objet, génériques et fonctionnelles sont prises en charge. La syntaxe de Haxe est proche d'ECMAScript et l'étend avec des fonctionnalités telles que le typage statique, l'inférence de type automatique, la correspondance de modèles, les génériques, les boucles for basées sur un itérateur, les macros AST, GADT (types de données algébriques généralisés), les types abstraits, les structures anonymes, les structures simplifiées. tableaux de définitions, expressions pour la compilation conditionnelle, attachement de métadonnées aux champs, classes et expressions, interpolation de chaîne (« Mon nom est $name »), paramètres de type (« new Main("foo")') et bien plus encore. class Test { static function main() { final people = [ "Elizabeth" => "Programmation", "Joel" => "Design" ]; for (name => job in people) { trace('$name fait $job pour gagner sa vie !'); } } }

Nouvelles fonctionnalités de la version 4.2 :

  • Déclarer des variables et des fonctions statiques au niveau du module, sans avoir besoin de les envelopper dans une classe.
  • Prise en charge des classes et fonctions abstraites « classiques ».
  • Implémentation native de fonctions variadiques pour toutes les plateformes cibles (haxe.Rest) et ajout de l'opérateur d'expansion d'argument « f(...array) ».
  • Implémentation d'une boucle d'événements pour les threads individuels (« sys.thread.Thread.events »).
  • Métadonnées « @:inheritDoc » pour hériter de la documentation de type/champ.
  • Prise en charge de la surcharge de méthodes pour les méthodes externes sur toutes les plateformes cibles.
  • Transférer le constructeur sous-jacent à son type vers le résumé à l'aide des métadonnées « @:forward.new ».
  • Ajout du constructeur "EIs" à "haxe.macro.Expr".
  • Possibilité de créer une variante de type abstrait avec "@:forward.variance".
  • Représentation du type « Any » comme « Dynamique » lors de l'unification de la variation.
  • Ajout de quelques types d'exceptions de base au package "haxe.exceptions".
  • Prise en charge de l'attachement de métadonnées lors de la déclaration de variables.
  • Fonction "StringTools.unsafeCharAt" utilisée pour l'itération de chaîne.
  • eval (interprète) : ajout de liaisons à "libuv" dans le package "eval.luv".
  • eval : liaisons aux implémentations natives de "Int64" et "UInt64" via le package "eval.integers".
  • cs : implémentation du socket UDP.
  • cs : module « cs.Syntax » pour les insertions en ligne de code C#.
  • jvm : ajout de l'indicateur « -D jvm.dynamic-level=x » pour contrôler le nombre d'optimisations générées pour le code dynamique. 0 = aucun, 1 = optimisation de lecture/écriture de champ, 2 = fermetures de méthodes au moment de la compilation.
  • java, jvm : prise en charge de l'indicateur "--java-lib ".
  • python : implémentation de l'API de threading.

Améliorations générales :

  • "expr is SomeType" ne nécessite pas de mise entre parenthèses.
  • Priorité accrue pour les extensions de type "@:using".
  • Permet l'utilisation d'extensions de type statique via "super".
  • Possibilité de définir des métadonnées sur les champs « @:noDoc ».
  • Le type abstrait "Map" est rendu transitif.
  • Prise en charge de "@:native" sur les constructeurs d'énumérations.
  • Prise en charge de "@:using" sur les déclarations de type ("typedefs").
  • Les erreurs multilignes utilisent "..." comme préfixe pour les lignes suivantes.
  • L'inférence de type a été retravaillée, les structures anonymes sont mieux converties en types explicites et « fermées » une fois la fonction terminée.
  • Déduire le type de fonctions sans arguments comme "()->..." au lieu de "Void->...".
  • Le mot-clé "function" est autorisé comme nom de package.
  • Inlining amélioré des objets.
  • cs : ajout de la prise en charge de .NET 5.0.
  • cpp : Prise en charge des constructeurs natifs pour les classes externes.
  • php : Ajout de "php.Syntax.customArrayDecl" pour déclarer un tableau natif.
  • php : méthodes externes mises à jour pour diverses fonctions et classes.
  • php : Implémentation optimisée de structures anonymes.
  • hl : ignorer la compilation s'il n'y a aucune modification dans les modules.
  • lua : Utilisation de "hx-lua-simdjson" pour analyser json.
  • jvm : charge CPU réduite dans l'implémentation "sys.thread.Lock".
  • js : compatibilité améliorée avec Google Closure Compiler.
  • Null Safety : Considérez "@:nullSafety(Off)" lors de la déclaration de variables : "var @:nullSafety(Off) v".

De plus, l'ajout à l'éditeur VSCode a été mis à jour vers la nouvelle version du compilateur, dans laquelle des astuces sont apparues avec la génération de champs manquants d'interfaces, de classes simples et abstraites, ainsi que de méthodes de propriété.

Source: opennet.ru

Ajouter un commentaire