Vrijgave van de programmeertaal Haxe 4.2

Er is een release van de Haxe 4.2-toolkit beschikbaar, die de gelijknamige programmeertaal op hoog niveau met meerdere paradigma's, krachtig typen, een cross-compiler en een standaardbibliotheek met functies bevat. 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. De compilercode wordt gedistribueerd onder de GPLv2-licentie, en de standaardbibliotheek en de virtuele HashLink- en Neko-machines die voor Haxe zijn ontwikkeld, zijn gelicentieerd onder de MIT-licentie.

De taal is expressiegericht met sterke typering. Objectgeoriënteerde, generieke en functionele programmeertechnieken worden ondersteund. De syntaxis van Haxe ligt dicht bij ECMAScript en breidt deze uit met functies zoals statisch typen, automatische type-inferentie, patroonmatching, generieke methoden, op iterator gebaseerde for-lussen, AST-macro's, GADT (Generalized Algebraic Data Types), abstracte typen, anonieme structuren, vereenvoudigde definities arrays, expressies voor voorwaardelijke compilatie, metadata toevoegen aan velden, klassen en expressies, stringinterpolatie ('Mijn naam is $name'), typeparameters ('new Main (“foo”)') en vele anderen. class Test { static function main() {final people = [ "Elizabeth" => "Programmeren", "Joel" => "Ontwerp"]; for (name => baan bij mensen) { trace('$name doet $job voor de kost!'); } } }

Nieuwe functies in versie 4.2:

  • Het declareren van statische variabelen en functies op moduleniveau, zonder de noodzaak om ze in een klasse te verpakken.
  • Ondersteuning voor “klassieke” abstracte klassen en functies.
  • Native implementatie van variadische functies voor alle doelplatforms (haxe.Rest) en toevoeging van de argumentuitbreidingsoperator “f(...array)”.
  • Implementatie van een gebeurtenislus voor individuele threads (“sys.thread.Thread.events”).
  • "@:inheritDoc"-metagegevens voor het overnemen van type-/velddocumentatie.
  • Ondersteuning voor overbelasting van methoden voor externe methoden op alle doelplatforms.
  • Het doorsturen van de constructor die aan het type ten grondslag ligt, naar de samenvatting met behulp van de “@:forward.new”-metagegevens.
  • "EIs"-constructor toegevoegd aan "haxe.macro.Expr".
  • Mogelijkheid om een ​​abstracte typevariant te maken met "@:forward.variantie".
  • Weergave van het type “Elk” als “Dynamisch” bij het verenigen van variatie.
  • Er zijn enkele basistypen uitzonderingen toegevoegd aan het pakket "haxe.exceptions".
  • Ondersteuning voor het toevoegen van metagegevens bij het declareren van variabelen.
  • Functie "StringTools.unsafeCharAt" gebruikt voor string-iteratie.
  • eval (interpreter): bindingen toegevoegd aan "libuv" in pakket "eval.luv".
  • eval: bindingen met native implementaties van "Int64" en "UInt64" via het pakket "eval.integers".
  • cs: implementatie van UDP-socket.
  • cs: “cs.Syntax” module voor inline invoeging van C#-code.
  • jvm: De vlag “-D jvm.dynamic-level=x” is toegevoegd om het aantal gegenereerde optimalisaties voor dynamische code te beheren. 0 = geen, 1 = veldlezen/schrijven-optimalisatie, 2 = methodesluitingen tijdens het compileren.
  • java, jvm: Ondersteuning voor de vlag "--java-lib <directory>".
  • python: threading API-implementatie.

Algemene verbeteringen:

  • "expr is SomeType" vereist geen omloop tussen haakjes.
  • Verhoogde prioriteit voor extensies van het type "@:using".
  • Staat het gebruik van statische type-extensies toe via "super".
  • Mogelijkheid om metagegevens in te stellen op “@:noDoc”-velden.
  • Het abstracte type "Kaart" is transitief gemaakt.
  • Ondersteuning voor "@:native" op enum-constructors.
  • Ondersteuning voor "@:using" bij typedeclaraties ("typedefs").
  • Bij fouten met meerdere regels wordt "..." gebruikt als voorvoegsel voor volgende regels.
  • Type-inferentie is herwerkt, anonieme structuren kunnen beter worden omgezet naar expliciete typen en worden 'gesloten' wanneer de functie is voltooid.
  • Het type functies zonder argumenten afleiden als "()->..." in plaats van "Void->...".
  • Het trefwoord "function" is toegestaan ​​als pakketnaam.
  • Verbeterde inlineing van objecten.
  • cs: Ondersteuning toegevoegd voor .NET 5.0.
  • cpp: Ondersteuning voor native constructors voor externe klassen.
  • php: "php.Syntax.customArrayDecl" toegevoegd om een ​​native array te declareren.
  • php: Bijgewerkte externe methoden voor verschillende functies en klassen.
  • php: Geoptimaliseerde implementatie van anonieme structuren.
  • hl: Compilatie overslaan als er geen wijzigingen in de modules zijn.
  • lua: "hx-lua-simdjson" gebruiken om json te parseren.
  • jvm: Verminderde CPU-belasting in de "sys.thread.Lock"-implementatie.
  • js: Verbeterde compatibiliteit met Google Closure Compiler.
  • Null Safety: Overweeg "@:nullSafety(Off)" bij het declareren van variabelen: "var @:nullSafety(Off) v".

Ook is de toevoeging aan de VSCode-editor bijgewerkt naar de nieuwe versie van de compiler, waarin hints zijn verschenen met het genereren van ontbrekende interfacevelden, eenvoudige en abstracte klassen, evenals eigenschapsmethoden.

Bron: opennet.ru

Voeg een reactie