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