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.
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):
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”.