Релиз языка программирования Haxe 4.2

Доступен релиз тулкита 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, в котором появились подсказки с генерацией недостающих полей интерфейсов, простых и абстрактных классов, а также методов свойств.

Release. Ссылка here.