უკან დაბრუნება

Elixir v1.20: ენა ეტაპობრივად ტიპიზებული გახდა
SiTech AI Team2 წთ. საკითხავი

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-ის build-ინსტრუმენტი ახლა ყველაზე სწრაფია ჩვეულებრივ „კომპილაცია + ჩატვირთვა + ტესტი“ ციკლში. ახალი :module_definition ოფცია შეიძლება იყოს :compiled (ნაგულისხმევი) ან :interpreted და mix.exs-ში elixirc_options-ით ირთვება; ის ცვლის მხოლოდ იმას, თუ როგორ სრულდება defmodule-ის შიგთავსი, დისკზე ჩაწერილ .beam ფაილებს კი არ ეხება. ტიპის ხელმოწერები ჯერ კიდევ წინ არის: გუნდი მათ მხოლოდ მაშინ შემოიტანს, როცა ტიპების სისტემის წარმადობით დაკმაყოფილდება და ეფექტურად შეძლებს რეკურსიულ ტიპებს, პარამეტრულ ტიპებსა და map-ის გასაღები-მნიშვნელობის წყვილების enumerable-ად გადათვლას.

გააზიარე ციფრული გამოცდილება

SiTech

SiTech — AI-გაძლიერებული ვებ დეველოპმენტი

ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.