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 адамдар = [
"Элизабет" => "Бағдарламалау",
"Джоэл" => "Дизайн"
];

үшін (ins.keys() ішіндегі атау) {
var job = адамдар[аты];
trace('$name өмір сүру үшін $жұмыс жасайды!');
}
}
}

басты инновациялар 4.0 нұсқасы:

  • Функция түрін көрсетуге арналған жаңа синтаксис "(name:String, age:Int)->Bool" немесе "String->Int->Bool" орнына "(String, Int)->Bool".
  • Көрсеткі функциясының синтаксисі "функция(a, b) қайтару a + b" орнына "(a, b) -> a + b" болып табылады.
  • Null мәндерін пайдаланумен байланысты мәселелерден қорғау (белгілі бір өрістер, сыныптар немесе бумалар үшін қосымша қосылған эксперименттік мүмкіндік).
  • «Қорытынды» кілт сөзі сынып өрістері мен өзгермейтін жергілікті айнымалыларға арналған. "соңғы" функциясын мұраға алу арқылы қайта анықтауды болдырмау үшін функцияларды анықтау үшін және мұраға алынбайтын сыныптар/интерфейстер үшін де пайдалануға болады.
  • қолдау Neko-дан басқа барлық компиляция мақсаттарындағы "String" базалық түріне арналған Юникод стандарты.
  • Кірістірілген аудармашы нөлден қайта жазылған, ол қазір атауымен келеді Бағалау. Жаңа аудармашының арқасында сценарийлер мен макростар әлдеқайда жылдам жұмыс істейді. Интерактивті жөндеу режиміне қолдау көрсетіледі.
  • Құрастырудың жаңа мақсатты жүйесі (мақсатты) Хэшлинк - JIT немесе C үшін байт-кодқа компиляцияны қолдайтын, Haxe үшін арнайы әзірленген, жоғары өнімді жұмыс уақыты C тілімен оңай интеграцияланады, сонымен қатар төменгі деңгейлі сандық типтер мен көрсеткіштерге қол жетімді.
  • Жаңа JVM нысанасы - Java тілінде таргеттеу кезінде "-D jvm" жалаушасын қосу арқылы Java кодын құрастыру қадамын өткізіп жіберу арқылы jvm байт кодын жасауға мүмкіндік береді.
  • Функцияларды немесе конструкторларды шақыру нүктесінде кірістірілген орналастыру мүмкіндігі, тіпті олар осылай жарияланбаса да.
  • Қосылу мүмкіндігі статикалық кеңейтімдер «@:using(path.ToExtension)» арқылы түрді («enum» сияқты) жариялағанда.
  • Реферат түрлері енді "obj.foo = bar" өрнектерін қайта жүктеу үшін "@:op(ab)" операторының "жиынтық" нұсқасын қолдайды.
  • "For" цикл синтаксисі енді кілт-мәннің иерациясын қолдайды: "for (key => коллекциядағы мән) {}".
  • «var a = ‹hi/›;» өрнектерде xml тәрізді белгілеуді қолдануды қолдау. Әзірге бұл мүмкіндік макростармен талдау үшін ғана қолжетімді және жобалау сатысында.
  • Анонимдік құрылым түрлерінің «толық» белгілеуіндегі қосымша өрістерге арналған синтаксис: «{ var ?f:Int; }" (қысқа "{ ?f:Int }" балама).
  • Enum мәндері енді функция аргументтері үшін әдепкі мәндер болуы мүмкін: "функция foo‹T›(опция:Параметр‹T› = Ешбір)".
  • "enum абстракт атауы(BasicType) {}" синтаксисі енді "enum" ішіндегі "@:" префиксін қажет етпейді.
  • Абстрактілі сандар үшін автоматты нөмірлеу:

    enum абстракт Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enum абстракт Жол (жол) {
    var A; // «А»
    var B; // «Б»
    }

  • "extern" кілт сөзі енді "@:" префиксін пайдалануды қажет етпейді.
  • опциясы жойылды.іске асырады Жолдар арқылы сынып өрістеріне қол жеткізу үшін динамикалық». Экстерналдық сыныптар үшін немесе дерексіз түрі бойынша жүзеге асыру арқылы қол жетімді.
  • Қазіргі уақытта тек анонимді құрылымдарға және түр параметрінің шектеулеріне қолданылатын түр қиылысына арналған "A & B" синтаксисі қосылды. Ескі шектеу синтаксисі жойылды.
  • Бос "Карта" даналарын жасау "var map:Map‹Int, String› = [];" синтаксисі арқылы қолжетімді. массивке ұқсас.
  • Қосылған деректер құрылымы "haxe.ds.ReadOnlyArray".
  • Енді метадеректерде аттар кеңістігі болуы мүмкін («@:prefix.name function() {…}»). Анықтамалармен бірдей: «#if (кейбір.жалау ... #end».
  • Қолданылатын IDE үшін жаңа қызмет протоколы VSCode плагині.
  • Веб API интерфейстері үшін жаңартылған сыртқы анықтамалар (extern) және жетіспейтіндері қосылды.

Ақпарат көзі: opennet.ru

пікір қалдыру