Даступны рэліз тулкіта Haxe 4.2, які ўключае аднайменную мультипарадигменный высокаўзроўневую мову праграмавання са строгай тыпізацыяй, крос-кампілятар і стандартную бібліятэку функцый. Праектам падтрымліваецца трансляцыя ў З++, 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»)') і шматлікім іншым. 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