Wydanie języka programowania Haxe 4.2

Dostępna jest wersja zestawu narzędzi Haxe 4.2, który zawiera wieloparadygmatowy język programowania wysokiego poziomu o tej samej nazwie z silnym typowaniem, kompilator krzyżowy 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 jest rozpowszechniany na licencji GPLv2, a biblioteka standardowa oraz maszyny wirtualne HashLink i Neko opracowane dla Haxe są objęte licencją na licencji MIT.

Język jest zorientowany na ekspresję i ma mocne pisanie. Obsługiwane są techniki programowania obiektowego, generycznego i funkcjonalnego. Składnia Haxe'a jest zbliżona do ECMAScriptu i rozszerza ją o funkcje takie jak pisanie statyczne, automatyczne wnioskowanie o typie, dopasowywanie wzorców, generyczne, oparte na iteratorach pętle, makra AST, GADT (Uogólnione Algebraiczne Typy Danych), typy abstrakcyjne, struktury anonimowe, uproszczone definicje tablic, wyrażenia do kompilacji warunkowej, dołączanie metadanych do pól, klas i wyrażeń, interpolacja ciągów („Nazywam się $imie”), parametry typu („nowe Main („foo”)') i wiele innych. class Test { funkcja statyczna main() { final People = [ "Elizabeth" => "Programowanie", "Joel" => "Projekt" ]; for (imię => praca w ludziach) { trace('$imię zarabia na życie!'); } } }

Nowe funkcje w wersji 4.2:

  • Deklarowanie zmiennych i funkcji statycznych na poziomie modułu, bez konieczności owijania ich w klasę.
  • Obsługa „klasycznych” klas i funkcji abstrakcyjnych.
  • Natywna implementacja funkcji wariadycznych dla wszystkich platform docelowych (haxe.Rest) i dodanie operatora rozwijania argumentów „f(...array)”.
  • Implementacja pętli zdarzeń dla poszczególnych wątków („sys.thread.Thread.events”).
  • Metadane „@:inheritDoc” do dziedziczenia dokumentacji typu/pola.
  • Obsługa przeciążania metod dla metod zewnętrznych na wszystkich platformach docelowych.
  • Przekazywanie konstruktora leżącego u podstaw jego typu do abstrakcji przy użyciu metadanych „@:forward.new”.
  • Dodano konstruktor „EIs” do „haxe.macro.Expr”.
  • Możliwość stworzenia wariantu typu abstrakcyjnego z „@:forward.variance”.
  • Reprezentacja typu „Dowolny” jako „Dynamiczny” podczas ujednolicania wariacji.
  • Dodano kilka podstawowych typów wyjątków do pakietu „haxe.exceptions”.
  • Obsługa dołączania metadanych podczas deklarowania zmiennych.
  • Funkcja „StringTools.unsafeCharAt” używana do iteracji ciągów.
  • eval (interpreter): Dodano powiązania z „libuv” w pakiecie „eval.luv”.
  • eval: powiązania z natywnymi implementacjami „Int64” i „UInt64” poprzez pakiet „eval.integers”.
  • cs: implementacja gniazda UDP.
  • cs: moduł „cs.Syntax” do bezpośredniego wstawiania kodu C#.
  • jvm: Dodano flagę „-D jvm.dynamic-level=x”, aby kontrolować liczbę generowanych optymalizacji dla kodu dynamicznego. 0 = brak, 1 = optymalizacja odczytu/zapisu pola, 2 = zamknięcie metod w czasie kompilacji.
  • Java, jvm: Obsługa flagi „--java-lib <katalog>”.
  • python: implementacja API wątków.

Ogólne ulepszenia:

  • „wyrażenie to SomeType” nie wymaga zawijania w nawiasy.
  • Zwiększony priorytet dla rozszerzeń typu „@: using”.
  • Umożliwia użycie rozszerzeń typu statycznego poprzez „super”.
  • Możliwość ustawienia metadanych w polach „@:noDoc”.
  • Typ abstrakcyjny „Map” jest przechodni.
  • Obsługa „@:native” w konstruktorach wyliczeniowych.
  • Obsługa „@:using” w deklaracjach typu („typedefs”).
  • Błędy wielowierszowe używają „...” jako przedrostka dla kolejnych wierszy.
  • Wnioskowanie o typach zostało przerobione, struktury anonimowe są lepiej konwertowane na typy jawne i „zamykane” po zakończeniu funkcji.
  • Wnioskowanie o typie funkcji bez argumentów jako „()->…” zamiast „Void->…”.
  • Słowo kluczowe „function” jest dozwolone jako nazwa pakietu.
  • Poprawione wstawianie obiektów.
  • cs: Dodano obsługę .NET 5.0.
  • cpp: Wsparcie dla rodzimych konstruktorów dla klas zewnętrznych.
  • php: Dodano „php.Syntax.customArrayDecl”, aby zadeklarować natywną tablicę.
  • php: Zaktualizowano metody zewnętrzne dla różnych funkcji i klas.
  • php: Zoptymalizowana implementacja anonimowych struktur.
  • hl: Pomiń kompilację, jeśli nie ma żadnych zmian w modułach.
  • lua: Używanie „hx-lua-simdjson” do analizowania jsona.
  • jvm: Zmniejszone obciążenie procesora w implementacji „sys.thread.Lock”.
  • js: Poprawiona kompatybilność z kompilatorem zamknięcia Google.
  • Null Safety: Weź pod uwagę „@:nullSafety(Off)” podczas deklarowania zmiennych: „var @:nullSafety(Off) v”.

Również dodatek do edytora VSCode został zaktualizowany do nowej wersji kompilatora, w której pojawiły się podpowiedzi z generowaniem brakujących pól interfejsów, klas prostych i abstrakcyjnych, a także metod właściwości.

Źródło: opennet.ru

Dodaj komentarz