
Elixir v1.20. լեզուն դարձավ աստիճանաբար տիպավորված
Elixir v1.20-ը ավարտել է բազմությունների տեսության վրա հիմնված տիպերի համակարգի առաջին փուլը. յուրաքանչյուր ծրագիր ստուգվում է աստիճանաբար՝ առանց տիպերի գրառումների, իսկ կոմպիլյատորը գտնում է մեռած կոդ ու հաստատված սխալներ։
2026 թվականի հունիսի 3-ին լույս տեսավ Elixir v1.20-ը, որը նշանավորում է լեզվի բազմությունների տեսության վրա հիմնված տիպերի համակարգի զարգացման առաջին փուլի ավարտը։ Աշխատանքը հայտարարվել էր 2022 թվականին, 2023 թվականի հունիսին հրապարակվել էր համակարգի նախագծման մասին մրցանակակիր հոդվածը, և այժմ նախագիծը հետազոտությունից տեղափոխվել է կոմպիլյատոր. յուրաքանչյուր Elixir ծրագիր անցնում է տիպերի եզրակացում և աստիճանական ստուգում՝ առանց մշակողի գրած որևէ գրառման։
Հաստատված սխալներ և մեռած կոդ
Նպատակն է հայտնել մեռած կոդի և «հաստատված սխալների» մասին՝ տիպային խախտումներ, որոնք գործարկվելու դեպքում անպայման կձախողվեն, առանց մշակողների վրա լրացուցիչ բեռ դնելու։ Հրապարակման հաղորդագրության համաձայն՝ Elixir-ի ներդրումը անցնում է «If T: Benchmark for Type Narrowing» բենչմարկի 13 կատեգորիաներից 12-ը։ Տիպերի համակարգը հնարավոր դարձավ CNRS-ի և Remote-ի գործընկերության շնորհիվ, իսկ զարգացումը հովանավորում են Fresha-ն և Tidewave-ը։
dynamic() տիպը. համատեղելիություն և նեղացում
Այնտեղ, որտեղ շատ աստիճանական համակարգեր օգտագործում են any()՝ «ամեն ինչ թույլատրված է» իմաստով, Elixir-ը ներկայացնում է dynamic() տիպը երկու հատկությամբ։ Համատեղելիությունը նշանակում է, որ խախտումը գրանցվում է միայն այն դեպքում, երբ տրված և ընդունելի տիպերը չեն հատվում. փոփոխականը, որի տիպը եզրակացվել է որպես dynamic(integer() or binary()), դեռ կարող է փոխանցվել միայն թվեր ընդունող օպերատորին։ Նեղացումը տիպին տալիս է միջակայքի բնույթ. data.a-ի և data.b-ի օգտագործումը արժեքը ճշգրտում է մինչև %{..., a: number(), b: number()}, ուստի դրանից հետո data.a + data գրառումը խախտում է համարվում։ Տիպավորվում են նաև պահպանիչ արտահայտությունները. is_list/is_integer-ը տալիս է միավորումներ, is_map_key(x, :foo)-ն ու դրա ժխտումը՝ բանալու առկայություն կամ բացակայություն, իսկ tuple_size(x) < 3-ը elem(x, 3)-ը դարձնում է խախտում։ case արտահայտություններում առաջին ճյուղում nil-ի համընկնումը հետագա ճյուղերը նեղացնում է մինչև binary(), ինչը նաև բացահայտում է ավելորդ ճյուղեր ու մեռած կոդ։
Ավելի արագ կոմպիլյացիա և հաջորդ քայլերը
Թողարկումը բարելավում է նաև կոմպիլյացիայի ժամանակը, հատկապես բազմամիջուկ մեքենաներում. թիմի սինթետիկ բենչմարկերում Elixir-ի կառուցման գործիքն այժմ ամենաարագն է սովորական «կոմպիլյացիա + գործարկում + թեստ» ցիկլում։ Նոր :module_definition ընտրանքը կարող է լինել :compiled (կանխադրված) կամ :interpreted և միացվում է mix.exs-ում elixirc_options-ի միջոցով. այն փոխում է միայն այն, թե ինչպես է կատարվում defmodule-ի պարունակությունը, և չի ազդում սկավառակին գրվող .beam ֆայլերի վրա։ Տիպերի ստորագրությունները դեռ առջևում են. թիմը դրանք կներկայացնի միայն այն ժամանակ, երբ գոհ լինի տիպերի համակարգի արդյունավետությամբ և կկարողանա արդյունավետ իրականացնել ռեկուրսիվ տիպեր, պարամետրիկ տիպեր և map-ի բանալի-արժեք զույգերի անցումը որպես enumerable։
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։