Фанаты динамического Elixir получили типы — и компилятор сразу нашёл их баги

Десять лет поклонники Elixir убеждали всех, что динамическая типизация — это нормально. Версия v1.20 привезла постепенные типы без единой аннотации — и первое, что она сделала после обновления, — вручила всем пачку бесплатных багов.

Динамический язык тихо обзаводится проверкой типов

Карточка релиза Elixir v1.20
Карточка релиза Elixir v1.20

Годы напролёт Elixir был языком, поклонники которого клялись: статические типы не нужны — сопоставление с образцом и виртуальная машина BEAM всё компенсируют. Затем релиз v1.20 попал на первую страницу с противоположным тезисом: теперь это постепенно типизированный язык, и тред полон новообращённых, наблюдающих, как компилятор находит баги, о существовании которых они не подозревали.

Типы без аннотаций и dynamic(), который не равен any()

Главное: v1.20 выполняет вывод и проверку типов по всем программам на Elixir без единой аннотации, выявляя мёртвый код и «подтверждённые баги» — нарушения типов, гарантированно падающие в рантайме. Конструкция строится вокруг постепенного типа dynamic() — заглушки для ещё неизвестных типов — с двумя свойствами, на которых акцентируется релиз: совместимостью и сужением. Система помечает неопределённые значения как dynamic(integer() or binary()) и сигналит только тогда, когда предоставляемый и ожидаемый типы полностью не пересекаются. Вывод теперь работает через guard-клозы с объединениями и отрицаниями (is_list(x) and is_integer(y)), сопоставление с образцом с уточнением ({:ok, x} = y), проверки is_map_key/2 и сужение клоз case, обрезающее избыточные ветки. По данным релиза, система проходит 12 из 13 категорий бенчмарка «If T» по сужению типов. Сами сигнатуры типов пока отложены — ждут рекурсивных и параметрических типов.

Лагерь «бесплатных багов» и шпилька в адрес старой ортодоксии

Реакция работающих с Elixir команд касалась не теории, а опыта обновления:

«Мне нравится, что я могу обновить версию Elixir, и компилятор находит кучу бесплатных багов. Последние несколько релизов именно такие — и почти никаких ломающих изменений.» — разработчик, поздравляющий команду

Не все были готовы отпустить сообщество за прежнюю позицию:

«Критики говорили: нужна типизация, а все поклонники Elixir отвечали: типизация не нужна… Теперь они получают типизацию, и та находит за них баги… Но вы же говорили, что она вам не нужна для предотвращения багов?» — разработчик, пробовавший Elixir, но остановленный отсутствием типов

Ветеран с десятилетним стажем охладил эйфорию реальным вопросом — превосходит ли это старый инструментарий:

«Хотел бы понять, как то, что есть в v1.20, соотносится с Dialyzer без спецификаций… Dialyzer я не нашёл особо полезным.» — старший инженер-программист, профессионально работающий с Elixir около 10 лет

Самое интересное утверждение прозвучало от комментатора, смотрящего дальше постепенной типизации — к тому, что появится с аннотациями:

«Elixir, судя по всему, станет первым сколько-нибудь заметным языком с полными теоретико-множественными типами… TypeScript и Scala поддерживают лишь… объединение и пересечение… {объединение, пересечение} функционально неполны, тогда как {объединение, пересечение, дополнение} — полны.» — комментатор, апеллирующий к функциональной полноте

Обновление, которое вас аудирует

Тихий трюк здесь в том, что это не опциональная функция, на которую нужно мигрировать, — она работает на существующем коде и отчитывается. Языковое сообщество, построившее свою идентичность на том, что типы не нужны, только что выпустило проверщик, который при первой же компиляции точно показывает, во сколько это обходилось. Теоретико-множественные амбиции — игра на перспективу: типы-дополнения позволят Elixir выражать ограничения, структурно невозможные в TypeScript, — странная фраза про язык, который ещё недавно был последним оплотом динамической типизации.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 17 из 25 Читать дальше
🔥Hot Discussion

35% студентов курса CS в Беркли получили «неуд» — и дело не только в списывании

Вводный курс, где раньше проваливалось менее 10%, весной 2026-го завалил 35,3% студентов. Собственное объяснение профессора опровергает паническую ИИ-риторику: поймали почти 30 списывальщиков, а деградация математики началась за годы до ChatGPT.

★ 291 · 💬 222 · dailycal.org · 4 мин