Рэліз мовы праграмавання Haxe 4.2

Даступны рэліз тулкіта 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

Дадаць каментар