Vrystelling van die programmeertaal Haxe 4.0

Beskikbaar gereedskapstel vrystelling Haxe 4.0, wat die multi-paradigma hoëvlak programmeertaal met dieselfde naam insluit met sterk tik, 'n kruissamesteller en 'n standaard biblioteek van funksies. Die projek ondersteun vertaling na C++, HashLink/C, JavaScript, C#, Java, PHP, Python en Lua, sowel as samestelling na JVM, HashLink/JIT, Flash en Neko bytecode, met toegang tot die inheemse vermoëns van elke teikenplatform. Samesteller kode versprei deur onder die GPLv2-lisensie, en 'n standaardbiblioteek en 'n virtuele masjien wat vir Haxe ontwikkel is Neko onder die MIT-lisensie.

Taal is uitdrukking-georiënteerd met sterk tik. Objekgeoriënteerde, generiese en funksionele programmeringskonsepte word ondersteun.
Haxe-sintaksis is naby aan ECMAScript en brei uit sy kenmerke soos statiese tik, outotipe-afleiding, patroonpassing, generiese, iterator-gebaseerd vir lusse, AST-makro's, GADT (Generalized Algebraic Data Types), abstrakte tipes, anonieme strukture, vereenvoudigde skikkingsdefinisies, voorwaardelike samestelling uitdrukkings, die heg van metadata aan velde , klasse en uitdrukkings, stringinterpolasie ('My naam is $name'), tipe parameters ("new Main‹String›('foo')"), en baie meer.

klastoets {
statiese funksie main() {
var mense = [
"Elizabeth" => "Programmering",
"Joel" => "Ontwerp"
];

vir (naam in people.keys()) {
var job = mense[naam];
trace('$name doen $werk vir 'n lewe!');
}
}
}

Die belangrikste innovasies weergawe 4.0:

  • Nuwe sintaksis vir die spesifikasie van funksietipe "(naam:String, ouderdom:Int)->Bool" of "(String, Int)->Bool" in plaas van "String->Int->Bool".
  • Pylfunksiesintaksis is "(a, b) -> a + b" in plaas van "funksie(a, b) gee a + b terug".
  • Beskerming teen probleme wat verband hou met die gebruik van nulwaardes (eksperimentele kenmerk, opsioneel geaktiveer vir sekere velde, klasse of pakkette).
  • Die "finale" sleutelwoord is vir klasvelde en plaaslike veranderlikes wat onveranderlik is. "finale" kan ook gebruik word om funksies te definieer om te verhoed dat dit deur oorerwing oorheers word en vir klasse/koppelvlakke wat nie geërf kan word nie.
  • Ondersteun Unicode-standaard vir die basistipe "String" op alle samestellingsteikens behalwe Neko.
  • Ingeboude tolk van nuuts af herskryf, wat nou onder die naam kom eval. Danksy die nuwe tolk loop skrifte en makro's baie vinniger. Interaktiewe ontfoutingsmodus word ondersteun.
  • Nuwe teikenstelsel vir samestelling (teiken) Hashlink - 'n hoëprestasie-looptyd wat spesifiek vir Haxe ontwerp is, wat samestelling na greepkode vir JIT of C ondersteun, het maklike integrasie met C, sowel as toegang tot lae-vlak numeriese tipes en wysers.
  • Nuwe JVM-teiken - laat jou toe om jvm-greepkode te genereer deur die Java-kodesamestellingstap oor te slaan deur die "-D jvm"-vlag by te voeg wanneer jy in Java teiken.
  • Die vermoë om inlyn-ontplooiing op die punt van die oproep van funksies of konstruktors, selfs al is hulle nie as sodanig verklaar.
  • Moontlikheid van insluiting statiese uitbreidings wanneer 'n tipe (soos "enum") verklaar word deur "@:using(path.ToExtension)" te gebruik.
  • Abstrakte tipes ondersteun nou 'n "set" weergawe van die "@:op(ab)" operateur om "obj.foo = bar" uitdrukkings te herlaai.
  • Die "vir" lus sintaksis ondersteun nou sleutel-waarde iterasie: "vir (sleutel => waarde in versameling) {}".
  • Ondersteuning vir die gebruik van xml-agtige opmaak in uitdrukkings: "var a = ‹hi/›;". Vir nou is hierdie kenmerk slegs beskikbaar vir ontleding met makro's en is in die ontwerpstadium.
  • Die sintaksis vir opsionele velde in die "volle" notasie van anonieme struktuurtipes is: "{ var ?f:Int; }" ('n alternatief vir die kort "{ ?f:Int }").
  • Enum-waardes kan nou verstekwaardes vir funksie-argumente wees: "funksie foo‹T›(opsie:Opsie‹T› = Geen)".
  • Die "enum abstrakte Naam(BasicType) {}" sintaksis vereis nie meer die "@:" voorvoegsel in "enum" nie.
  • Outo-nommering vir abstrakte opsommings:

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

  • Die "eksterne" sleutelwoord vereis nie meer die gebruik van die "@:" voorvoegsel nie.
  • Het die opsie verwyder "implemente Dinamies" om toegang tot klasvelde via stringe te verkry. Beskikbaar vir eksterne klasse of deur implementering deur 'n abstrakte tipe.
  • Bygevoeg "A & B" sintaksis vir tipe kruising, wat tans slegs van toepassing is op anonieme strukture en tipe parameter beperkings. Die ou beperkingssintaksis is verwyder.
  • Die skep van leë "kaart"-instansies is beskikbaar via die sintaksis "var map:Map‹Int, String› = [];" soortgelyk aan 'n skikking.
  • Bygevoeg datastruktuur "haxe.ds.ReadOnlyArray".
  • Metadata kan nou naamspasies hê ("@:prefix.name function() {...}"). Net so met definisies: "#if (sommige.vlag ... #einde".
  • Nuwe diensprotokol vir IDE's wat in plugin vir VSCode.
  • Opgedateerde eksterne definisies (ekstern) vir Web API's en bygevoeg ontbrekende.

Bron: opennet.ru

Voeg 'n opmerking