Utgivning av programmeringsspråket Haxe 4.0

Tillgängliga verktygslåda Haxe 4.0, som inkluderar multiparadigm högnivåprogrammeringsspråket med samma namn med stark typning, en korskompilator och ett standardbibliotek med funktioner. Projektet stöder översättning till C++, HashLink/C, JavaScript, C#, Java, PHP, Python och Lua, samt kompilering till JVM, HashLink/JIT, Flash och Neko bytecode, med tillgång till de inbyggda funktionerna för varje målplattform. Kompilatorkod levererad av under GPLv2-licensen och ett standardbibliotek och en virtuell maskin utvecklad för Haxe några under MIT-licensen.

Språket är uttrycksorienterad med stark skrivning. Objektorienterade, generiska och funktionella programmeringskoncept stöds.
Haxe-syntax ligger nära ECMAScript och expanderar dess funktioner såsom statisk typning, autotypinferens, mönstermatchning, generik, iteratorbaserad för loopar, AST-makron, GADT (Generalized Algebraic Data Types), abstrakta typer, anonyma strukturer, förenklade arraydefinitioner, villkorliga kompileringsuttryck, bifoga metadata till fält , klasser och uttryck, stränginterpolation ('Mitt namn är $name'), typparametrar ("new Main‹String›('foo')"), och mycket mer.

klass Test {
statisk funktion main() {
var människor = [
"Elizabeth" => "Programmering",
"Joel" => "Design"
];

for (namn i people.keys()) {
var jobb = personer[namn];
trace('$name gör $jobb för sitt uppehälle!');
}
}
}

Den huvudsakliga innovationer version 4.0:

  • Ny syntax för att ange funktionstypen "(namn:String, age:Int)->Bool" eller "(String, Int)->Bool" istället för "String->Int->Bool".
  • Pilfunktionssyntax är "(a, b) -> a + b" istället för "funktion(a, b) returnerar a + b".
  • Skydd mot problem i samband med användningen av nullvärden (experimentell funktion, valfritt aktiverad för vissa fält, klasser eller paket).
  • Det "slutliga" nyckelordet är för klassfält och lokala variabler som är oföränderliga. "final" kan också användas för att definiera funktioner för att förhindra att de åsidosätts av arv och för klasser/gränssnitt som inte kan ärvas.
  • Support Unicode-standard för bastypen "String" på alla kompileringsmål utom Neko.
  • Inbyggd tolk omskriven från grunden, som nu kommer under namnet eval. Tack vare den nya tolken går skript och makron mycket snabbare. Interaktivt felsökningsläge stöds.
  • Nytt målsystem för sammanställning (mål) Hashlink - en högpresterande runtime designad specifikt för Haxe, som stöder kompilering till bytekod för JIT eller C, har enkel integration med C, samt tillgång till lågnivå numeriska typer och pekare.
  • Nytt JVM-mål - låter dig generera jvm-bytekod genom att hoppa över Java-kodkompileringssteget genom att lägga till "-D jvm"-flaggan vid inriktning i Java.
  • Möjligheten att inline-distribuera när funktioner eller konstruktörer anropas, även om de inte deklareras som sådana.
  • Möjlighet till inkludering statiska förlängningar när du deklarerar en typ (som "enum") med "@:using(path.ToExtension)".
  • Abstrakta typer stöder nu en "set"-version av operatorn "@:op(ab)" för att ladda om "obj.foo = bar"-uttryck.
  • "För"-loopsyntaxen stöder nu nyckel-värde-iteration: "för (nyckel => värde i samling) {}".
  • Stöd för att använda xml-liknande uppmärkning i uttryck: "var a = ‹hi/›;". För närvarande är den här funktionen endast tillgänglig för analys med makron och är på designstadiet.
  • Syntaxen för valfria fält i den "fullständiga" notationen för anonyma strukturtyper är: "{ var ?f:Int; }" (ett alternativ till det korta "{ ?f:Int }").
  • Enumvärden kan nu vara standardvärden för funktionsargument: "function foo‹T›(option:Option‹T› = Ingen)".
  • Syntaxen "enum abstract Name(BasicType) {}" kräver inte längre prefixet "@:" i "enum".
  • Automatisk numrering för abstrakta uppräkningar:

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

  • Nyckelordet "extern" kräver inte längre användning av prefixet "@:".
  • Tog bort alternativet "redskap Dynamisk" för att komma åt klassfält via strängar. Tillgänglig för externa klasser eller genom implementering av en abstrakt typ.
  • Lade till "A & B"-syntax för typkorsning, som för närvarande endast gäller för anonyma strukturer och typparameterbegränsningar. Den gamla begränsningssyntaxen har tagits bort.
  • Att skapa tomma "Map"-instanser är tillgängligt via syntaxen "var map:Map‹Int, String› = [];" liknar en array.
  • Lade till datastruktur "haxe.ds.ReadOnlyArray".
  • Metadata kan nu ha namnrymder ("@:prefix.name function() {...}"). På samma sätt med definitioner: "#if (some.flag ... #end".
  • Nytt tjänsteprotokoll för IDE:er som används i plugin för VSCode.
  • Uppdaterade externa definitioner (extern) för webb-API:er och lagt till saknade.

Källa: opennet.ru

Lägg en kommentar