Реліз мови програмування 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 («foo»)') та багато іншого.

клас Тест {
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".

У наступному релізі планується:

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

Джерело: opennet.ru

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