URL: https://linuxfr.org/news/sortie-de-haxe-3-2-0 Title: Sortie de Haxe 3.2.0 Authors: David Mouton palm123, Benoît Sibaud et tuiu pol Date: 2015年06月16日T09:49:09+02:00 License: CC By-SA Tags: web, javascript, crosscompilation, jeu_vidéo, franglais, haxe et langage Score: 28 Haxe est un langage de programmation orienté objet, open source, basé sur un système de classes comme C# ou Java. Il permet de mettre en place des types abstraits, des metadatas, des Generics, des Enums, ou encore faire de la programmation fonctionnelle comme en F#. C’est une solution robuste, multi-paradigme, parfaitement adaptée au développement d’applications web, au jeu et au mobile. ![Logo Haxe](http://haxe.org/img/haxe-logo.png) Il y a quelques jours, la version 3.2.0 est sortie avec son lot de nouveautés et de corrections. Cette dépêche présente les principaux changements et profite de l'occasion pour refaire un tour des possibilités offertes par ce langage. ---- [Le site officiel de Haxe](http://haxe.org/) [Les sources sur Github](https://github.com/HaxeFoundation/haxe) [Pour essayer Haxe en ligne](http://try.haxe.org) [Le Changelog](http://haxe.org/download/version/3.2.0/) ---- Haxe =========== Un peu d'histoire ----------- Le développement de Haxe a été commencé fin 2005 par [Nicolas Cannasse](http://ncannasse.fr/) alors qu'il travaillait pour [Motion Twin](http://motion-twin.com/fr/), un éditeur de jeu indépendant. Haxe a toujours été [open source](https://github.com/HaxeFoundation/haxe/blob/development/extra/LICENSE.txt) mais en 2013, la gouvernance du projet est offerte à la [fondation Haxe](http://haxe.org/foundation/). Cette année, il va donc fêter ses 10 ans. Le langage ----------- Haxe est un langage de programmation moderne, capable de tenir la comparaison avec du C# ou du Java, en matière de fonctionnalités. Sa syntaxe est également très proche de ces derniers mais rappelle également le JavaScript. ```ActionScript class HelloWorld { static public function main() { trace("Hello World"); } } ``` Voici une petite liste des possibilités offertes par le langage : - Classes, Types(Strict ou dynamique), Interfaces et Héritages - les Abstract Types : utiles pour exemple pour étendre un type primitif et surcharger ses opérateurs. On peut imaginer ainsi créer les types Kilomètre, Mètre, et Millimètre, et faire des opérations comme 12500mm / 10km ```ActionScript abstract Kilometer(Float) { public function new(v:Float) this = v; } abstract Mile(Float) { public function new(v:Float) this = v; @:to public inline function toKilometer():Kilometer return (new Kilometer(this / 0.62137)); } class Test { static var km:Kilometer; static function main(){ var one100Miles = new Mile(100); km = one100Miles; trace(km); // 160.935 } } ``` - Structures anonymes ```ActionScript var point = { x: 0, y: 10 }; point.x += 10; ``` - Enums, Accesseurs, programmation fonctionnelle, et inférence de type - Pattern Matching, Inlining, Array Comprehension, Compilation conditionnelle - Generics, Type Parameters, Constraints et Variance : ```ActionScript class Main { static function main() { new Main("foo"); new Main(12); // use type inference } function new(a:A) { } } ``` - [Les macros](http://haxe.org/manual/macro.html) : sans doute l'une des plus puissantes fonctionnalités de Haxe. Elles permettent de "programmer" le comportement du compilateur. ![macros](http://haxe.org/manual/macro-compilation-role.png) Le compilateur ----------- Haxe n'est pas un langage propre à une technologie comme Java avec la JVM. Son compilateur (ou transpileur) va convertir le Haxe dans un autre langage. Aujourd'hui il supporte le JavaScript, le PHP, le C++, le C#, le Java, l'AS3, Neko, et le Python. Il ne s'agit absolument pas d'une solution pour faire du cross-plateforme, mais bien de remplacer un langage par un autre. Il n'est pas (directement) possible de compiler un même code pour du Java et du PHP par exemple. Un framework open source basé sur Haxe existe pour faire du cross-plateforme, c'est [OpenFL](http://www.openfl.org/). Le compilateur est très rapide, un sentiment qui se renforce si on a l'habitude de compiler du Java ou du Dart. Sur le code généré, il se montre particulièrement efficace. Il profite de la compilation pour nettoyer et optimiser le code. C'est particulièrement notable par rapport à du [JavaScript](http://www.infognition.com/blog/2014/comparing_flash_haxe_dart_asmjs_and_cpp.html). ![decoding time](http://www.infognition.com/blog/2014/decoding_time.png) Pour quoi faire ? ----------- Utiliser Haxe à la place d'un autre langage peut apporter beaucoup de choses. TypeScript, Dart, ou encore CoffeeScript font la même chose pour JavaScript, et Scala et Groovy pour Java. Haxe permet également de profiter d'un même langage coté client et coté serveur, de partager les mêmes objets et de s'affranchir d'un contrat d'interface. Par contre il ne dispense pas de connaitre la technologie pour laquelle on compile. Il est important de connaitre le PHP, pour faire du Haxe pour PHP. Enfin Haxe permet de profiter d'un même langage sur des typologies de projets différentes comme par exemple JS/PHP, ou Android/NodeJS , etc... Qui fait du Haxe ? Le jeu vidéo est le premier domaine où brille ce langage. Que ce soit pour du jeu web, mobile, ou desktop. Sa présence au [Ludum Dare](http://haxe.io/ld/32/) est notable. L'utilisation d'OpenFL pour faire des jeux cross plateforme favorise son adoption. OpenFL va prochainement exporter pour XBox PS4 et WiiU. ![OpenFL 3](http://www.openfl.org/blog/assets/openfl3architecture.png) Sans surprise, le développement d'application web est également un domaine propice à l'utilisation de Haxe. Les nouveautés de la 3.2.0 ----------- Après la sortie de la version majeure 3.0.0, cette nouvelle version est surtout focalisée sur la correction de bugs et la robustesse. ### Python La grosse nouveauté c'est le support de Python 3. En Haxe : ```ActionScript package; class Main { static function main() { for (projectile in ['apples', 'oranges']) trace( 'I threw $projectile!' ); } } ``` En Python : ```Python class Main: @staticmethod def main(): _g = 0 _g1 = ["apples", "oranges"] while (_g < len(_g1)): projectile = (_g1[_g] if _g>= 0 and _g < len(_g1) else None) _g = (_g + 1) print(str((("I threw " + ("null" if projectile is None else projectile)) + "!"))) class python_internal_ArrayImpl: @staticmethod def _get(x,idx): if ((idx> -1) and ((idx < len(x)))): return x[idx] else: return None class HxOverrides: @staticmethod def stringOrNull(s): if (s is None): return "null" else: return s Main.main() ``` ### Rest, EitherType, @:selfCall and @:callable La gestion des "_external type definitions_" est améliorée avec l'ajout de deux types haxe.extern.Rest et haxe.extern.EitherType, et aussi deux nouveaux "_metadata_", @:selfCall and @:callable. ### Typed Arrays Haxe 3.2.0 ajoute le support cross-plateforme des _Typed Arrays_ dont l’implémentation a été fortement inspirée par celle de [Javascript](http://www.html5rocks.com/en/tutorials/webgl/typed_arrays/). ### Compiler.addGlobalMetadata Pour ceux qui utilisent les macros, Compiler.addGlobalMetadata permet d'attacher un _metadata_ à n'importe quel type ou méthode qui n'a pas été traité par le compilateur. ### NodeJS support L'_extern type definitions_ de NodeJS est maintenant [directement supporté](https://github.com/HaxeFoundation/hxnodejs) par la Foundation Haxe. Pour une liste complète il y a le [changelog](http://haxe.org/download/version/3.2.0/).

AltStyle によって変換されたページ (->オリジナル) /