Wydanie języka programowania Haxe 4.0

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!');
}
}
}

Głównym innowacje wersja 4.0:

  • 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:

    wyliczenie streszczenie Foo(Int) {
    zmienna A; // 0
    zmienna B; // 1
    }
    wyliczenie streszczenie Bar(String) {
    zmienna A; // "A"
    zmienna B; // "B"
    }

  • 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”.
  • Nowy protokół usługowy dla IDE używanych w wtyczka do VSCode.
  • Zaktualizowano definicje zewnętrzne (extern) dla Web API i dodano brakujące.

Źródło: opennet.ru

Dodaj komentarz