Wydanie języka programowania Haxe 4.1

Do dyspozycji wydanie zestawu narzędzi Hax 4.1, który obejmuje wieloparadygmatowy język programowania wysokiego poziomu o tej samej nazwie z silnym typowaniem, kompilatorem krzyżowym i standardową biblioteką funkcji. Projekt obsługuje tłumaczenie do C++, HashLink/C, JavaScript, C#, Java, PHP, Python i Lua, a także kompilację do kodu bajtowego JVM, HashLink/JIT, Flash i Neko, z dostępem do natywnych możliwości każdej platformy docelowej. Kod kompilatora dystrybuowane przez na licencji GPLv2 oraz standardową bibliotekę i maszyny wirtualne opracowane dla Haxe HashLink и Neko na licencji MIT.

Język jest zorientowany na ekspresję z mocnym pisaniem. Obsługiwane są techniki programowania obiektowego, generycznego i funkcjonalnego. Składnia Haxe jest zbliżona do ECMAScript i rozszerza się jego funkcje, takie jak pisanie statyczne, wnioskowanie o autotypie, dopasowywanie wzorców, generyczne, oparte na iteratorach pętle for, makra AST, GADT (uogólnione typy danych algebraicznych), typy abstrakcyjne, struktury anonimowe, uproszczone definicje tablic, wyrażenia kompilacji warunkowej, dołączanie metadanych do pól , klasy i wyrażenia, interpolacja ciągów („'Nazywam się $imię'”), parametry typu („nowy Main („foo”)”) i wiele więcej.

klasa Test {
funkcja statyczna main() {
ostateczni ludzie = [
"Elizabeth" => "Programowanie",
„Joel” => „Projekt”
];

dla (imię => praca w ludziach) {
trace('$name zarabia na życie!');
}
}
}

Nowe funkcje w wersji 4.1:

  • Dodano optymalizację rekurencji ogona.
  • Dodano nowy, ujednolicony interfejs API do obsługi wyjątków.
  • Konstrukcja „try {} catch(e) {}” jest dozwolona jako skrót dla „try {} catch(e: haxe.Exception) {}”.
  • Dodano obsługę protokołu SSL do interpretera eval.
  • Docelowa maszyna JVM nie jest już uważana za eksperymentalną.
  • W przypadku protokołu Language Server Protocol dodano obsługę funkcji „Goto Implementation” i „Find references”.
  • Poprawione nazewnictwo tymczasowych zmiennych lokalnych w wygenerowanym kodzie. Usunięto zbędne „powrót”; w funkcjach strzałkowych bez wartości zwracanej.
  • Kombinacje dostępu (get, domyślne) są dozwolone w polach (tylko getter, domyślne zachowanie przypisania).
  • Zezwalaj na operatory zwiększania i zmniejszania dla pól typy abstrakcyjne.
  • Ulepszone wstawianie pętli for przy użyciu anonimowych iteratorów.
  • js: Ulepszona implementacja StringMap dla ES5.
  • js: Do opcji kompilatora „-D js-es=6” dodano generowanie zmiennych let, poprawiono generowanie klas ES6.
  • lua: Zoptymalizowano „StringIterator”, poprawiono obsługę błędów.
  • php: zoptymalizowany „Std.isOfType” dla typów podstawowych.
  • php: Wygenerowane tablice implementują teraz natywne interfejsy „Iterator”, „IteratorAggregate”, „Countable”.
  • cs: Dodano metadane „@:assemblyMeta” i „@:assemblyStrict”.
  • python: dodano implementację „__contains__” do anonimowych obiektów
    i „__getitem__”, co pozwala na użycie ich jako słowników w wygenerowanym kodzie.

  • jvm: Znacząco poprawiona wydajność dzięki nowemu sposobowi dostępu do funkcji typowanych i generowaniu dodatkowych interfejsów w przypadkach, gdy obiekty są używane jako struktury anonimowe (brak możliwości dynamicznego wyszukiwania właściwości):
    Wydanie języka programowania Haxe 4.1

Ulepszenia w bibliotece standardowej:

  • Dodano funkcję „Array.contains”.
  • Dodano „Array.keyValueIterator”, który implementuje iterację klucz-wartość dla tablic („for (klucz => wartość w tablicy)”).
  • Dodano typ ograniczenia „haxe.Constraints.NotVoid”.
  • Do klasy „Lambda” dodano funkcje „findIndex” i „foldi”.
  • Zaimplementowano „dostęp do tablicy” (dostęp przez „arr[i]”) i iterację klucz-wartość dla „haxe.ds.HashMap”.
  • jvm: Zaimplementowano specyficzne dla JVM wersje „StringMap”, „sys.thread.Lock”, „sys.thread.Thread”.
  • java/jvm: Używane natywne implementacje „MD5”, „SHA-1” i „SHA-256” dla modułów „haxe.crypto”.
  • makro: Dodano „haxe.macro.Context.containsDisplayPosition(pos)”.
  • nullsafety: Tryb „Ścisły” jest teraz traktowany jako tryb jednowątkowy; dodano tryb „StrictThreaded”.
  • „Std.is” zostało wycofane na rzecz „Std.isOfType”.
  • Dodano ostrzeżenie podczas używania zmiennych lokalnych bez wartości w zamknięciach.
  • js: „bez typu __js__(kod, argumenty)” jest przestarzałe i zastąpione przez „js.Syntax.code(kod, argumenty)”.
  • php/neko: „neko.Web” i „php.Web” są przestarzałe i zostaną później przeniesione do biblioteki „hx4compat”.

W następnym wydaniu zaplanowany:

  • Ulepszenia menedżera pakietów haxelib.
  • System asynchroniczny oparty na API libacja.
  • Współprogramy.
  • Deklarowanie modułowych funkcji statycznych i zmiennych bez tworzenia klas (dostępne już w kompilacjach nocnych).

Źródło: opennet.ru

Dodaj komentarz