Gleam, функциональный язык с акторной моделью, работающий на виртуальной машине Erlang (BEAM), достиг версии 1.0. Это означает, что теперь он готов к использованию в производственных системах с гарантией обратной совместимости на основе семантического версионирования.
Gleam стремится быть языком с небольшой областью применения, легким для чтения и понимания, а также выразительным.
Преимущества Gleam:
- Надежная виртуальная машина: Gleam работает на виртуальной машине Erlang — зрелой и проверенной платформе, на которой работают многие из самых надежных и масштабируемых систем мира, такие как WhatsApp. Gleam также может работать в средах выполнения JavaScript, что позволяет запускать код Gleam в браузере, на мобильных устройствах или в любом другом месте.
- Статическая типизация и надежность: Gleam следует примеру строго типизированных языков, таких как Elm, OCaml и Rust, обеспечивая надежный статический анализ и гарантии во время компиляции. Он также использует неизменяемые структуры данных, реализованные с помощью структурного разделения, как в Clojure, для обеспечения эффективной работы.
- Конкурентность и безопасность: Доступ к изменяемому состоянию одновременно осуществляется через акторов или базу данных ключей-значений в памяти Erlang (ETS).
- Масштабируемость: По словам команды разработчиков ядра языка, система параллелизма Gleam может одновременно выполнять миллионы задач и легко масштабируется благодаря неизменяемым данным и сборщику мусора, который никогда не останавливает работу всей системы.
- Взаимодействие с другими языками: Программы Gleam могут использовать пакеты, созданные для BEAM, независимо от языка, на котором они написаны. Кроме того, в программе Gleam можно смешивать код Erlang и Elixir. Это возможно благодаря тому, что инструмент сборки Gleam может компилировать зависимости Elixir, а также исходные файлы Elixir и поддерживает специальный синтаксис, позволяющий импортировать внешние функции для их вызова из кода Gleam. Gleam также поддерживает бесшовную интеграцию с кодом JavaScript при компиляции для среды выполнения JavaScript.
- Горячая перезагрузка кода: Gleam может использовать горячую перезагрузку кода Erlang, но без каких-либо дополнительных гарантий, кроме тех, которые предоставляет сам Erlang. В частности, обновленный код не может быть проверен на типы, поскольку невозможно узнать, какие типы используются в запущенном коде.
Конкуренция на BEAM VM:
На виртуальной машине Erlang у Gleam есть несколько конкурентов, включая Alpaca, Caramel и Elixir. Alpaca и Caramel — это статически типизированные языки, которые отличаются от Gleam по ряду параметров. В частности, Caramel основан на OCaml и даже форкает компилятор OCaml для генерации кода, в то время как Gleam и Alpaca — оригинальные языки. Gleam — единственный из них, который также ориентирован на JavaScript. С другой стороны, Elixir, безусловно, является самой зрелой и популярной альтернативой Erlang на BEAM, предлагая синтаксис, похожий на Ruby, и динамическую систему типов.