Sortie du langage de programmation Haxe 4.1

Disponible version de la boîte à outils Hax 4.1, qui comprend le langage de programmation multi-paradigmes 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. Code du compilateur distribué par sous licence GPLv2, et la bibliothèque standard et les machines virtuelles développées pour Haxe Lien de hachage и neko sous licence MIT.

La langue est orienté vers l'expression avec un typage fort. Les techniques de programmation orientées objet, génériques et fonctionnelles sont prises en charge. La syntaxe Haxe est proche d'ECMAScript et se développe ses fonctionnalités telles que le typage statique, l'inférence d'autotype, 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 définitions de tableaux simplifiées, les expressions de compilation conditionnelles, l'attachement de métadonnées aux champs , classes et expressions, interpolation de chaîne (« 'Mon nom est $nom' »), paramètres de type (« nouveau Main ("foo")') et beaucoup plus.

classe Test {
fonction statique main() {
personnes finales = [
"Elizabeth" => "Programmation",
"Joël" => "Conception"
];

pour (nom => travail chez les personnes) {
trace('$name fait $job pour gagner sa vie !');
}
}
}

Nouvelles fonctionnalités de la version 4.1 :

  • Ajout de l'optimisation de la récursion de la queue.
  • Ajout d'une nouvelle API unifiée pour la gestion des exceptions.
  • La construction "try {} catch(e) {}" est autorisée comme raccourci pour "try {} catch(e: haxe.Exception) {}".
  • Ajout du support SSL à l'interpréteur eval.
  • La JVM cible n'est plus considérée comme expérimentale.
  • Pour Language Server Protocol, la prise en charge des fonctions « Goto Implementation » et « Find references » a été ajoutée.
  • Dénomination améliorée des variables locales temporaires dans le code généré. Suppression du « retour » redondant ; dans les fonctions fléchées sans valeur de retour.
  • Les combinaisons d'accès (get, par défaut) sont autorisées sur les champs (getter uniquement, comportement d'affectation par défaut).
  • Autoriser les opérateurs d'incrémentation et de décrémentation pour les champs types abstraits.
  • Amélioration de l'intégration des boucles for à l'aide d'itérateurs anonymes.
  • js : implémentation améliorée de StringMap pour ES5.
  • js : La génération de variables let a été ajoutée à l'option du compilateur « -D js-es=6 », la génération de classes ES6 a été améliorée.
  • lua : "StringIterator" optimisé, gestion des erreurs améliorée.
  • php : "Std.isOfType" optimisé pour les types de base.
  • php : Les tableaux générés implémentent désormais les interfaces natives « Iterator », « IteratorAggregate », « Countable ».
  • cs : ajout des métadonnées "@:assemblyMeta" et "@:assemblyStrict".
  • python : ajout de l'implémentation de "__contains__" aux objets anonymes
    et "__getitem__", qui permet de les utiliser comme dictionnaires dans le code généré.

  • jvm : performances considérablement améliorées grâce à une nouvelle façon d'accéder aux fonctions typées et de générer des interfaces supplémentaires dans les cas où les objets sont utilisés comme structures anonymes (la recherche dynamique de propriétés est empêchée) :
    Sortie du langage de programmation Haxe 4.1

Améliorations de la bibliothèque standard :

  • Ajout de la fonction "Array.contains".
  • Ajout de "Array.keyValueIterator", qui implémente l'itération clé-valeur pour les tableaux ("for (key => value in array)").
  • Ajout du type de contrainte "haxe.Constraints.NotVoid".
  • Les fonctions « findIndex » et «foldi» ont été ajoutées à la classe «Lambda».
  • Implémentation de "l'accès au tableau" (accès via "arr[i]") et d'une itération clé-valeur pour "haxe.ds.HashMap".
  • jvm : implémentation de versions spécifiques à la JVM de "StringMap", "sys.thread.Lock", "sys.thread.Thread".
  • java/jvm : Utilisation d'implémentations natives de "MD5", "SHA-1" et "SHA-256" pour les modules "haxe.crypto".
  • macro : Ajout de "haxe.macro.Context.containsDisplayPosition(pos)".
  • nullsafety : le mode "Strict" est désormais traité comme un seul thread ; ajout du mode "StrictThreaded".
  • "Std.is" est obsolète au profit de "Std.isOfType".
  • Ajout d'un avertissement lors de l'utilisation de variables locales sans valeurs dans les fermetures.
  • js : "untyped __js__(code, args)" est obsolète, remplacé par "js.Syntax.code(code, args)".
  • php/neko : "neko.Web" et "php.Web" sont obsolètes et seront déplacés vers la bibliothèque "hx4compat" ultérieurement.

Dans la prochaine version sont planifiés:

  • Améliorations du gestionnaire de packages haxelib.
  • Basé sur une API de système asynchrone libuv.
  • Coroutines.
  • Déclarer des fonctions et des variables statiques modulaires sans créer de classes (déjà disponible dans les builds nocturnes).

Source: opennet.ru

Ajouter un commentaire