Do dyspozycji wydanie zestawu narzędzi Hax 4.0, 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 maszynę wirtualną opracowaną dla Haxe Neko na licencji MIT.
Język jest zorientowany na ekspresję z mocnym pisaniem. Obsługiwane są koncepcje programowania obiektowego, ogólnego 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ę $name”), parametry typu („nowy Main‹String›('foo')”) oraz wiele więcej.
klasa Test {
funkcja statyczna main() {
var ludzie = [
"Elizabeth" => "Programowanie",
„Joel” => „Projekt”
];
for (nazwa w People.keys()) {
var praca = ludzie[imię];
trace('$name zarabia na życie!');
}
}
}
Nowa składnia do określania typu funkcji „(name:String, age:Int)->Bool” lub „(String, Int)->Bool” zamiast „String->Int->Bool”.
Składnia funkcji strzałkowej to „(a, b) -> a + b” zamiast „funkcja (a, b) zwraca a + b”.
Ochrona przed problemami związanymi z użyciem wartości Null (funkcja eksperymentalna, opcjonalnie włączana dla niektórych pól, klas lub pakietów).
Słowo kluczowe „final” dotyczy pól klas i zmiennych lokalnych, które są niezmienne. „końcowego” można również użyć do zdefiniowania funkcji, aby zapobiec ich zastąpieniu przez dziedziczenie oraz w przypadku klas/interfejsów, których nie można dziedziczyć.
Wsparcie Standard Unicode dla typu podstawowego „String” we wszystkich celach kompilacji z wyjątkiem Neko.
Wbudowany interpreter przepisany od podstaw, który teraz występuje pod nazwą Ewaluacja. Dzięki nowemu interpreterowi skrypty i makra działają znacznie szybciej. Obsługiwany jest interaktywny tryb debugowania.
Nowy system docelowy do kompilacji (target) Hashlink - wysokowydajne środowisko wykonawcze zaprojektowane specjalnie dla Haxe, obsługujące kompilację do kodu bajtowego dla JIT lub C, charakteryzuje się łatwą integracją z C, a także dostępem do niskopoziomowych typów numerycznych i wskaźników.
Nowy cel JVM — umożliwia wygenerowanie kodu bajtowego jvm poprzez pominięcie kroku kompilacji kodu Java poprzez dodanie flagi „-D jvm” podczas kierowania w Javie.
Możliwość wdrażania wbudowanego w momencie wywoływania funkcji lub konstruktorów, nawet jeśli nie są one zadeklarowane jako takie.
Możliwość włączenia rozszerzenia statyczne podczas deklarowania typu (takiego jak „enum”) przy użyciu „@: using(path.ToExtension)”.
Typy abstrakcyjne obsługują teraz „ustawioną” wersję operatora „@:op(ab)” w celu ponownego załadowania wyrażeń „obj.foo = bar”.
Składnia pętli „for” obsługuje teraz iterację klucz-wartość: „for (klucz => wartość w kolekcji) {}”.
Obsługa używania znaczników przypominających XML w wyrażeniach: „var a = ‹hi/›;”. Na razie ta funkcja jest dostępna tylko do analizowania makr i jest na etapie projektowania.
Składnia pól opcjonalnych w „pełnej” notacji anonimowych typów struktur jest następująca: „{ var ?f:Int; }” (alternatywa dla krótkiego „{?f:Int }”).
Wartości wyliczeniowe mogą teraz być wartościami domyślnymi dla argumentów funkcji: „funkcja foo‹T›(opcja:Opcja‹T› = Brak)”.
Składnia „enum streszczenie Name(BasicType) {}” nie wymaga już przedrostka „@:” w „enum”.
Automatyczne numerowanie dla wyliczeń abstrakcyjnych:
Słowo kluczowe „extern” nie wymaga już użycia przedrostka „@:”.
Usunięto opcję „narzędzia Dynamic”, aby uzyskać dostęp do pól klas za pomocą ciągów znaków. Dostępne dla klas zewnętrznych lub poprzez implementację typu abstrakcyjnego.
Dodano składnię „A i B” dla przecięcia typów, która obecnie ma zastosowanie tylko do struktur anonimowych i ograniczeń parametrów typu. Stara składnia ograniczenia została usunięta.
Tworzenie pustych instancji „Map” jest możliwe poprzez składnię „var map:Map‹Int, String› = [];” podobny do tablicy.
Dodano strukturę danych „haxe.ds.ReadOnlyArray”.
Metadane mogą teraz mieć przestrzenie nazw („@:prefix.namefunction() {…}”). Podobnie z definicjami: „#if (jakaś.flaga... #koniec”.