Vydání programovacího jazyka Haxe 4.0

Dostupný vydání sady nástrojů Haxe 4.0, který zahrnuje stejnojmenný víceparadigmatický vysokoúrovňový programovací jazyk se silným psaním, křížový kompilátor a standardní knihovnu funkcí. Projekt podporuje překlad do C++, HashLink/C, JavaScript, C#, Java, PHP, Python a Lua, stejně jako kompilaci do JVM, HashLink/JIT, Flash a Neko bytecode, s přístupem k nativním schopnostem každé cílové platformy. Kód kompilátoru distribuovány pod licencí GPLv2 a standardní knihovnu a virtuální stroj vyvinutý pro Haxe Neko pod licencí MIT.

Jazyk je výrazově orientovaný se silným psaním. Jsou podporovány koncepty objektově orientovaného, ​​obecného a funkčního programování.
Syntaxe Haxe je blízká ECMAScript a rozšiřuje jeho funkce, jako je statické typování, odvození automatického typu, porovnávání vzorů, generika, cykly založené na iterátorech, makra AST, GADT (Generalized Algebraic Data Types), abstraktní typy, anonymní struktury, zjednodušené definice polí, výrazy podmíněné kompilace, připojení metadat k polím , třídy a výrazy, interpolace řetězců ('My name is $name'), parametry typu ("new Main‹String›('foo')") a mnohem více.

test třídy {
statická funkce main() {
var lidé = [
"Elizabeth" => "Programování",
"Joel" => "Design"
];

for (jméno v people.keys()) {
var job = lidé[jméno];
trace('$name dělá $práci!');
}
}
}

hlavní inovace verze 4.0:

  • Nová syntaxe pro specifikaci typu funkce "(name:String, age:Int)->Bool" nebo "(String, Int)->Bool" místo "String->Int->Bool".
  • Syntaxe funkce šipky je "(a, b) -> a + b" místo "funkce (a, b) vrátí a + b".
  • Ochrana proti problémům spojeným s používáním hodnot Null ​​(experimentální funkce, volitelně povolená pro určitá pole, třídy nebo balíčky).
  • Klíčové slovo "final" je pro pole třídy a lokální proměnné, které jsou neměnné. "final" lze také použít k definování funkcí, které zabrání jejich přepsání dědičností, a pro třídy/rozhraní, které nelze zdědit.
  • Podpora Unicode standard pro základní typ "String" na všech cílech kompilace kromě Neko.
  • Vestavěný interpret přepsaný od nuly, který nyní přichází pod názvem Vyhodnoťte. Díky novému interpretu běží skripty a makra mnohem rychleji. Je podporován interaktivní režim ladění.
  • Nový cílový systém pro kompilaci (cíl) hashlink - vysoce výkonný runtime navržený speciálně pro Haxe, který podporuje kompilaci do bajtkódu pro JIT nebo C, má snadnou integraci s C a také přístup k nízkoúrovňovým numerickým typům a ukazatelům.
  • Nový cíl JVM – umožňuje generovat bytekód jvm přeskočením kroku kompilace kódu Java přidáním příznaku „-D jvm“ při cílení v jazyce Java.
  • Schopnost inline nasazení v bodě volání funkcí nebo konstruktorů, i když nejsou jako takové deklarovány.
  • Možnost zařazení statická rozšíření při deklaraci typu (například "enum") pomocí "@:using(path.ToExtension)".
  • Abstraktní typy nyní podporují "set" verzi operátoru "@:op(ab)" pro opětovné načtení výrazů "obj.foo = bar".
  • Syntaxe cyklu "for" nyní podporuje iteraci klíč-hodnota: "for (klíč => hodnota v kolekci) {}".
  • Podpora pro použití xml značek ve výrazech: „var a = ‹hi/›;“. Tato funkce je prozatím dostupná pouze pro analýzu pomocí maker a je ve fázi návrhu.
  • Syntaxe pro volitelná pole v „plném“ zápisu anonymních typů struktur je: „{ var ?f:Int; }" (alternativa ke krátkému "{ ?f:Int }").
  • Výčtové hodnoty mohou být nyní výchozími hodnotami pro argumenty funkcí: "function foo‹T›(option:Option‹T› = None)".
  • Syntaxe "enum abstract Name(BasicType) {}" již nevyžaduje předponu "@:" v "enum".
  • Automatické číslování pro abstraktní výčty:

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

  • Klíčové slovo "exter" již nevyžaduje použití předpony "@:".
  • Odebrána možnost "nářadí Dynamic" pro přístup k polím třídy prostřednictvím řetězců. Dostupné pro externí třídy nebo prostřednictvím implementace abstraktním typem.
  • Přidána syntaxe "A & B" pro průnik typů, která se aktuálně vztahuje pouze na anonymní struktury a omezení parametrů typu. Stará syntaxe omezení byla odstraněna.
  • Vytváření prázdných instancí "Map" je dostupné prostřednictvím syntaxe "var map:Map‹Int, String› = [];" podobně jako pole.
  • Přidána datová struktura „haxe.ds.ReadOnlyArray“.
  • Metadata nyní mohou mít jmenné prostory („@:prefix.name function() {…}“). Podobně s definicemi: “#if (some.flag ... #end”.
  • Nový servisní protokol pro IDE používané v plugin pro VSCode.
  • Aktualizované externí definice (externí) pro webová rozhraní API a přidány chybějící.

Zdroj: opennet.ru

Přidat komentář