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 (ընդհանուրացված հանրահաշվական տվյալների տեսակները), վերացական տեսակները, անանուն կառուցվածքները, զանգվածների պարզեցված սահմանումները, պայմանական կոմպիլյացիայի արտահայտությունները, մետատվյալների կցումը դաշտերին: , դասեր և արտահայտություններ, տողերի ինտերպոլացիա ('My name is $name'), տիպի պարամետրեր ("new Main‹String›('foo')") և շատ ավելի.

դասի թեստ {
ստատիկ ֆունկցիա main() {
var people = [
"Elizabeth" => "Ծրագրավորում",
«Ջոել» => «Դիզայն»
];

համար (անունը people.keys()) {
var job = մարդիկ[անուն];
trace ('$name-ը $աշխատանք է անում');
}
}
}

Հիմնական նորամուծություններ տարբերակ 4.0:

  • Նոր շարահյուսություն՝ «String->Int->Bool»-ի փոխարեն «(name:String, age:Int)->Bool» կամ «(String, Int)->Bool» ֆունկցիայի տեսակը նշելու համար:
  • Arrow ֆունկցիայի շարահյուսությունը «(a, b) -> a + b» է «function(a, b) return a + b»-ի փոխարեն:
  • Պաշտպանություն Null արժեքների օգտագործման հետ կապված խնդիրներից (փորձարարական հատկանիշ, որը կամայականորեն միացված է որոշակի դաշտերի, դասերի կամ փաթեթների համար):
  • «Վերջնական» բանալի բառը դասի դաշտերի և տեղական փոփոխականների համար է, որոնք անփոփոխ են: «վերջնական»-ը կարող է օգտագործվել նաև գործառույթներ սահմանելու համար, որոնք կանխելու են դրանք ժառանգականության կողմից վերագրվելը և դասերի/ինտերֆեյսների համար, որոնք չեն կարող ժառանգվել:
  • Աջակցություն Unicode ստանդարտ բազային տիպի «String» բոլոր կոմպիլացիոն թիրախների համար, բացառությամբ Neko-ի:
  • Ներկառուցված թարգմանիչը վերագրված է զրոյից, որն այժմ գալիս է անվան տակ Էվալ. Նոր թարգմանչի շնորհիվ սկրիպտներն ու մակրոները շատ ավելի արագ են աշխատում: Աջակցվում է վրիպազերծման ինտերակտիվ ռեժիմը:
  • Կազմման նոր թիրախային համակարգ (թիրախ) Hashlink - բարձր արդյունավետության գործարկման ժամանակ, որը նախատեսված է հատուկ Haxe-ի համար, որն աջակցում է JIT-ի կամ C-ի համար բայթկոդի կազմմանը, ունի հեշտ ինտեգրում C-ի հետ, ինչպես նաև հասանելի է ցածր մակարդակի թվային տեսակներին և ցուցիչներին:
  • Նոր JVM թիրախ - թույլ է տալիս ստեղծել jvm բայթկոդ՝ բաց թողնելով Java կոդի կազմման քայլը՝ ավելացնելով «-D jvm» դրոշը Java-ում թիրախավորելիս:
  • Գործառույթների կամ կոնստրուկտորների կանչման կետում ներգծային տեղակայման հնարավորություն, նույնիսկ եթե դրանք որպես այդպիսին հայտարարագրված չեն:
  • Ներառման հնարավորությունը ստատիկ ընդարձակումներ երբ հայտարարում եք տեսակ (օրինակ՝ «enum»)՝ օգտագործելով «@:using(path.ToExtension)»:
  • Աբստրակտ տեսակներն այժմ աջակցում են «@:op(a.b)» օպերատորի «set» տարբերակը՝ «obj.foo = bar» արտահայտությունները վերաբեռնելու համար։
  • «for» հանգույցի շարահյուսությունն այժմ աջակցում է բանալի-արժեքի կրկնություն՝ «for (key => արժեքը հավաքածուում) {}»:
  • «var a = ‹hi/›;» արտահայտություններում xml-ի նման նշում օգտագործելու աջակցություն: Առայժմ այս գործառույթը հասանելի է միայն մակրոների հետ վերլուծության համար և գտնվում է նախագծման փուլում:
  • Անանուն կառուցվածքի տեսակների «լրիվ» նշումով կամընտիր դաշտերի շարահյուսությունը հետևյալն է. «{ var ?f:Int; }» (կարճ «{ ?f:Int }»-ի այլընտրանք):
  • Enum արժեքներն այժմ կարող են լինել լռելյայն արժեքներ ֆունկցիայի արգումենտների համար՝ «function foo‹T›(տարբերակ:Option‹T› = None)»:
  • «enum abstract Name(BasicType) {}» շարահյուսությունն այլևս չի պահանջում «@:» նախածանցը «enum»-ում։
  • Ավտոմատ համարակալում վերացական թվարկումների համար.

    enum abstract Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enum abstract Bar(String) {
    var A; // «Ա»
    var B; // «Բ»
    }

  • «Արտաքին» բանալի բառն այլևս չի պահանջում «@:» նախածանցի օգտագործումը:
  • Հեռացվել է տարբերակըիրականացնում է Dynamic»՝ տողերի միջոցով դասի դաշտեր մուտք գործելու համար: Հասանելի է արտաքին դասերի համար կամ վերացական տիպի իրականացման միջոցով:
  • Ավելացվեց «A & B» շարահյուսությունը տիպի խաչմերուկի համար, որը ներկայումս կիրառվում է միայն անանուն կառույցների և տիպի պարամետրերի սահմանափակումների համար: Հին սահմանափակումների շարահյուսությունը հեռացվել է:
  • Դատարկ «Քարտեզ» օրինակների ստեղծումը հասանելի է «var map:Map‹Int, String› = [];» շարահյուսության միջոցով: զանգվածի նման:
  • Ավելացվեց տվյալների կառուցվածքը «haxe.ds.ReadOnlyArray»:
  • Մետատվյալներն այժմ կարող են ունենալ անվանատարածքներ (“@:prefix.name ֆունկցիա() {…}”): Նմանապես սահմանումների դեպքում՝ «#եթե (որոշ. դրոշակ ... #վերջ»:
  • Ծառայության նոր արձանագրություն IDE-ների համար, որոնք օգտագործվում են plugin VSCode-ի համար.
  • Թարմացված արտաքին սահմանումներ (արտաքին) վեբ API-ների համար և ավելացված բացակայողներ:

Source: opennet.ru

Добавить комментарий