Llançament del llenguatge de programació Haxe 4.0

Disponible llançament del conjunt d'eines Haxe 4.0, que inclou el llenguatge de programació d'alt nivell multiparadigma del mateix nom amb una mecanografia forta, un compilador creuat i una biblioteca estàndard de funcions. El projecte admet la traducció a C++, HashLink/C, JavaScript, C#, Java, PHP, Python i Lua, així com la compilació a JVM, HashLink/JIT, Flash i bytecode Neko, amb accés a les capacitats natives de cada plataforma objectiu. Codi del compilador Distribuït per sota la llicència GPLv2, i una biblioteca estàndard i una màquina virtual desenvolupades per a Haxe Neko sota la llicència MIT.

La llengua és orientat a l'expressió amb una mecanografia forta. S'admeten conceptes de programació orientada a objectes, genèrics i funcionals.
La sintaxi Haxe és propera a ECMAScript i s’expandeix les seves característiques com ara l'escriptura estàtica, la inferència automàtica, la concordança de patrons, els genèrics, els bucles basats en iteradors, macros AST, GADT (tipus de dades algebraiques generalitzades), tipus abstractes, estructures anònimes, definicions de matrius simplificades, expressions de compilació condicional, adjuntant metadades als camps , classes i expressions, interpolació de cadenes ("El meu nom és $nom"), paràmetres de tipus ("nou Main‹String›('foo')") i molt més.

Prova de classe {
funció estàtica main() {
var gent = [
"Elizabeth" => "Programació",
"Joel" => "Disseny"
];

per a (nom a people.keys()) {
var feina = gent[nom];
trace('$name fa $treball per guanyar-se la vida!');
}
}
}

El principal innovacions versió 4.0:

  • Nova sintaxi per especificar el tipus de funció "(nom:String, edat:Int)->Bool" o "(String, Int)->Bool" en lloc de "String->Int->Bool".
  • La sintaxi de la funció de fletxa és "(a, b) -> a + b" en lloc de "function(a, b) return a + b".
  • Protecció contra problemes associats a l'ús de valors nuls (funció experimental, habilitada opcionalment per a determinats camps, classes o paquets).
  • La paraula clau "final" és per a camps de classe i variables locals que són immutables. "final" també es pot utilitzar per definir funcions per evitar que siguin anul·lades per l'herència i per a classes/interfícies que no es poden heretar.
  • suport Estàndard Unicode per al tipus base "String" a tots els objectius de compilació excepte Neko.
  • Intèrpret integrat reescrit des de zero, que ara passa sota el nom Eval. Gràcies al nou intèrpret, els scripts i les macros funcionen molt més ràpid. S'admet el mode de depuració interactiva.
  • Nou sistema de destinació per a la compilació (destinació) Hashlink - un temps d'execució d'alt rendiment dissenyat específicament per a Haxe, que admet la compilació de bytecode per a JIT o C, té una fàcil integració amb C, així com accés a tipus i punters numèrics de baix nivell.
  • Nou objectiu de JVM: us permet generar codi de bytes jvm saltant el pas de compilació de codi Java afegint la marca "-D jvm" quan s'orienta a Java.
  • La capacitat de desplegar-se en línia en el punt de cridar funcions o constructors, fins i tot si no es declaren com a tals.
  • Possibilitat d'inclusió extensions estàtiques quan es declara un tipus (com ara "enum") mitjançant "@:using(path.ToExtension)".
  • Els tipus abstractes ara admeten una versió "set" de l'operador "@:op(a.b)" per tornar a carregar les expressions "obj.foo = bar".
  • La sintaxi del bucle "for" ara admet la iteració clau-valor: "for (clau => valor a la col·lecció) {}".
  • Suport per a l'ús de marques de tipus xml en expressions: "var a = ‹hi/›;". De moment, aquesta funció només està disponible per analitzar amb macros i està en fase de disseny.
  • La sintaxi dels camps opcionals en la notació "complet" dels tipus d'estructura anònima és: "{ var ?f:Int; }" (una alternativa al curt "{ ?f:Int }").
  • Els valors d'enumeració ara poden ser valors predeterminats per als arguments de funció: "funció foo‹T› (opció: Opció‹T› = Cap)".
  • La sintaxi "enum abstract Name(BasicType) {}" ja no requereix el prefix "@:" a "enum".
  • Numeració automàtica per a enumeracions abstractes:

    enumeració abstracta Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enum abstract Bar(String) {
    var A; // "A"
    var B; // "B"
    }

  • La paraula clau "extern" ja no requereix l'ús del prefix "@:".
  • S'ha eliminat l'opció "eines Dinàmic" per accedir als camps de classe mitjançant cadenes. Disponible per a classes externes o mitjançant la implementació d'un tipus abstracte.
  • S'ha afegit la sintaxi "A i B" per a la intersecció de tipus, que actualment només s'aplica a estructures anònimes i restriccions de paràmetres de tipus. S'ha eliminat la sintaxi de restricció antiga.
  • La creació d'instàncies "Mapa" buides està disponible mitjançant la sintaxi "var map:Map‹Int, String› = [];" semblant a una matriu.
  • S'ha afegit l'estructura de dades "haxe.ds.ReadOnlyArray".
  • Les metadades ara poden tenir espais de noms (“@:prefix.name function() {…}”). De la mateixa manera amb les definicions: "#si (alguna.bandera... #final".
  • Nou protocol de servei per als IDE utilitzats a connector per a VSCode.
  • S'han actualitzat les definicions externes (extern) per a les API web i s'han afegit les que falten.

Font: opennet.ru

Afegeix comentari