Релиз языка программирования Haxe 4.2
Доступен релиз тулкита Haxe 4.2, включающего одноимённый мультипарадигменный высокоуровневый язык программирования со строгой типизацией, кросс-компилятор и стандартную библиотеку функций. Проектом поддерживается трансляция в С++, HashLink/C, JavaScript, C#, Java, PHP, Python и Lua, а также компиляция в байт-код JVM, HashLink/JIT, Flash и Neko, с доступом к родным возможностям каждой целевой платформы. Код компилятора распространяется под лицензией GPLv2, а стандартной библиотеки и развиваемых для Haxe виртуальных машин HashLink и Neko под лицензией MIT.
Язык является expression-ориентированным со строгой типизацией. Поддерживаются приёмы объектно-ориентированного, обобщённого и функционального программирования. Синтаксис Haxe близок к ECMAScript и расширяет его такими возможностями как статическая типизация, автовывод типов, сопоставление шаблонов, дженерики, основанный на итераторах цикл «for», AST-макросы, GADT (Generalized Algebraic Data Types), абстрактные типы, анонимные структуры, упрощённые определения массивов, выражения для условной компиляции, прикрепление метаданных к полям, классам и выражениям, интерполяция строк ('My name is $name'), параметры типов ('new Main‹String›(«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, в котором появились подсказки с генерацией недостающих полей интерфейсов, простых и абстрактных классов, а также методов свойств.
Источник: http://www.opennet.ru/opennews/art.shtml? num=54580
© OpenNet