Релиз языка программирования 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).
- Объявление модульных статических функций и переменных без создания классов (уже доступно в ночных сборках).
Источник: http://www.opennet.ru/opennews/art.shtml? num=52974
© OpenNet