Назад

Elixir v1.20: мова стала поступово типізованою
SiTech AI Team2 хв читання

Elixir v1.20: мова стала поступово типізованою

Elixir v1.20 завершила перший етап системи типів на основі теорії множин: кожна програма перевіряється поступово, без анотацій, а компілятор знаходить мертвий код і підтверджені помилки.

3 червня 2026 року вийшов Elixir v1.20, який позначає першу віху розробки системи типів на основі теорії множин. Роботу було анонсовано у 2022 році, у червні 2023-го з'явилася відзначена нагородою стаття про дизайн системи, а тепер проєкт перейшов із досліджень у компілятор: кожна програма на Elixir виводить типи й поступово перевіряється без жодної анотації з боку розробника.

Підтверджені помилки та мертвий код

Мета — повідомляти про мертвий код і «підтверджені помилки»: порушення типів, які гарантовано спричинять збій під час виконання, — не додаючи розробникам роботи. За словами авторів релізу, реалізація Elixir проходить 12 із 13 категорій бенчмарку «If T: Benchmark for Type Narrowing». Система типів стала можливою завдяки партнерству 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 і вмикається через elixirc_options у mix.exs; вона змінює лише те, як виконується вміст defmodule, не торкаючись файлів .beam на диску. Сигнатури типів ще попереду: команда впровадить їх лише тоді, коли буде задоволена продуктивністю системи типів і зможе ефективно реалізувати рекурсивні типи, параметричні типи та обхід пар ключ-значення map як enumerable.

Поділитися цифровим досвідом

SiTech

SiTech — веброзробка з підтримкою AI

Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.