Haxe 4.0 программалоо тилинин чыгарылышы

Жеткиликтүү куралдар топтому чыгаруу Haxe 4.0, ал күчтүү терүү, кайчылаш компилятор жана функциялардын стандарттык китепканасы менен бирдей аталыштагы көп парадигмалуу жогорку деңгээлдеги программалоо тилин камтыйт. Долбоор C++, HashLink/C, JavaScript, C#, Java, PHP, Python жана Lua тилдерине которууну, ошондой эле JVM, HashLink/JIT, Flash жана Neko байт кодуна компиляцияны колдойт, ар бир максаттуу платформанын жергиликтүү мүмкүнчүлүктөрүнө жетүү. Компилятор коду жайылуу GPLv2 лицензиясы жана Haxe үчүн иштелип чыккан стандарттык китепкана жана виртуалдык машина Неко MIT лицензиясы боюнча.

Тил бул экспрессияга багытталган күчтүү терүү менен. Объектке багытталган, жалпы жана функционалдык программалоо концепциялары колдоого алынат.
Haxe синтаксиси ECMAScript жана бейм анын өзгөчөлүктөрү, мисалы, статикалык терүү, автотип чыгаруу, үлгү дал келүү, генериктер, циклдер үчүн итераторго негизделген, AST макролору, GADT (Жалпыланган алгебралык берилиштер түрлөрү), абстракттуу типтер, анонимдүү структуралар, жөнөкөйлөштүрүлгөн массивдин аныктамалары, шарттуу компиляция туюнтмалары, талааларга метаберилиштерди тиркөө , класстар жана туюнтмалар, сап интерполяциясы ('Менин атым $name'), тип параметрлери ("жаңы Main‹String›('foo')") жана дагы көп.

класс сыноо {
статикалык функция main() {
var people = [
"Элизабет" => "Программалоо",
"Джоэл" => "Дизайн"
];

үчүн (адамдар.keys() ичинде аты) {
var job = people[name];
trace('$name жашоо үчүн $иш кылат!');
}
}
}

негизги жаралды версия 4.0:

  • Функциянын түрүн көрсөтүү үчүн жаңы синтаксис "(name:String, age:Int)->Bool" же "String->Int->Bool" ордуна "(String, Int)->Bool".
  • Жебе функциясынын синтаксиси "функция(а, б) a + b кайтаруунун" ордуна "(a, b) -> a + b" болуп саналат.
  • Null маанилерин колдонуу менен байланышкан көйгөйлөрдөн коргоо (эксперименталдык функция, кошумча түрдө белгилүү бир талаалар, класстар же пакеттер үчүн иштетилген).
  • "Акыркы" ачкыч сөзү класс талаалары жана өзгөрүлгүс жергиликтүү өзгөрмөлөр үчүн. "акыркы" функцияларды мурастоо аркылуу жокко чыгарууну болтурбоо үчүн жана тукум кууруу мүмкүн болбогон класстар/интерфейстер үчүн да колдонулушу мүмкүн.
  • колдоо Некодон башка бардык компиляция максаттарында "String" базалык түрү үчүн Юникод стандарты.
  • Камтылган котормочу нөлдөн баштап кайра жазылган, ал азыр аты менен келет Баалоо. Жаңы котормочунун аркасында скрипттер жана макростор тезирээк иштейт. Интерактивдүү мүчүлүштүктөрдү оңдоо режими колдоого алынат.
  • Компиляция үчүн жаңы максаттуу система (максат) Hashlink - Haxe үчүн атайын иштелип чыккан, JIT же С үчүн байткодго компиляцияны колдогон, C менен оңой интеграцияланган иштөө убактысы, ошондой эле төмөнкү деңгээлдеги сандык типтерге жана көрсөткүчтөргө жетүү мүмкүнчүлүгү бар.
  • Жаңы JVM максаттуу - Java-да максаттуу кезде "-D jvm" желегин кошуу менен Java кодун түзүү кадамын өткөрүп жиберүү менен jvm байт кодун түзүүгө мүмкүндүк берет.
  • Функцияларды же конструкторлорду чакыруу пунктунда, алар мындай деп жарыя кылынбаса да, сапта жайгаштыруу мүмкүнчүлүгү.
  • Киргизүү мүмкүнчүлүгү статикалык кеңейтүүлөр түрүн жарыялоодо (мисалы, "enum") "@:using(path.ToExtension)" аркылуу.
  • Абстракттуу түрлөрү эми "obj.foo = bar" туюнтмаларын кайра жүктөө үчүн "@:op(a.b)" операторунун "коюлган" версиясын колдойт.
  • "For" циклинин синтаксиси эми ачкыч-маани итерациясын колдойт: "for (ачкыч => коллекциядагы маани) {}".
  • "var a = ‹hi/›;" деген сөздөрдө xml сыяктуу белгилөө колдонууга колдоо. Азырынча бул функция макростар менен талдоо үчүн гана жеткиликтүү жана долбоорлоо стадиясында.
  • Анонимдүү түзүлүштөрдүн түрлөрүнүн “толук” белгилериндеги кошумча талаалардын синтаксиси: “{ var ?f:Int; }" (кыска "{ ?f:Int }" альтернативасы).
  • Enum маанилери эми функциянын аргументтери үчүн демейки маанилер болушу мүмкүн: "функция foo‹T›(параметр:Опция‹T› = Эч бири)".
  • "enum абстракттуу Name(BasicType) {}" синтаксиси мындан ары "enum" ичиндеги "@:" префиксин талап кылбайт.
  • Абстракттуу эсептер үчүн авто-номерлөө:

    enum абстракт Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enum абстракт Bar(String) {
    var A; // "А"
    var B; // "Б"
    }

  • "extern" ачкыч сөзү мындан ары "@:" префиксин колдонууну талап кылбайт.
  • Опция алынып салынды "жүргүзүү Динамикалык" класс талааларына саптар аркылуу кирүү үчүн. Экстерналдык класстар үчүн же абстракттуу түрү боюнча ишке ашыруу аркылуу жеткиликтүү.
  • Учурда анонимдүү структураларга жана тип параметринин чектөөлөрүнө гана тиешелүү болгон типтердин кесилиши үчүн "A & B" синтаксиси кошулду. Эски чектөө синтаксиси алынып салынды.
  • Бош "Карта" инстанцияларын түзүү "var map:Map‹Int, String› = [];" синтаксиси аркылуу жеткиликтүү. массивге окшош.
  • Кошулган маалымат структурасы "haxe.ds.ReadOnlyArray".
  • Метаберилиштер эми ат мейкиндигине ээ болушу мүмкүн (“@:prefix.name function() {…}”). Окшош эле аныктамалар менен: "#if (some.flag ... #end".
  • колдонулган IDE үчүн жаңы кызмат протоколу VSCode үчүн плагин.
  • Web API'лер үчүн тышкы аныктамалар (extern) жаңыртылган жана жетишпегендер кошулган.

Source: opennet.ru

Комментарий кошуу