Lanzamiento del lenguaje de programación Haxe 4.0

Disponible lanzamiento del kit de herramientas haxe 4.0, que incluye el lenguaje de programación multiparadigma de alto nivel del mismo nombre con escritura segura, un compilador cruzado y una biblioteca estándar de funciones. 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. código compilador distribuido por bajo la licencia GPLv2, y una biblioteca estándar y una máquina virtual desarrollada para Haxe Neko bajo la licencia del MIT.

Lenguaje es orientado a la expresión con mecanografía fuerte. Se admiten conceptos de programación funcional, genéricos y orientados a objetos.
La sintaxis de Haxe está cerca de ECMAScript y se expande sus características como escritura estática, inferencia de autotipo, coincidencia de patrones, genéricos, bucles for basados ​​en iteradores, macros AST, GADT (tipos de datos algebraicos generalizados), tipos abstractos, estructuras anónimas, definiciones de matrices simplificadas, expresiones de compilación condicional, adjuntar metadatos a campos , clases y expresiones, interpolación de cadenas ('Mi nombre es $nombre'), parámetros de tipo ("new Main‹String›('foo')") y mucho más.

prueba de clase {
función estática principal() {
var personas = [
"Elizabeth" => "Programación",
"Joel" => "Diseño"
];

para (nombre en personas.keys()) {
var trabajo = personas[nombre];
trace('¡$nombre se gana la vida con $trabajo!');
}
}
}

El principal innovaciones versión 4.0:

  • Nueva sintaxis para especificar el tipo de función "(nombre:Cadena, edad:Int)->Bool" o "(Cadena, Int)->Bool" en lugar de "Cadena->Int->Bool".
  • La sintaxis de la función de flecha es "(a, b) -> a + b" en lugar de "función (a, b) devuelve a + b".
  • Protección contra problemas asociados con el uso de valores nulos (función experimental, habilitada opcionalmente para ciertos campos, clases o paquetes).
  • La palabra clave "final" es para campos de clase y variables locales que son inmutables. "final" también se puede utilizar para definir funciones para evitar que sean anuladas por herencia y para clases/interfaces que no se pueden heredar.
  • Apoyar Estándar Unicode para el tipo base "String" en todos los objetivos de compilación excepto Neko.
  • Intérprete incorporado reescrito desde cero, que ahora lleva el nombre evaluar. Gracias al nuevo intérprete, los scripts y las macros se ejecutan mucho más rápido. Se admite el modo de depuración interactiva.
  • Nuevo sistema de destino para la compilación (objetivo) enlace hash - un tiempo de ejecución de alto rendimiento diseñado específicamente para Haxe, que admite la compilación en código de bytes para JIT o C, tiene una fácil integración con C, así como acceso a punteros y tipos numéricos de bajo nivel.
  • Nuevo destino JVM: le permite generar código de bytes jvm omitiendo el paso de compilación del código Java agregando el indicador "-D jvm" al apuntar en Java.
  • La capacidad de implementar en línea en el momento de llamar a funciones o constructores, incluso si no están declarados como tales.
  • Posibilidad de inclusión extensiones estáticas al declarar un tipo (como "enum") usando "@:using(path.ToExtension)".
  • Los tipos abstractos ahora admiten una versión "establecida" del operador "@:op(ab)" para recargar expresiones "obj.foo = bar".
  • La sintaxis del bucle "for" ahora admite la iteración clave-valor: "for (clave => valor en la colección) {}".
  • Soporte para el uso de marcado tipo xml en expresiones: “var a = ‹hi/›;”. Por ahora, esta característica sólo está disponible para analizar con macros y se encuentra en la etapa de diseño.
  • La sintaxis de los campos opcionales en la notación “completa” de tipos de estructuras anónimas es: “{ var ?f:Int; }" (una alternativa al corto "{ ?f:Int }").
  • Los valores de enumeración ahora pueden ser valores predeterminados para los argumentos de la función: "función foo`T`(opción:Opción`T` = Ninguno)".
  • La sintaxis "enum abstract Name(BasicType) {}" ya no requiere el prefijo "@:" en "enum".
  • Numeración automática para enumeraciones abstractas:

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

  • La palabra clave "extern" ya no requiere el uso del prefijo "@:".
  • Se eliminó la opción "implementos Dinámico" para acceder a los campos de clase a través de cadenas. Disponible para clases externas o mediante implementación mediante un tipo abstracto.
  • Se agregó la sintaxis "A y B" para la intersección de tipos, que actualmente solo se aplica a estructuras anónimas y restricciones de parámetros de tipo. Se eliminó la antigua sintaxis de restricción.
  • La creación de instancias vacías de "Mapa" está disponible mediante la sintaxis "var map:Map‹Int, String› = [];" similar a una matriz.
  • Se agregó la estructura de datos "haxe.ds.ReadOnlyArray".
  • Los metadatos ahora pueden tener espacios de nombres (“@:prefix.name function() {…}”). Lo mismo ocurre con las definiciones: “#if (some.flag... #end”.
  • Nuevo protocolo de servicio para IDE utilizados en complemento para VSCode.
  • Se actualizaron las definiciones externas (externas) para las API web y se agregaron las que faltan.

Fuente: opennet.ru

Añadir un comentario