Vrijgave van de programmeertaal Haxe 4.0

Beschikbaar toolkit-uitgave Hax 4.0, die de gelijknamige programmeertaal op hoog niveau met meerdere paradigma's bevat, met sterk typen, een cross-compiler en een standaardbibliotheek met functies. Het project ondersteunt vertaling naar C++, HashLink/C, JavaScript, C#, Java, PHP, Python en Lua, evenals compilatie naar JVM, HashLink/JIT, Flash en Neko bytecode, met toegang tot de native mogelijkheden van elk doelplatform. Compilercode gedistribueerd door onder de GPLv2-licentie, en een standaardbibliotheek en een virtuele machine ontwikkeld voor Haxe Neko onder de MIT-licentie.

Taal is expressiegericht met krachtig typen. Objectgeoriënteerde, generieke en functionele programmeerconcepten worden ondersteund.
De Haxe-syntaxis ligt dicht bij ECMAScript en breidt uit de functies ervan zoals statisch typen, autotype-inferentie, patroonmatching, generieke methoden, op iterator gebaseerde for-lussen, AST-macro's, GADT (Generalized Algebraic Data Types), abstracte typen, anonieme structuren, vereenvoudigde array-definities, voorwaardelijke compilatie-expressies, het koppelen van metagegevens aan velden , klassen en expressies, tekenreeksinterpolatie ('Mijn naam is $name'), typeparameters ('new Main‹String›('foo')'), en veel meer.

klasse Test {
statische functie hoofd() {
var mensen = [
"Elizabeth" => "Programmeren",
"Joel" => "Ontwerp"
];

voor (naam in people.keys()) {
var baan = mensen[naam];
trace('$name doet $job voor de kost!');
}
}
}

De belangrijkste innovaties versie 4.0:

  • Nieuwe syntaxis voor het opgeven van het functietype "(naam:String, leeftijd:Int)->Bool" of "(String, Int)->Bool" in plaats van "String->Int->Bool".
  • De syntaxis van de pijlfunctie is "(a, b) -> a + b" in plaats van "functie(a, b) retourneert a + b".
  • Bescherming tegen problemen die verband houden met het gebruik van Null-waarden (experimentele functie, optioneel ingeschakeld voor bepaalde velden, klassen of pakketten).
  • Het trefwoord "laatste" is voor klassenvelden en lokale variabelen die onveranderlijk zijn. "final" kan ook worden gebruikt om functies te definiëren om te voorkomen dat ze worden overschreven door overerving en voor klassen/interfaces die niet kunnen worden overgenomen.
  • Ondersteunen Unicode-standaard voor het basistype "String" op alle compilatiedoelen behalve Neko.
  • Ingebouwde tolk die helemaal opnieuw is geschreven, die nu onder de naam valt evalueren. Dankzij de nieuwe tolk werken scripts en macro's veel sneller. Interactieve foutopsporingsmodus wordt ondersteund.
  • Nieuw doelsysteem voor compilatie (doel) Hashlink - een krachtige runtime die speciaal voor Haxe is ontworpen, die compilatie naar bytecode voor JIT of C ondersteunt, gemakkelijke integratie met C heeft, evenals toegang tot numerieke typen en pointers op laag niveau.
  • Nieuw JVM-doel - hiermee kunt u jvm-bytecode genereren door de stap voor het compileren van Java-code over te slaan door de vlag "-D jvm" toe te voegen bij targeting in Java.
  • De mogelijkheid om inline te implementeren op het moment dat functies of constructors worden aangeroepen, zelfs als deze niet als zodanig zijn gedeclareerd.
  • Mogelijkheid tot opname statische extensies bij het declareren van een type (zoals "enum") met behulp van "@:using(path.ToExtension)".
  • Abstract-typen ondersteunen nu een "set"-versie van de operator "@:op(ab)" om "obj.foo = bar"-expressies opnieuw te laden.
  • De "for"-lussyntaxis ondersteunt nu sleutel-waarde-iteratie: "for (sleutel => waarde in verzameling) {}".
  • Ondersteuning voor het gebruik van xml-achtige opmaak in expressies: “var a = ‹hi/›;”. Voorlopig is deze functie alleen beschikbaar voor het parseren met macro's en bevindt deze zich in de ontwerpfase.
  • De syntaxis voor optionele velden in de “volledige” notatie van anonieme structuurtypen is: “{ var ?f:Int; }" (een alternatief voor de korte "{ ?f:Int }").
  • Enum-waarden kunnen nu standaardwaarden zijn voor functieargumenten: "function foo‹T›(option:Option‹T› = Geen)".
  • De syntaxis "enum abstract Name(BasicType) {}" vereist niet langer het voorvoegsel "@:" in "enum".
  • Automatische nummering voor abstracte opsommingen:

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

  • Voor het trefwoord "extern" is niet langer het gebruik van het voorvoegsel "@:" vereist.
  • De optie verwijderd "gereedschap Dynamisch" voor toegang tot klassenvelden via tekenreeksen. Beschikbaar voor externe klassen of via implementatie door een abstract type.
  • "A & B"-syntaxis toegevoegd voor type-kruising, die momenteel alleen van toepassing is op anonieme structuren en typeparameterbeperkingen. De oude beperkingsyntaxis is verwijderd.
  • Het maken van lege "Map"-instanties is beschikbaar via de syntaxis "var map:Map‹Int, String› = [];" vergelijkbaar met een array.
  • Gegevensstructuur "haxe.ds.ReadOnlyArray" toegevoegd.
  • Metagegevens kunnen nu naamruimten hebben (“@:prefix.name function() {…}”). Hetzelfde geldt voor definities: “#if (some.flag ... #end”.
  • Nieuw serviceprotocol voor IDE's die worden gebruikt in plug-in voor VSCode.
  • Externe definities (extern) voor web-API's bijgewerkt en ontbrekende definities toegevoegd.

Bron: opennet.ru

Voeg een reactie