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

Disponível lançamento do kit de ferramentas Hax 4.0, 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. Código do compilador distribuído por sob a licença GPLv2, e uma biblioteca padrão e uma máquina virtual desenvolvida para Haxe neko sob a licença do MIT.

A linguagem é orientado para a expressão com digitação forte. Conceitos de programação orientados a objetos, genéricos e funcionais são suportados.
A sintaxe Haxe é próxima do ECMAScript e expande seus recursos como digitação estática, inferência de autotipo, 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, definições de array simplificadas, expressões de compilação condicional, anexação de metadados a campos , classes e expressões, interpolação de strings ('Meu nome é $name'), parâmetros de tipo ("new Main‹String›('foo')") e muito mais.

classe Teste {
função estática principal() {
var pessoas = [
"Elizabeth" => "Programação",
"Joel" => "Design"
];

for (nome em people.keys()) {
var trabalho = pessoas[nome];
trace('$name faz $trabalho para viver!');
}
}
}

O principal inovações versão 4.0:

  • Nova sintaxe para especificar o tipo de função "(nome:String, idade:Int)->Bool" ou "(String, Int)->Bool" em vez de "String->Int->Bool".
  • A sintaxe da função de seta é "(a, b) -> a + b" em vez de "função (a, b) retornar a + b".
  • Proteção contra problemas associados ao uso de valores Nulos (recurso experimental, habilitado opcionalmente para determinados campos, classes ou pacotes).
  • A palavra-chave "final" é para campos de classe e variáveis ​​locais que são imutáveis. "final" também pode ser usado para definir funções para evitar que sejam substituídas por herança e para classes/interfaces que não podem ser herdadas.
  • apoio Padrão Unicode para o tipo base "String" em todos os destinos de compilação, exceto Neko.
  • Intérprete integrado reescrito do zero, que agora vem com o nome Avaliação. Graças ao novo interpretador, scripts e macros são executados com muito mais rapidez. O modo de depuração interativo é suportado.
  • Novo sistema de destino para compilação (destino) Hashlink - um tempo de execução de alto desempenho projetado especificamente para Haxe, suportando compilação em bytecode para JIT ou C, tem fácil integração com C, bem como acesso a tipos e ponteiros numéricos de baixo nível.
  • Novo destino JVM - permite gerar bytecode jvm ignorando a etapa de compilação do código Java adicionando o sinalizador "-D jvm" ao direcionar em Java.
  • A capacidade de implantação em linha no momento de chamar funções ou construtores, mesmo que não sejam declarados como tal.
  • Possibilidade de inclusão extensões estáticas ao declarar um tipo (como "enum") usando "@:using(path.ToExtension)".
  • Os tipos abstratos agora suportam uma versão "set" do operador "@:op(a.b)" para recarregar expressões "obj.foo = bar".
  • A sintaxe do loop "for" agora suporta iteração de valor-chave: "for (chave => valor na coleção) {}".
  • Suporte para uso de marcação semelhante a xml em expressões: “var a = ‹hi/›;”. Por enquanto, esse recurso está disponível apenas para análise com macros e está em fase de design.
  • A sintaxe para campos opcionais na notação “completa” de tipos de estrutura anônima é: “{ var ?f:Int; }" (uma alternativa ao abreviado "{ ?f:Int }").
  • Os valores enum agora podem ser valores padrão para argumentos de função: "function foo‹T›(option:Option‹T› = None)".
  • A sintaxe "enum abstract Name(BasicType) {}" não requer mais o prefixo "@:" em "enum".
  • Numeração automática para enumerações abstratas:

    enum abstrato Foo(Int) {
    var A; //0
    var B; //1
    }
    enum abstrato Barra(String) {
    var A; // "A"
    var B; //"B"
    }

  • A palavra-chave “extern” não requer mais o uso do prefixo “@:”.
  • Removida a opção "implementa Dinâmico" para acessar campos de classe por meio de strings. Disponível para classes externas ou através de implementação por um tipo abstrato.
  • Adicionada sintaxe "A e B" para interseção de tipo, que atualmente se aplica apenas a estruturas anônimas e restrições de parâmetro de tipo. A antiga sintaxe de restrição foi removida.
  • A criação de instâncias "Map" vazias está disponível através da sintaxe "var map:Map‹Int, String› = [];" semelhante a uma matriz.
  • Adicionada estrutura de dados "haxe.ds.ReadOnlyArray".
  • Os metadados agora podem ter namespaces (“@:prefix.name function() {…}”). Da mesma forma com as definições: “#if (some.flag ... #end”.
  • Novo protocolo de serviço para IDEs usado em plugin para VSCode.
  • Definições externas atualizadas (externas) para APIs da Web e adicionadas as ausentes.

Fonte: opennet.ru

Adicionar um comentário