Рэліз мовы праграмавання 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 маеш $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".

У наступным рэлізе плануюцца:

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

Крыніца: opennet.ru

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