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

Доступний реліз тулкіта Haxe 4.2, що включає однойменну мультипарадигменну високорівневу мову програмування зі строгою типізацією, крос-компілятор та стандартну бібліотеку функцій. Проект підтримує трансляцію в С++, HashLink/C, JavaScript, C#, Java, PHP, Python і Lua, а також компіляцію в байт-код JVM, HashLink/JIT, Flash і Neko, з доступом до рідних можливостей кожної цільової платформи. Код компілятора поширюється під ліцензією GPLv2, а стандартної бібліотеки і віртуальних машин HashLink і Neko, що розвиваються для Haxe, під ліцензією 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, в якому з'явилися підказки з генерацією полів інтерфейсів, простих і абстрактних класів, а також методів властивостей.

Джерело: opennet.ru

Додати коментар або відгук