Доступний реліз тулкіта Haxe 4.2, що включає однойменну мультипарадигменну високорівневу мову програмування зі строгою типізацією, крос-компілятор та стандартну бібліотеку функцій. Проект підтримує трансляцію в С++, HashLink/C, JavaScript, C#, Java, PHP, Python і Lua, а також компіляцію в байт-код JVM, HashLink/JIT, Flash і Neko, з доступом до рідних можливостей кожної цільової платформи. Код компілятора поширюється під ліцензією GPLv2, а стандартної бібліотеки і віртуальних машин HashLink і Neko, що розвиваються для Haxe, під ліцензією MIT.
Мова є expression-орієнтованою зі строгою типізацією. Підтримуються прийоми об'єктно-орієнтованого, узагальненого та функціонального програмування. Синтаксис Haxe близький до ECMAScript і розширює його такими можливостями як статична типізація, автовиведення типів, зіставлення шаблонів, дженерики, заснований на ітераторах цикл «for», AST-макроси, GADT (Generalized Algebraic Data Types), абстрактні типи, анонімні структури масивів, вирази для умовної компіляції, прикріплення метаданих до полів, класів та виразів, інтерполяція рядків ('My name is $name'), параметри типів ('new Main(«foo»)') та багатьох інших. class Test { static function main() { final people = [ "Elizabeth" => "Programming", "Joel" => "Design" ]; for (name => job in people) { trace('$name does $job for a living!'); } } }
Нові можливості версії 4.2:
- Оголошення статичних змінних та функцій на рівні модуля, без необхідності обертання до класу.
- Підтримка «класичних» абстрактних класів та функцій.
- Нативна реалізація варіативних функцій всім цільових платформ (haxe.Rest) і додавання оператора розгортання аргументів «f(…array)».
- Реалізація циклу подій (event loop) окремих потоків («sys.thread.Thread.events»).
- Метадані @: inheritDoc для успадкування документації типів/полів.
- Підтримує навантаження методів для зовнішніх методів на всіх цільових платформах.
- Пересилання до абстракту конструктора, що лежить в основі його типу за допомогою метаданих «@:forward.new».
- У «haxe.macro.Expr» додано конструктор «EIs».
- Можливість зробити абстрактний тип варіантним із «@:forward.variance».
- Подання типу Any як Dynamic при уніфікації варіантності.
- У пакеті «haxe.exceptions» додано деякі базові типи винятків.
- Підтримка прикріплення метаданих під час оголошення змінних.
- Функція "StringTools.unsafeCharAt", що використовується при рядковій ітерації.
- eval (інтерпретатор): у пакеті "eval.luv" додані прив'язки до "libuv".
- eval: прив'язки до рідних реалізацій «Int64» та «UInt64» через пакет «eval.integers».
- cs: реалізація UDP сокету.
- cs: модуль "cs.Syntax" для inline-вставок C#-коду.
- jvm: Доданий прапор «-D jvm.dynamic-level=x» для контролю кількості оптимізацій, що генеруються, у динамічного коду. 0 = відсутні, 1 = оптимізація читання/запису полів, 2 = замикання методів на етапі компіляції.
- java, jvm: Підтримка прапора - java-lib .
- python: реалізація threading API.
Загальні покращення:
- "expr is SomeType" не вимагає обертання в дужки.
- Збільшено пріоритет у розширень типів @: using .
- Дозволено використання статичних розширень типу через "super".
- Можливість задавати метадані полям @: noDoc.
- Абстрактний тип Map зроблений транзитивним.
- Підтримка @: native на конструкторах перерахувань.
- Підтримка @: using на оголошеннях типу (typedefs).
- Мультистрокові помилки використовують «…» як префікс для наступних рядків.
- Перероблено висновок типів, анонімні структури краще перетворюються на явні типи і «закриваються» після завершення функції.
- Висновок типу функцій без аргументів як «()->…» замість «Void->…».
- Ключове слово "function" дозволено як ім'я пакета.
- Покращено вбудовування (inlining) об'єктів.
- cs: Додана підтримка .NET 5.0.
- cpp: Підтримка нативних конструкторів зовнішніх класів.
- php: Доданий "php.Syntax.customArrayDecl" для оголошення нативного масиву.
- php: Оновлені зовнішні методи (externs) для різних функцій та класів.
- php: Оптимізовано реалізацію анонімних структур.
- hl: Пропуск компіляції за відсутності змін у модулях.
- lua: Використання "hx-lua-simdjson" для парсингу json.
- jvm: Знижено навантаження на CPU у реалізації «sys.thread.Lock».
- js: Покращена сумісність із Google Closure Compiler.
- Null Safety: Облік "@:nullSafety(Off)" при оголошенні змінних: "var @:nullSafety(Off) v".
Також до нової версій компілятора оновлено доповнення до редактора VSCode, в якому з'явилися підказки з генерацією полів інтерфейсів, простих і абстрактних класів, а також методів властивостей.
Джерело: opennet.ru