Доступен релиз тулкита Haxe 4.2, включающего одноимённый мультипарадигменный высокоуровневый язык программирования со строгой типизацией, кросс-компилятор и стандартную библиотеку функций. Проектом поддерживается трансляция в С++, HashLink/C, JavaScript, C#, Java, PHP, Python и Lua, а также компиляция в байт-код JVM, HashLink/JIT, Flash и Neko, с доступом к родным возможностям каждой целевой платформы. Код компилятора распространяется под лицензией GPLv2, а стандартной библиотеки и развиваемых для Haxe виртуальных машин HashLink и [[https://github.com/HaxeFoundation/nekoNeko]] под лицензией 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, в котором появились подсказки с генерацией недостающих полей интерфейсов, простых и абстрактных классов, а также методов свойств.