Haxe 4.2

Опубликовано August@Karro - пн, 02/15/2021 - 02:48
Haxe — это высокоуровневый мультиплатформенный язык программирования с открытым исходным кодом, а также компилятор, с помощью которого можно создавать приложения и генерировать исходный код для разных платформ, сохраняя единую кодовую базу.

Haxe включает в себя функциональность, поддерживаемую на всех платформах, например: числовые типы данных, строки, массивы, а также поддержку некоторых файловых форматов (xml, zip). Haxe также включает в себя поддержку платформо-специфических API для Adobe Flash, C++, PHP и других языков. Компилятор Haxe разделён на один фронтенд и множество бэкэндов. Фронтенд отвечает за парсинг и проверку типов, применение макросов, общую оптимизацию, различные трансформации кода и создания промежуточного представления кода в виде абстрактного синтаксического дерева (АСД). Каждый из бэкендов отвечает за трансляцию этого АСД в исходный код или байткод целевой платформы. 

Оптимизирующий компилятор, также использующий подстановку функций, свёртку констант, удаление мёртвого кода (DCE) для оптимизации производительности скомпилированных программ. Производительность программ, написанных на Haxe, зависит от целевой платформы. 

  • ActionScript 3: программы, скомпилированные на Haxe, обычно быстрее, чем программы, скомпилированные с помощью Flex SDK ActionScript Compiler. Однако, используя ActionScript Compiler 2 (ASC2) и грамотно составленный код, можно добиться сравнимой производительности.
  • JavaScript: программы, скомпилированные на Haxe, сравнимы по скорости с программами, написанными просто на JavaScript. OpenFl — самый распространённый фреймворк, который можно запустить на HTML5/JavaScript, но приложения, построенные с помощью этого фреймворка, на текущий момент страдают от потерь производительности на мобильных устройствах.
  • C++: программы, скомпилированные на Haxe, работают почти также быстро, как и написанные просто на C++, но приложения, построенные с помощью OpenFL, могут страдать от потерь производительности.

Новые возможности в свежей версии:

  • Объявление статичных переменных и функций на уровне модуля, без необходимости оборачивания в класс.
  • Поддержка "классических" абстрактных классов и функций.
  • Нативная реализация вариативных функций для всех целевых платформ (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".

 

Последние материалы