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

даступны рэліз тулкіта Haxe 4.0, Які ўключае аднайменны мультипарадигменный высокаўзроўневую мову праграмавання са строгай тыпізацыяй, крос-кампілятар і стандартную бібліятэку функцый. Праектам падтрымліваецца трансляцыя ў З++, HashLink/C, JavaScript, C#, Java, PHP, Python і Lua, а таксама кампіляцыя ў байт-код JVM, HashLink/JIT, Flash і Neko, з доступам да родных магчымасцяў кожнай мэтавай платформы. Код кампілятара распаўсюджваецца пад ліцэнзіяй GPLv2, а стандартнай бібліятэкі і якая развіваецца для Haxe віртуальнай машыны Neko пад ліцэнзіяй MIT.

Мова з'яўляецца expression-арыентаваным са строгай тыпізацыяй. Падтрымліваюцца парыёмы аб'ектна-арыентаванага, абагульненага і функцыянальнага праграмавання.
Сінтаксіс Haxe блізкі да ECMAScript і пашырае яго такімі магчымасцямі, як статычная тыпізацыя, аўтавывад тыпаў, супастаўленне шаблонаў, джэнерыкі, заснаваны на ітэратарах цыкл "for", AST-макрасы, GADT (Generalized Algebraic Data Types), абстрактныя тыпы, ананімныя структуры, спрошчаныя вызначэння масіваў, выразы для ўмоўнай кампізы , прымацаванне метададзеных да палёў, класамі і выразам, інтэрпаляцыя радкоў ('My name is $name'), параметры тыпаў («new Main‹String›('foo')») і шмат іншага.

клас Тэст {
static function main() {
var people = [
"Elizabeth" => "Programming",
"Joel" => "Design"
];

for (name in people.keys()) {
var job = people[name];
trace('$name маеш $job for a living!');
}
}
}

Асноўныя новаўвядзенні версіі 4.0:

  • Новы сінтаксіс для ўказання тыпу функцый "(name:String, age:Int)->Bool" або "(String, Int)->Bool" замест "String->Int->Bool".
  • Сінтаксіс стрелочных функцый "(a, b) -> a + b" замест "function(a, b) return a + b".
  • Абарона ад праблем, злучаных з выкарыстаннем значэнняў Null (эксперыментальная функцыя, уключаецца пры жаданні для вызначаных палёў, класаў або пакетаў).
  • Ключавое слова "final" для палёў класаў і лакальных зменных, якія з'яўляюцца імутабельнымі. "final" таксама можна выкарыстоўваць для вызначэння функцый каб забараніць іх перавызначэнне пры ўспадкоўванні і для класаў / інтэрфейсаў, якія не могуць быць атрыманы ў спадчыну.
  • Падтрымка стандарту Unicode для базавага тыпу "String" на ўсіх мэт кампіляцыі за выключэннем Neko.
  • Перапісаны з нуля ўбудаваны інтэрпрэтатар, які зараз пастаўляецца пад імем Eval. Дзякуючы новаму інтэрпрэтатару скрыпты і макрасы выконваюцца нашмат хутчэй. Падтрымліваецца рэжым інтэрактыўнай адладкі.
  • Новая мэтавая сістэма для кампіляцыі (target) Hashlink — высокапрадукцыйны runtime, распрацаваны спецыяльна для Haxe, які падтрымлівае кампіляцыю ў байткод для JIT або C, мае простую інтэграцыю з C, а таксама доступ да нізкаўзроўневых лікавых тыпаў і паказальнікам.
  • Новая мэтавая сістэма JVM - дазваляе генераваць байткод jvm, прапускаючы этап кампіляцыі Java-кода праз даданне сцяга "-D jvm" пры таргетавання ў Java.
  • Магчымасць inline-разгортвання на месцы выкліку функцый ці канструктараў, нават калі яны не абвешчаныя такімі.
  • Магчымасць уключэння статычных пашырэнняў пры аб'яве тыпу (напрыклад "enum") з дапамогай "@:using(path.ToExtension)".
  • Абстрактныя тыпы зараз падтрымліваюць "set"-версію аператара "@:op(a.b)" для перазагрузкі выразаў "obj.foo = bar".
  • Сінтаксіс цыклу "for" зараз падтрымлівае ітэрацыю "ключ-значэнне": "for (key => value in collection) {}".
  • Падтрымка выкарыстання xml-like разметкі ў выразах: "var a = ‹hi/›;". Пакуль гэтая магчымасць даступная толькі для парсінгу макрасамі і знаходзіцца на этапе дызайну.
  • Сінтаксіс для апцыянальных палёў у «поўнай» натацыі тыпаў ананімных структур: «{ var ?f:Int; }» (альтэрнатыва «кароткай» «{ ?f:Int }»).
  • Значэнні пералічэнняў зараз могуць быць значэннямі па змаўчанні для аргументаў функцыі: "function foo‹T›(option:Option‹T› = None)".
  • Сінтаксіс "enum abstract Name(BasicType) {}" больш не патрабуе прэфікса "@:" у "enum".
  • Аўта-нумарацыя для абстрактных пералічэнняў:

    enum abstract Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enum abstract Bar(String) {
    var A; // "A"
    var B; // "B"
    }

  • Ключавое слова "extern" больш не патрабуе выкарыстанне прэфікса "@:".
  • Выдалена магчымасцьпрылад Dynamic» для доступу да палёў класа праз радкі. Даступна для extern-класаў або праз рэалізацыю абстрактным тыпам.
  • Дададзены сінтаксіс "A & B" для перасячэння тыпаў, які на дадзены момант ужываецца толькі для ананімных структур і абмежаванняў параметраў тыпу. Стары сінтаксіс абмежаванняў выдалены.
  • Стварэнне пустых асобнікаў "Map" даступна праз сінтаксіс "var map:Map‹Int, String› = [];" па аналогіі з масівам.
  • Дададзена структура дадзеных "haxe.ds.ReadOnlyArray".
  • Метададзеныя зараз могуць мець прасторы імёнаў («@:prefix.name function() {…}»). Аналагічна з азначэннямі: "#if (some.flag … #end").
  • Новы пратакол сэрвісаў для IDE, якія выкарыстоўваюцца ў убудове да VSCode.
  • Абноўлены знешнія азначэнні (extern) для Web APIs і дададзены адсутныя.

Крыніца: opennet.ru

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