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

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: Значительно повышена производительность благодаря новому способу обращения к типизированным функциям и генерации дополнительных интерфейсов в случаях использования объектов как анонимных структур (предотвращен динамический поиск свойств):
Релиз языка программирования Haxe 4.1

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

  • Добавлена функция “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.
  • Сопрограммы (coroutine).
  • Объявление модульных статических функций и переменных без создания классов (уже доступно в ночных сборках).
Publisher
Оцените автора
AsaDagar
Добавить комментарий