Lanzamiento del lenguaje de programación Haxe 4.2

Está disponible una versión del kit de herramientas Haxe 4.2, que incluye el lenguaje de programación multiparadigma de alto nivel del mismo nombre con escritura segura, un compilador cruzado y una biblioteca de funciones estándar. El proyecto admite traducción a C++, HashLink/C, JavaScript, C#, Java, PHP, Python y Lua, así como compilación a JVM, HashLink/JIT, Flash y Neko bytecode, con acceso a las capacidades nativas de cada plataforma de destino. El código del compilador se distribuye bajo la licencia GPLv2, y la biblioteca estándar y las máquinas virtuales HashLink y Neko desarrolladas para Haxe tienen la licencia MIT.

El lenguaje está orientado a la expresión con escritura fuerte. Se admiten técnicas de programación orientada a objetos, genéricas y funcionales. La sintaxis de Haxe está cerca de ECMAScript y la amplía con características como escritura estática, inferencia de tipo automático, coincidencia de patrones, genéricos, bucles for basados ​​en iteradores, macros AST, GADT (tipos de datos algebraicos generalizados), tipos abstractos, estructuras anónimas, simplificadas. definiciones de matrices, expresiones para compilación condicional, adjuntar metadatos a campos, clases y expresiones, interpolación de cadenas ('Mi nombre es $name'), parámetros de tipo ('new Main("foo")') y mucho más. clase Prueba { función estática principal() { personas finales = [ "Elizabeth" => "Programación", "Joel" => "Diseño" ]; for (nombre => trabajo en personas) { trace('¡$nombre se gana la vida con $trabajo!'); } } }

Nuevas características en la versión 4.2:

  • Declarar variables y funciones estáticas a nivel de módulo, sin necesidad de envolverlas en una clase.
  • Soporte para clases y funciones abstractas "clásicas".
  • Implementación nativa de funciones variadas para todas las plataformas de destino (haxe.Rest) y adición del operador de expansión de argumentos “f(...array)”.
  • Implementación de un bucle de eventos para subprocesos individuales (“sys.thread.Thread.events”).
  • Metadatos "@:inheritDoc" para heredar documentación de tipo/campo.
  • Soporte de sobrecarga de métodos para métodos externos en todas las plataformas de destino.
  • Reenviar el constructor subyacente a su tipo al resumen utilizando los metadatos "@:forward.new".
  • Se agregó el constructor "EI" a "haxe.macro.Expr".
  • Posibilidad de crear una variante de tipo abstracto con "@:forward.variance".
  • Representación del tipo “Cualquiera” como “Dinámico” al unificar variación.
  • Se agregaron algunos tipos de excepciones básicos al paquete "haxe.exceptions".
  • Soporte para adjuntar metadatos al declarar variables.
  • Función "StringTools.unsafeCharAt" utilizada para la iteración de cadenas.
  • eval (intérprete): Se agregaron enlaces a "libuv" en el paquete "eval.luv".
  • eval: enlaces a implementaciones nativas de "Int64" y "UInt64" a través del paquete "eval.integers".
  • cs: implementación del socket UDP.
  • cs: módulo “cs.Syntax” para inserciones en línea de código C#.
  • jvm: se agregó el indicador “-D jvm.dynamic-level=x” para controlar la cantidad de optimizaciones generadas para el código dinámico. 0 = ninguno, 1 = optimización de lectura/escritura de campos, 2 = cierres de métodos en tiempo de compilación.
  • java, jvm: soporte para el indicador "--java-lib ".
  • Python: implementación de API de subprocesos.

Mejoras generales:

  • "expr es SomeType" no requiere estar entre paréntesis.
  • Mayor prioridad para extensiones de tipo "@:usando".
  • Permite el uso de extensiones de tipo estático vía "super".
  • Posibilidad de configurar metadatos en los campos "@:noDoc".
  • El tipo abstracto "Mapa" se vuelve transitivo.
  • Soporte para "@:native" en constructores de enumeraciones.
  • Soporte para "@:using" en declaraciones de tipo ("typedefs").
  • Los errores de varias líneas utilizan "..." como prefijo para las líneas siguientes.
  • La inferencia de tipos ha sido reelaborada, las estructuras anónimas se convierten mejor en tipos explícitos y se "cierran" cuando se completa la función.
  • Infiriendo el tipo de funciones sin argumentos como "()->..." en lugar de "Void->...".
  • La palabra clave "función" está permitida como nombre de paquete.
  • Integración mejorada de objetos.
  • cs: Se agregó soporte para .NET 5.0.
  • cpp: Soporte para constructores nativos para clases externas.
  • php: se agregó "php.Syntax.customArrayDecl" para declarar una matriz nativa.
  • php: métodos externos actualizados para varias funciones y clases.
  • php: Implementación optimizada de estructuras anónimas.
  • hl: omita la compilación si no hay cambios en los módulos.
  • lua: uso de "hx-lua-simdjson" para analizar json.
  • jvm: carga de CPU reducida en la implementación "sys.thread.Lock".
  • js: compatibilidad mejorada con Google Close Compiler.
  • Seguridad nula: considere "@:nullSafety(Off)" al declarar variables: "var @:nullSafety(Off) v".

Además, se actualizó la adición al editor VSCode a la nueva versión del compilador, en la que aparecieron sugerencias con la generación de campos faltantes de interfaces, clases simples y abstractas, así como métodos de propiedad.

Fuente: opennet.ru

Añadir un comentario