Utgivelse av programmeringsspråket Haxe 4.0

Tilgjengelig utgivelse av verktøysett Haxe 4.0, som inkluderer multi-paradigme høynivå programmeringsspråk med samme navn med sterk skriving, en krysskompilator og et standard bibliotek med funksjoner. Prosjektet støtter oversettelse til C++, HashLink/C, JavaScript, C#, Java, PHP, Python og Lua, samt kompilering til JVM, HashLink/JIT, Flash og Neko bytecode, med tilgang til de opprinnelige egenskapene til hver målplattform. Kompilatorkode distribuert av under GPLv2-lisensen, og et standardbibliotek og en virtuell maskin utviklet for Haxe neko under MIT-lisensen.

Språket er uttrykksorientert med sterk skriving. Objektorienterte, generiske og funksjonelle programmeringskonsepter støttes.
Haxe-syntaks er nær ECMAScript og utvides funksjonene som statisk skriving, autotype-inferens, mønstertilpasning, generikk, iteratorbasert for loops, AST-makroer, GADT (Generalized Algebraic Data Types), abstrakte typer, anonyme strukturer, forenklede matrisedefinisjoner, betingede kompileringsuttrykk, vedlegge metadata til felt , klasser og uttrykk, strenginterpolasjon ('Mitt navn er $name'), typeparametere ("new Main‹String›('foo')"), og mye mer.

klasse Test {
statisk funksjon main() {
var folk = [
"Elizabeth" => "Programmering",
"Joel" => "Design"
];

for (navn i people.keys()) {
var jobb = personer[navn];
trace('$navn gjør $jobb for en levende!');
}
}
}

Den viktigste innovasjoner versjon 4.0:

  • Ny syntaks for å spesifisere funksjonstypen "(navn:String, age:Int)->Bool" eller "(String, Int)->Bool" i stedet for "String->Int->Bool".
  • Pilfunksjonens syntaks er "(a, b) -> a + b" i stedet for "funksjon(a, b) returner a + b".
  • Beskyttelse mot problemer knyttet til bruk av nullverdier (eksperimentell funksjon, valgfritt aktivert for visse felt, klasser eller pakker).
  • Det "endelige" nøkkelordet er for klassefelt og lokale variabler som er uforanderlige. "final" kan også brukes til å definere funksjoner for å hindre at de overstyres av arv og for klasser/grensesnitt som ikke kan arves.
  • Støtte Unicode-standard for basistypen "String" på alle kompileringsmål unntatt Neko.
  • Innebygd tolk omskrevet fra bunnen av, som nå kommer under navnet Evaluer. Takket være den nye tolken kjører skript og makroer mye raskere. Interaktiv feilsøkingsmodus støttes.
  • Nytt målsystem for kompilering (mål) Hashlink - en høyytelses kjøretid designet spesielt for Haxe, som støtter kompilering til bytekode for JIT eller C, har enkel integrasjon med C, samt tilgang til numeriske typer og pekere på lavt nivå.
  • Nytt JVM-mål - lar deg generere jvm-bytekode ved å hoppe over Java-kodekompileringstrinnet ved å legge til "-D jvm"-flagget når du målretter i Java.
  • Muligheten til å inline-distribuere på tidspunktet for å kalle funksjoner eller konstruktører, selv om de ikke er deklarert som sådan.
  • Mulighet for inkludering statiske utvidelser når du erklærer en type (som "enum") ved å bruke "@:using(path.ToExtension)".
  • Abstrakte typer støtter nå en "sett"-versjon av "@:op(a.b)"-operatoren for å laste "obj.foo = bar"-uttrykk på nytt.
  • "for" loop-syntaksen støtter nå nøkkel-verdi-iterasjon: "for (nøkkel => verdi i samling) {}".
  • Støtte for bruk av xml-lignende markup i uttrykk: "var a = ‹hi/›;". Foreløpig er denne funksjonen kun tilgjengelig for parsing med makroer og er på designstadiet.
  • Syntaksen for valgfrie felt i den "fulle" notasjonen for anonyme strukturtyper er: "{ var ?f:Int; }" (et alternativ til den korte "{ ?f:Int }").
  • Enum-verdier kan nå være standardverdier for funksjonsargumenter: "function foo‹T›(option:Option‹T› = Ingen)".
  • Syntaksen "enum abstract Name(BasicType) {}" krever ikke lenger prefikset "@:" i "enum".
  • Autonummerering for abstrakte opplistinger:

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

  • Nøkkelordet "ekstern" krever ikke lenger bruk av prefikset "@:".
  • Fjernet alternativet "redskaper Dynamisk" for å få tilgang til klassefelt via strenger. Tilgjengelig for eksterne klasser eller gjennom implementering av en abstrakt type.
  • Lagt til "A & B"-syntaks for typekryss, som foreløpig kun gjelder for anonyme strukturer og typeparameterbegrensninger. Den gamle begrensningssyntaksen er fjernet.
  • Å lage tomme "Map"-forekomster er tilgjengelig via syntaksen "var map:Map‹Int, String› = [];" ligner på en matrise.
  • Lagt til datastruktur "haxe.ds.ReadOnlyArray".
  • Metadata kan nå ha navneområder ("@:prefix.name function() {...}"). Tilsvarende med definisjoner: "#if (some.flag ... #end".
  • Ny tjenesteprotokoll for IDE-er brukt i plugin for VSCode.
  • Oppdaterte eksterne definisjoner (ekstern) for web-APIer og lagt til manglende.

Kilde: opennet.ru

Legg til en kommentar