Lançamento da linguagem de programação Haxe 4.2

Está disponível uma versão do kit de ferramentas Haxe 4.2, que inclui a linguagem de programação multiparadigma de alto nível de mesmo nome com tipagem forte, um compilador cruzado e uma biblioteca padrão de funções. O projeto suporta tradução para C++, HashLink/C, JavaScript, C#, Java, PHP, Python e Lua, bem como compilação para JVM, HashLink/JIT, Flash e bytecode Neko, com acesso às capacidades nativas de cada plataforma alvo. O código do compilador é distribuído sob a licença GPLv2, e a biblioteca padrão e as máquinas virtuais HashLink e Neko desenvolvidas para Haxe são licenciadas sob a licença MIT.

A linguagem é orientada para expressões com digitação forte. Técnicas de programação orientada a objetos, genéricas e funcionais são suportadas. A sintaxe do Haxe é próxima do ECMAScript e a estende com recursos como digitação estática, inferência de tipo automático, correspondência de padrões, genéricos, loops for baseados em iteradores, macros AST, GADT (tipos de dados algébricos generalizados), tipos abstratos, estruturas anônimas, simplificados matrizes de definições, expressões para compilação condicional, anexação de metadados a campos, classes e expressões, interpolação de strings ('Meu nome é $nome'), parâmetros de tipo ('novo Main (“foo”)') e muitos outros. class Test { função estática main() { final people = [ "Elizabeth" => "Programação", "Joel" => "Design"]; for (nome => trabalho em pessoas) { trace('$name faz $trabalho para viver!'); } } }

Novos recursos na versão 4.2:

  • Declarar variáveis ​​e funções estáticas no nível do módulo, sem a necessidade de envolvê-las em uma classe.
  • Suporte para classes e funções abstratas “clássicas”.
  • Implementação nativa de funções variadas para todas as plataformas alvo (haxe.Rest) e adição do operador de expansão de argumentos “f(...array)”.
  • Implementação de um loop de eventos para threads individuais (“sys.thread.Thread.events”).
  • Metadados "@:inheritDoc" para herdar documentação de tipo/campo.
  • Suporte à sobrecarga de métodos para métodos externos em todas as plataformas de destino.
  • Encaminhando o construtor subjacente ao seu tipo para o abstrato usando os metadados “@:forward.new”.
  • Adicionado construtor "EIs" a "haxe.macro.Expr".
  • Capacidade de criar uma variante de tipo abstrato com "@:forward.variance".
  • Representação do tipo “Any” como “Dynamic” ao unificar a variação.
  • Adicionados alguns tipos básicos de exceção ao pacote "haxe.exceptions".
  • Suporte para anexar metadados ao declarar variáveis.
  • Função "StringTools.unsafeCharAt" usada para iteração de strings.
  • eval (intérprete): Adicionadas ligações a "libuv" no pacote "eval.luv".
  • eval: ligações para implementações nativas de "Int64" e "UInt64" através do pacote "eval.integers".
  • cs: implementação de soquete UDP.
  • cs: módulo “cs.Syntax” para inserções inline de código C#.
  • jvm: Adicionado o sinalizador “-D jvm.dynamic-level=x” para controlar o número de otimizações geradas para código dinâmico. 0 = nenhum, 1 = otimização de leitura/gravação de campo, 2 = fechamento de método em tempo de compilação.
  • java, jvm: Suporte para o sinalizador "--java-lib <diretório>".
  • python: implementação de API de threading.

Melhorias gerais:

  • "expr is SomeType" não requer colocação entre parênteses.
  • Maior prioridade para extensões do tipo "@:using".
  • Permite o uso de extensões do tipo estático via “super”.
  • Capacidade de definir metadados para campos “@:noDoc”.
  • O tipo abstrato "Mapa" torna-se transitivo.
  • Suporte para "@:native" em construtores enum.
  • Suporte para "@:using" em declarações de tipo ("typedefs").
  • Erros multilinha usam "..." como prefixo para linhas subsequentes.
  • A inferência de tipo foi reformulada, estruturas anônimas são melhor convertidas em tipos explícitos e “fechadas” quando a função é concluída.
  • Inferindo o tipo de funções sem argumentos como "()->..." em vez de "Void->...".
  • A palavra-chave "function" é permitida como nome de pacote.
  • Inlining aprimorado de objetos.
  • cs: Adicionado suporte para .NET 5.0.
  • cpp: Suporte para construtores nativos para classes externas.
  • php: Adicionado "php.Syntax.customArrayDecl" para declarar um array nativo.
  • php: Métodos externos atualizados para diversas funções e classes.
  • php: Implementação otimizada de estruturas anônimas.
  • hl: Ignora a compilação se não houver alterações nos módulos.
  • lua: Usando "hx-lua-simdjson" para analisar json.
  • jvm: Carga de CPU reduzida na implementação "sys.thread.Lock".
  • js: Compatibilidade aprimorada com o Google Closure Compiler.
  • Segurança Nula: Considere "@:nullSafety(Off)" ao declarar variáveis: "var @:nullSafety(Off) v".

Além disso, a adição do editor VSCode foi atualizada para a nova versão do compilador, na qual surgiram dicas com a geração de campos ausentes de interfaces, classes simples e abstratas, bem como métodos de propriedades.

Fonte: opennet.ru

Adicionar um comentário