01.10.2020

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


Доступен релиз инструментария Haxe 4.1, включающего одноимённый мультипарадигменный высокоуровневый язык программирования со строгой типизацией, кросс-компилятор и стандартную библиотеку функций. Проектом поддерживается трансляция в С++, 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.1:

  • Добавлена оптимизация хвостовой рекурсии.
  • Добавлено новое унифицированное API для обработки исключений.
  • Разрешена конструкция «try {} catch(e) {}» как сокращение для «try {} catch(e: haxe.Exception) {}».
  • В интерпретатор eval добавлена поддержка SSL.
  • Целевая платформа JVM больше не считается экспериментальной.
  • Для Language Server Protocol добавлена поддержка функций «Goto Implementation» и «Find references».
  • Улучшено именование временных локальных переменных в сгенерированном коде. Удалены избыточные «return;» в стрелочных функциях без возвращаемого значения.
  • К полям разрешена комбинация доступа (get, default) (только геттер, поведение для присваивания по умолчанию).
  • Разрешены операторы инкремента и декремента для полей абстрактных типов.
  • Улучшено встраивание (inlining) for-циклов с использованием анонимных итераторов.
  • js: Улучшена реализация StringMap для ES5.
  • js: В опцию компилятора «-D js-es=6» добавлена генерация let переменных, улучшена генерация ES6 классов.
  • lua: оптимизирован «StringIterator», улучшена обработка ошибок.
  • php: Оптимизирован «Std.isOfType» для базовых типов.
  • php: Сгенерированные массивы теперь реализуют нативные интерфейсы «Iterator», «IteratorAggregate», «Countable».
  • cs: Добавлены метадаты «@:assemblyMeta» и «@:assemblyStrict».
  • python: в анонимные объекты добавлена реализация «__contains__» и «__getitem__», что позволяет использовать их как словари в сгенерированном коде.
  • jvm: Значительно повышена производительность благодаря новому способу обращения к типизированным функциям и генерации дополнительных интерфейсов в случаях использования объектов как анонимных структур (предотвращен динамический поиск свойств):

Улучшения в стандартной библиотеке:

  • Добавлена функция «Array.contains».
  • Добавлен «Array.keyValueIterator», реализующий key-value итерацию для массивов («for (key => value in array)»).
  • Добавлено ограничение типа «haxe.Constraints.NotVoid».
  • В класс «Lambda» добавлены функции «findIndex» и «foldi».
  • Реализован «array access» (доступ через «arr[i]») и key-value итерация для «haxe.ds.HashMap».
  • jvm: Реализованы JVM-специфичные версии «StringMap», «sys.thread.Lock», «sys.thread.Thread».
  • java/jvm: Использованы нативные реализации «MD5», «SHA-1» и «SHA-256» для модулей «haxe.crypto».
  • macro: Добавлен «haxe.macro.Context.containsDisplayPosition(pos)».
  • nullsafety: режим «Strict» теперь рассматривается как однопоточный; добавлен режим «StrictThreaded».
  • «Std.is» объявлен устаревшим в пользу «Std.isOfType».
  • Добавлено предупреждение при использовании локальных переменных без значений в замыканиях.
  • js: «untyped __js__(code, args)» объявлен устаревшим, взамен предоставляется «js.Syntax.code(code, args)».
  • php/neko: «neko.Web» и «php.Web» объявлены устаревшими и будут позже перенесены в библиотеку «hx4compat».

В следующем релизе планируются:

  • Улучшение пакетного менеджера haxelib.
  • Асинхронное системное API на основе libuv.
  • Сопрограммы (coroutines).
  • Объявление модульных статических функций и переменных без создания классов (уже доступно в ночных сборках).

Источник: https://www.opennet.ru/opennews/art.shtml?num=52974

Добавить комментарий