Lanzamento da linguaxe de programación Haxe 4.2

Está dispoñible unha versión do kit de ferramentas Haxe 4.2, que inclúe a linguaxe de programación de alto nivel multiparadigma do mesmo nome cunha dixitación forte, un compilador cruzado e unha biblioteca estándar de funcións. O proxecto admite tradución a C++, HashLink/C, JavaScript, C#, Java, PHP, Python e Lua, así como a compilación a JVM, HashLink/JIT, Flash e bytecode Neko, con acceso ás capacidades nativas de cada plataforma de destino. O código do compilador distribúese baixo a licenza GPLv2, e a biblioteca estándar e as máquinas virtuais HashLink e Neko desenvolvidas para Haxe teñen licenza MIT.

A linguaxe está orientada á expresión cunha dixitación forte. Admítense técnicas de programación orientada a obxectos, xenéricas e funcionais. A sintaxe de Haxe está próxima a ECMAScript e esténdea con funcións como dixitación estática, inferencia de tipo automático, coincidencia de patróns, xenéricos, bucles for baseados en iteradores, macros AST, GADT (Tipos de datos alxebraicos xeneralizados), tipos abstractos, estruturas anónimas, simplificados. definicións matrices, expresións para compilación condicional, anexar metadatos a campos, clases e expresións, interpolación de cadeas ('O meu nome é $nome'), parámetros de tipo ('new Main (“foo”)') e moitos outros. class Test { static function main() { final people = [ "Elizabeth" => "Programación", "Joel" => "Deseño" ]; for (nome => traballo en persoas) { trace('$name fai $traballo para gañarse a vida!'); } } }

Novas funcións na versión 4.2:

  • Declaración de variables estáticas e funcións a nivel de módulo, sen necesidade de envolvelas nunha clase.
  • Soporte para clases e funcións abstractas "clásicas".
  • Implementación nativa de funcións variadicas para todas as plataformas de destino (haxe.Rest) e adición do operador de expansión de argumentos “f(...array)”.
  • Implementación dun bucle de eventos para fíos individuais (“sys.thread.Thread.events”).
  • Metadatos "@:inheritDoc" para herdar a documentación de tipo/campo.
  • Soporte de sobrecarga de métodos para métodos externos en todas as plataformas de destino.
  • Reenviando o construtor subxacente ao seu tipo ao resumo usando os metadatos "@:forward.new".
  • Engadiuse o construtor "EIs" a "haxe.macro.Expr".
  • Capacidade de facer unha variante de tipo abstracto con "@:forward.variance".
  • Representación do tipo "Calquera" como "Dinámico" ao unificar a variación.
  • Engadíronse algúns tipos básicos de excepcións ao paquete "haxe.exceptions".
  • Soporte para anexar metadatos ao declarar variables.
  • Función "StringTools.unsafeCharAt" utilizada para a iteración de cadeas.
  • eval (intérprete): Engadíronse ligazóns a "libuv" no paquete "eval.luv".
  • eval: enlaces a implementacións nativas de "Int64" e "UInt64" a través do paquete "eval.integers".
  • cs: implementación de socket UDP.
  • cs: módulo "cs.Syntax" para insercións en liña de código C#.
  • jvm: engadiuse a marca "-D jvm.dynamic-level=x" para controlar o número de optimizacións xeradas para o código dinámico. 0 = ningún, 1 = optimización de lectura/escritura de campos, 2 = peche de métodos en tempo de compilación.
  • java, jvm: Soporte para a marca "--java-lib <directorio>".
  • python: implementación de API de threading.

Melloras xerais:

  • "expr is SomeType" non require axustar entre parénteses.
  • Aumentou a prioridade para as extensións de tipo "@:using".
  • Permite o uso de extensións de tipo estático a través de "super".
  • Capacidade de establecer metadatos en campos "@:noDoc".
  • O tipo abstracto "Mapa" faise transitivo.
  • Soporte para "@:native" en construtores enumerados.
  • Soporte para "@:using" nas declaracións de tipos ("typedefs").
  • Os erros de varias liñas usan "..." como prefixo para as liñas posteriores.
  • Reelaborouse a inferencia de tipos, as estruturas anónimas convértense mellor en tipos explícitos e "pechan" cando se completa a función.
  • Inferir o tipo de funcións sen argumentos como "()->..." en lugar de "Void->...".
  • A palabra clave "función" está permitida como nome do paquete.
  • Mellora a liña de obxectos.
  • cs: Engadido soporte para .NET 5.0.
  • cpp: Soporte para construtores nativos para clases externas.
  • php: Engadido "php.Syntax.customArrayDecl" para declarar unha matriz nativa.
  • php: métodos externos actualizados para varias funcións e clases.
  • php: Implementación optimizada de estruturas anónimas.
  • hl: Omita a compilación se non hai cambios nos módulos.
  • lua: Usando "hx-lua-simdjson" para analizar json.
  • jvm: reduciu a carga da CPU na implementación "sys.thread.Lock".
  • js: Compatibilidade mellorada con Google Closure Compiler.
  • Seguridade nula: considere "@:nullSafety(Off)" ao declarar as variables: "var @:nullSafety(Off) v".

Ademais, a incorporación ao editor VSCode actualizouse á nova versión do compilador, na que apareceron suxestións coa xeración de campos de interfaces que faltan, clases simples e abstractas, así como métodos de propiedade.

Fonte: opennet.ru

Engadir un comentario