Lanzamento da linguaxe de programación Haxe 4.0

Dispoñible lanzamento do kit de ferramentas Haxe 4.0, 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 a 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. Código compilador distribuído por baixo a licenza GPLv2 e unha biblioteca estándar e unha máquina virtual desenvolvidas para Haxe neko baixo a licenza MIT.

A lingua é orientado á expresión cunha dixitación forte. Admítense conceptos de programación orientada a obxectos, xenéricos e funcionais.
A sintaxe de Haxe está próxima a ECMAScript e expande as súas características como a escritura estática, inferencia de autotipo, coincidencia de patróns, xenéricos, bucles for baseados en iteradores, macros AST, GADT (tipos de datos alxebraicos xeneralizados), tipos abstractos, estruturas anónimas, definicións de matrices simplificadas, expresións de compilación condicional, anexando metadatos aos campos , clases e expresións, interpolación de cadeas ("O meu nome é $nome"), parámetros de tipo ("new Main‹String›('foo')") e moito máis.

proba de clase {
función estática main() {
var persoas = [
"Elizabeth" => "Programación",
"Joel" => "Deseño"
];

para (nome en people.keys()) {
var traballo = persoas[nome];
trace('$name fai $traballo para gañarse a vida!');
}
}
}

O principal innovacións Versión 4.0:

  • Nova sintaxe para especificar o tipo de función "(name:String, age:Int)->Bool" ou "(String, Int)->Bool" en lugar de "String->Int->Bool".
  • A sintaxe da función de frecha é "(a, b) -> a + b" en lugar de "function(a, b) return a + b".
  • Protección contra problemas asociados co uso de valores nulos (función experimental, habilitada opcionalmente para determinados campos, clases ou paquetes).
  • A palabra clave "final" é para campos de clase e variables locais que son inmutables. "final" tamén se pode usar para definir funcións para evitar que sexan substituídas pola herdanza e para as clases/interfaces que non se poden herdar.
  • Apoiar Estándar Unicode para o tipo base "String" en todos os destinos de compilación excepto Neko.
  • Intérprete incorporado reescrito desde cero, que agora pasa co nome Avaliar. Grazas ao novo intérprete, os guións e as macros funcionan moito máis rápido. Admítese o modo de depuración interactiva.
  • Novo sistema de destino para a compilación (destino) Hashlink - un tempo de execución de alto rendemento deseñado especificamente para Haxe, que admite a compilación de bytecode para JIT ou C, ten unha fácil integración con C, así como acceso a tipos e punteiros numéricos de baixo nivel.
  • Novo destino de JVM: permítelle xerar código de bytes jvm saltando o paso de compilación do código Java engadindo a marca "-D jvm" ao apuntar en Java.
  • A capacidade de implementar en liña no punto de chamar funcións ou construtores, aínda que non estean declarados como tales.
  • Posibilidade de inclusión extensións estáticas ao declarar un tipo (como "enum") usando "@:using(path.ToExtension)".
  • Os tipos abstractos agora admiten unha versión "set" do operador "@:op(ab)" para volver cargar expresións "obj.foo = bar".
  • A sintaxe do bucle "for" agora admite a iteración de clave-valor: "for (key => valor na colección) {}".
  • Soporte para o uso de marcas tipo xml en expresións: "var a = ‹hi/›;". Polo momento, esta función só está dispoñible para analizar con macros e está na fase de deseño.
  • A sintaxe dos campos opcionais na notación “completa” dos tipos de estrutura anónima é: “{ var ?f:Int; }" (unha alternativa á curta "{ ?f:Int }").
  • Os valores de enumeración agora poden ser valores predeterminados para os argumentos de función: "función foo‹T› (opción: Opción‹T› = None)".
  • A sintaxe "enum abstract Name(BasicType) {}" xa non require o prefixo "@:" en "enum".
  • Numeración automática para enumeracións abstractas:

    enumeración abstracta Foo(Int) {
    var A; // 0
    var B; // 1
    }
    barra abstracta enumeración (cadea) {
    var A; // "A"
    var B; // "B"
    }

  • A palabra clave "externa" xa non require o uso do prefixo "@:".
  • Eliminouse a opción "utensilios Dinámico" para acceder aos campos de clase mediante cadeas. Dispoñible para clases externas ou mediante a implementación dun tipo abstracto.
  • Engadiuse a sintaxe "A e B" para a intersección de tipos, que actualmente só se aplica ás estruturas anónimas e ás restricións de parámetros de tipo. Eliminouse a antiga sintaxe de restricións.
  • A creación de instancias "Map" baleiras está dispoñible mediante a sintaxe "var map:Map‹Int, String› = [];" semellante a unha matriz.
  • Engadiuse a estrutura de datos "haxe.ds.ReadOnlyArray".
  • Agora os metadatos poden ter espazos de nomes ("@:prefix.name function() {…}"). Do mesmo xeito coas definicións: “#se (algún.bandeira... #fin”.
  • Novo protocolo de servizo para os IDE utilizados en plugin para VSCode.
  • Definicións externas actualizadas (externas) para as API web e engadidas as que faltan.

Fonte: opennet.ru

Engadir un comentario