Hi ha disponible una versió del conjunt d'eines Haxe 4.2, que inclou el llenguatge de programació d'alt nivell multiparadigma del mateix nom amb una escriptura forta, un compilador creuat i una biblioteca estàndard de funcions. El projecte admet la traducció a C++, HashLink/C, JavaScript, C#, Java, PHP, Python i Lua, així com la compilació a JVM, HashLink/JIT, Flash i bytecode Neko, amb accés a les capacitats natives de cada plataforma objectiu. El codi del compilador es distribueix sota la llicència GPLv2, i la biblioteca estàndard i les màquines virtuals HashLink i Neko desenvolupades per a Haxe tenen llicència MIT.
El llenguatge està orientat a l'expressió amb una mecanografia forta. S'admeten tècniques de programació orientada a objectes, genèriques i funcionals. La sintaxi de Haxe és propera a ECMAScript i l'estén amb característiques com ara la tipografia estàtica, la inferència de tipus automàtic, la concordança de patrons, els genèrics, els bucles basats en iteradors, macros AST, GADT (Tipus de dades algebraiques generalitzades), tipus abstractes, estructures anònimes, simplificades. definicions matrius, expressions per a la compilació condicional, adjuntar metadades a camps, classes i expressions, interpolació de cadenes ('El meu nom és $nom'), paràmetres de tipus ('nou Main ("foo")') i molts altres. class Test { static function main() { final people = [ "Elizabeth" => "Programació", "Joel" => "Disseny" ]; for (nom => feina en persones) { trace('$name fa $treball per guanyar-se la vida!'); } } }
Noves funcions a la versió 4.2:
- Declaració de variables estàtiques i funcions a nivell de mòdul, sense necessitat d'embolicar-les en una classe.
- Suport per a classes i funcions abstractes "clàssiques".
- Implementació nativa de funcions variàdiques per a totes les plataformes de destinació (haxe.Rest) i addició de l'operador d'expansió d'arguments “f(...array)”.
- Implementació d'un bucle d'esdeveniments per a fils individuals ("sys.thread.Thread.events").
- Metadades "@:inheritDoc" per heretar documentació de tipus/camp.
- Suport de sobrecàrrega de mètodes per a mètodes externs a totes les plataformes de destinació.
- Reenviant el constructor subjacent al seu tipus a l'abstract mitjançant les metadades "@:forward.new".
- S'ha afegit el constructor "EIs" a "haxe.macro.Expr".
- Capacitat de fer una variant de tipus abstracte amb "@:forward.variance".
- Representació del tipus “Qualsevol” com a “Dinàmic” en unificar la variació.
- S'han afegit alguns tipus d'excepcions bàsics al paquet "haxe.exceptions".
- Suport per adjuntar metadades en declarar variables.
- La funció "StringTools.unsafeCharAt" s'utilitza per a la iteració de cadenes.
- eval (intèrpret): S'han afegit enllaços a "libuv" al paquet "eval.luv".
- eval: enllaços a implementacions natives de "Int64" i "UInt64" mitjançant el paquet "eval.integers".
- cs: implementació de socket UDP.
- cs: mòdul “cs.Syntax” per a insercions en línia de codi C#.
- jvm: S'ha afegit la marca "-D jvm.dynamic-level=x" per controlar el nombre d'optimitzacions generades per al codi dinàmic. 0 = cap, 1 = optimització de lectura/escriptura del camp, 2 = tancament de mètodes en temps de compilació.
- java, jvm: Suport per a la marca "--java-lib <directori>".
- python: implementació de l'API de threading.
Millores generals:
- "expr is SomeType" no requereix embolcall entre parèntesis.
- S'ha augmentat la prioritat per a les extensions de tipus "@:using".
- Permet l'ús d'extensions de tipus estàtic mitjançant "super".
- Possibilitat d'establir metadades als camps "@:noDoc".
- El tipus abstracte "Mapa" es fa transitiu.
- Suport per a "@:native" als constructors d'enumeració.
- Suport per a "@:using" a les declaracions de tipus ("typedefs").
- Els errors de diverses línies utilitzen "..." com a prefix per a les línies posteriors.
- La inferència de tipus s'ha reelaborat, les estructures anònimes es converteixen millor en tipus explícits i es "tanquen" quan es completa la funció.
- Inferint el tipus de funcions sense arguments com "()->..." en lloc de "Void->...".
- La paraula clau "function" es permet com a nom de paquet.
- Millora de la línia d'objectes.
- cs: S'ha afegit suport per a .NET 5.0.
- cpp: Suport per a constructors natius per a classes externes.
- php: S'ha afegit "php.Syntax.customArrayDecl" per declarar una matriu nativa.
- php: Mètodes externs actualitzats per a diverses funcions i classes.
- php: Implementació optimitzada d'estructures anònimes.
- hl: Omet la compilació si no hi ha canvis als mòduls.
- lua: utilitzant "hx-lua-simdjson" per analitzar json.
- jvm: càrrega de CPU reduïda a la implementació "sys.thread.Lock".
- js: compatibilitat millorada amb Google Closure Compiler.
- Seguretat nul·la: tingueu en compte "@:nullSafety(Off)" quan declareu variables: "var @:nullSafety(Off) v".
A més, s'ha actualitzat l'addició a l'editor VSCode a la nova versió del compilador, en la qual han aparegut pistes amb la generació de camps d'interfícies que falten, classes simples i abstractes, així com mètodes de propietat.
Font: opennet.ru
