Как Gleam пытается подружить строгую типизацию с мощью Erlang

19 мар 2026
21,856
1,011
87
1 неделя

Представьте, что вам нужно собрать систему, которая никогда не падает, держит сотни тысяч соединений и при этом не превращается в лабиринт из динамических типов, где ошибка в одной букве всплывает только под нагрузкой в три часа ночи. Обычно в таких случаях смотрят на Erlang или Elixir. Но у них есть особенность: это языки с динамической типизацией. Если вы привыкли к Rust или TypeScript, отсутствие строгих типов в рантайме BEAM (виртуальной машины Erlang) может вызвать легкое чувство тревоги.

Именно здесь на сцену выходит Gleam. Это статически типизированный язык программирования, который компилируется в Erlang (и JavaScript, кстати, тоже). Его создатели решили взять лучшее от функционального программирования и приправить это современным подходом к безопасности типов.

Lucy, Gleam's mascot

Зачем нам еще один язык программирования

Казалось бы, зачем плодить сущности, если есть Elixir? Основная проблема больших систем на Erlang/Elixir — это поддержка. Когда проект разрастается до сотен модулей, отслеживать, какие данные приходят в функцию, становится сложно. Gleam решает это на этапе компиляции. Если вы пытаетесь передать строку туда, где ожидается целое число, код просто не соберется.

При этом Gleam не пытается быть «сложным» функциональным языком вроде Haskell. Тут нет бесконечных категорий монад или зубодробительной терминологии. Разработчики называют его «дружелюбным», и это чувствуется в синтаксисе: он лаконичный, понятный и во многом напоминает смесь Rust и Swift.

Реклама

Что интересного внутри

Главная фишка Gleam — это предсказуемость. Вот несколько вещей, которые зацепили меня при изучении репозитория.

Никаких сюрпризов с null

В Gleam нет null или undefined. Вместо этого используется тип Option. Это заставляет вас явно обрабатывать случаи, когда данных может не быть. Знакомая ситуация, когда undefined is not a function ломает продакшн? С Gleam такая ошибка исключена архитектурно.

Паттерн-матчинг на стероидах

Поскольку язык работает на BEAM, паттерн-матчинг здесь возведен в абсолют. Вы можете разбирать сложные структуры данных прямо в аргументах функции или через конструкцию case. Компилятор при этом проверит, все ли возможные варианты вы обработали. Если забыли какой-то крайний случай — получите предупреждение.

pub fn greet(name: Option(String)) -> String {
  case name {
    Some(n) -> "Hello, " <> n
    None -> "Hello, Stranger"
  }
}

Неизменяемость по умолчанию

Все данные в Gleam иммутабельны. Вы не можете случайно изменить состояние переменной из другого потока. В контексте высококонкурентных систем это избавляет от целого пласта багов, связанных с гонкой данных (race conditions).

Техническая сторона вопроса

Gleam написан на Rust. Это делает сам компилятор очень быстрым. Интересно, что проект не пытается изобретать свой рантайм. Он полностью полагается на Erlang VM (BEAM), которая оттачивалась десятилетиями в телекоме.

Это дает важное преимущество: вы получаете доступ к легковесным процессам Erlang. Можно запустить миллион таких процессов на обычном ноутбуке, и они будут изолированы друг от друга. Если один процесс упадет из-за ошибки, он не потянет за собой всю систему. Gleam просто добавляет к этой мощи слой безопасности в виде типов.

Кстати, возможность компиляции в JavaScript открывает путь к изоморфному коду. Можно писать логику один раз и запускать её и на бэкенде (Erlang), и во фронтенде (JS).

Где это использовать

Gleam идеально подходит для систем, где цена ошибки высока, а масштабируемость критична:

  • Бэкенды для чатов и мессенджеров.
  • Игровые серверы с большим количеством одновременных подключений.
  • Микросервисы, обрабатывающие финансовые транзакции.
  • API-шлюзы, где важна высокая пропускная способность.

Если вы уже используете Elixir, Gleam может стать отличным дополнением для критически важных модулей, где нужна дополнительная уверенность в типах. Благо, интеграция между ними настраивается довольно просто.

Стоит ли пробовать

Проект уже перешагнул отметку в 20 тысяч звезд на GitHub, что для молодого языка программирования — серьезный показатель. Сообщество в Discord очень живое, а документация на официальном сайте написана человеческим языком.

Кому точно стоит заглянуть в репозиторий:

  1. Тем, кто устал от динамической типизации в Elixir/Erlang.
  2. Любителям Rust, которые ищут более высокоуровневый инструмент для сетевых сервисов.
  3. Разработчикам, которые хотят попробовать функциональное программирование, но боятся сложности Haskell.

Gleam не обещает революции, он просто предлагает очень здравый и прагматичный подход к созданию надежного софта. Пожалуй, это именно то, чего часто не хватает в современной разработке.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.