Frigivelse af programmeringssproget Haxe 4.0

Ledig værktøjskasse frigivelse Haxe 4.0, som inkluderer multi-paradigme højniveau programmeringssprog af samme navn med stærk indtastning, en cross-compiler og et standard bibliotek af funktioner. Projektet understøtter oversættelse til C++, HashLink/C, JavaScript, C#, Java, PHP, Python og Lua samt kompilering til JVM, HashLink/JIT, Flash og Neko bytecode, med adgang til de native muligheder for hver målplatform. Compiler kode distribueret af under GPLv2-licensen og et standardbibliotek og en virtuel maskine udviklet til Haxe Neko under MIT-licensen.

Sproget er udtryksorienteret med stærk skrivning. Objektorienterede, generiske og funktionelle programmeringskoncepter understøttes.
Haxe-syntaks er tæt på ECMAScript og udvider sig dens funktioner såsom statisk typning, autotype-inferens, mønstermatchning, generiske, iterator-baseret for loops, AST-makroer, GADT (Generalized Algebraic Data Types), abstrakte typer, anonyme strukturer, forenklede array-definitioner, betingede kompileringsudtryk, vedhæftning af metadata til felter , klasser og udtryk, strenginterpolation ('Mit navn er $navn'), typeparametre ("ny hovedstreng›('foo')"), og meget mere.

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

for (navn i people.keys()) {
var job = personer[navn];
trace(‘$navn gør $job for en levevej!’);
}
}
}

The main innovationer version 4.0:

  • Ny syntaks til angivelse af funktionstypen "(navn:String, age:Int)->Bool" eller "(String, Int)->Bool" i stedet for "String->Int->Bool".
  • Pilfunktionssyntaks er "(a, b) -> a + b" i stedet for "funktion(a, b) returnerer a + b".
  • Beskyttelse mod problemer forbundet med brugen af ​​Null-værdier (eksperimentel funktion, valgfrit aktiveret for visse felter, klasser eller pakker).
  • Det "endelige" nøgleord er for klassefelter og lokale variabler, der er uforanderlige. "final" kan også bruges til at definere funktioner for at forhindre dem i at blive tilsidesat af nedarvning og for klasser/grænseflader, der ikke kan nedarves.
  • Support Unicode-standard for basistypen "String" på alle kompileringsmål undtagen Neko.
  • Indbygget tolk omskrevet fra bunden, som nu kommer under navnet eval. Takket være den nye fortolker kører scripts og makroer meget hurtigere. Interaktiv debugging-tilstand er understøttet.
  • Nyt målsystem til kompilering (mål) Hashlink - en højtydende runtime designet specifikt til Haxe, der understøtter kompilering til bytekode til JIT eller C, har nem integration med C, samt adgang til numeriske typer og pointere på lavt niveau.
  • Nyt JVM-mål - giver dig mulighed for at generere jvm-bytekode ved at springe Java-kodekompileringstrinet over ved at tilføje "-D jvm"-flaget, når du målretter i Java.
  • Evnen til at inline-deployere på tidspunktet for at kalde funktioner eller konstruktører, selvom de ikke er erklæret som sådan.
  • Mulighed for inklusion statiske udvidelser når du erklærer en type (såsom "enum") ved hjælp af "@:using(path.ToExtension)".
  • Abstrakte typer understøtter nu en "set"-version af "@:op(a.b)"-operatoren til at genindlæse "obj.foo = bar"-udtryk.
  • "for" loop-syntaksen understøtter nu nøgle-værdi iteration: "for (nøgle => værdi i samling) {}".
  • Understøttelse af brug af xml-lignende markup i udtryk: "var a = ‹hi/›;". Indtil videre er denne funktion kun tilgængelig til parsing med makroer og er på designstadiet.
  • Syntaksen for valgfrie felter i den "fulde" notation af anonyme strukturtyper er: "{ var ?f:Int; }" (et alternativ til det korte "{ ?f:Int }").
  • Enum-værdier kan nu være standardværdier for funktionsargumenter: "funktion foo‹T›(option:Option‹T› = Ingen)”.
  • Syntaksen "enum abstract Name(BasicType) {}" kræver ikke længere "@:"-præfikset i "enum".
  • Automatisk nummerering for abstrakte opregninger:

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

  • Nøgleordet "ekstern" kræver ikke længere brug af præfikset "@:".
  • Fjernede muligheden "redskaber Dynamisk" for at få adgang til klassefelter via strenge. Tilgængelig for eksterne klasser eller gennem implementering af en abstrakt type.
  • Tilføjet "A & B" syntaks for type skæringspunkt, som i øjeblikket kun gælder for anonyme strukturer og type parameter begrænsninger. Den gamle begrænsningssyntaks er blevet fjernet.
  • Oprettelse af tomme "Map"-instanser er tilgængelig via syntaksen "var map:Map‹Int, String› = [];" ligner et array.
  • Tilføjet datastruktur "haxe.ds.ReadOnlyArray".
  • Metadata kan nu have navnerum ("@:præfiks.navn funktion() {...}"). Tilsvarende med definitioner: "#if (some.flag ... #end".
  • Ny serviceprotokol til IDE'er brugt i plugin til VSCode.
  • Opdaterede eksterne definitioner (ekstern) for web-API'er og tilføjede manglende.

Kilde: opennet.ru

Tilføj en kommentar