Введение в Elixir
Что такое Elixir?
Elixir — это функциональный язык программирования, работающий на виртуальной машине Erlang (BEAM). Представьте, что вы строите небоскрёб: традиционные языки заставляют вас задумываться о каждой балке и этаже, но Elixir — это как конструктор из готовых, идеально подогнанных блоков, который позволяет строить масштабные, отказоустойчивые системы легко и элегантно.
Elixir создан для высоконагруженных приложений, где критически важна надёжность: телеком-системы, банковские приложения, чат-платформы. Если вы новичок — не пугайтесь, Elixir сочетает красоту Ruby с мощностью Erlang!
Почему Elixir?
- Функциональный стиль: неизменяемые данные, чистые функции, отсутствие побочных эффектов — код предсказуем и легко тестируется.
- Конкурентность из коробки: легковесные процессы (не потоки ОС!) общаются через сообщения — как в реальной жизни: отправил письмо и забыл.
- Отказоустойчивость: если один процесс падает — другие продолжают работать. Это философия Erlang: "let it crash".
- Горячая перезагрузка: обновляй код без остановки системы.
- Метапрограммирование: макросы позволяют писать код, который генерирует другой код — DSL и библиотеки растут как грибы.
- Растущая экосистема: Phoenix для веба, Nerves для встраиваемых систем, Ecto для БД.
Интересный факт: Elixir создал Хосе Валим (José Valim) — один из ключевых разработчиков Ruby on Rails. Он хотел добавить конкурентность в Rails и выбрал Erlang VM как платформу.
Установка Elixir
Проверьте, установлен ли Elixir: откройте терминал и введите elixir --version. Если видите версию — отлично, установка не нужна.
macOS
brew install elixir
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install elixir
Windows
Скачайте установщик с elixir-lang.org/install.html или используйте Chocolatey:
choco install elixir
Проверка установки
elixir --version
# Вывод: Erlang/OTP ..., Elixir ...
Создание первой программы
Напишем классический "Hello, World!" на Elixir.
- Создайте файл
hello.exs(расширение.exsдля Elixir Script):
IO.puts("Hello, World!")
- Запустите:
elixir hello.exs
# Вывод: Hello, World!
Для полноценного проекта используйте Mix (сборщик Elixir):
mix new my_app
cd my_app
mix run -e "MyApp.hello"
Структура курса
Курс разделён на два уровня: основы и продвинутые темы.
Часть 1: Основы Elixir
| Урок | Тема | Что изучим |
|---|---|---|
| 1 | Введение | Установка, IEx, базовые концепции |
| 2 | Базовый синтаксис | Атомы, булевы типы, операторы сравнения |
| 3 | Переменные и области видимости | Привязка, области видимости, пипы (pipe operator) |
| 4 | Функции | Именованные функции, анонимные функции, замыкания |
| 5 | Коллекции | Списки, кортежи, Map, Keyword Lists |
| 6 | Управляющие структуры | case, cond, if, unless, with |
| 7 | Модули и атрибуты | Создание модулей, атрибуты, импорты и псевдонимы |
| 8 | Обработка ошибок | try, rescue, catch, throw |
| 9 | Протоколы | Полиморфизм, определение и реализация протоколов |
| 10 | Структуры | Создание структур, ограничения, @enforce_keys |
| 11 | Специальные формы | quote, unquote, var!, макрос __MODULE__ |
Часть 2: Продвинутые темы
| Урок | Тема | Что изучим |
|---|---|---|
| 1 | Конкурентность | Процессы, spawn, send, receive, PID |
| 2 | Реестры и Agent | Реестры процессов, модуль Agent |
| 3 | GenServer | Паттерн GenServer, обратные вызовы, состояние |
| 4 | OTP: Supervisor | Супервизоры, стратегии рестарта, дерево супервизии |
| 5 | OTP: Task и Agent | Асинхронные задачи, распределённый Elixir |
| 6 | Метапрограммирование | Макросы, AST, гигиена макросов |
| 7 | Ecto: основы | Миграции, схемы, запросы |
| 8 | Ecto: ассоциации | Связи между моделями, предзагрузка |
| 9 | Phoenix: основы | Роутинг, контроллеры, представления |
| 10 | Phoenix: каналы | WebSocket, каналы в реальном времени |
| 11 | Тестирование | ExUnit, doctest, тестирование GenServer |
| 12 | Mix и зависимости | Создание проектов, зависимости, задачи Mix |
Инструменты экосистемы
- IEx (Interactive Elixir) — REPL для экспериментов. Запустите
iexи пробуйте код прямо в терминале. - Mix — сборщик и менеджер проектов. Команды:
mix new,mix compile,mix test,mix deps.get. - ExUnit — фреймворк для тестирования.
- Hex — менеджер пакетов.
- Phoenix — веб-фреймворк (аналог Rails в Ruby).
- Nerves — фреймворк для встраиваемых систем.
Упражнения
1. Первый запуск в IEx
Запустите iex в терминале и выполните:
IO.puts("Привет от Elixir!")
2 + 2
"Привет, " <> "мир!"
2. Калькулятор в IEx
В IEx вычислите:
10 + 5
15 - 7
3 * 4
20 / 4
div(10, 3) # целочисленное деление
rem(10, 3) # остаток
3. Работа с IEx
h IO.puts # справка по функции
h Enum # справка по модулю
? 'a' # код символа
v(1) # результат первой команды
4. Исследование языка
Ответьте на вопросы (используйте h, i, ? в IEx):
- Какой тип у
trueиfalse? - Чем отличается
==от===? - Что возвращает
is_integer(1.0)? - Какой результат
1..10?
Заключение
Elixir — это современный функциональный язык для создания надёжных, масштабируемых приложений. Курс проведёт вас от основ синтаксиса к продвинутым темам: конкурентность, OTP, метапрограммирование и веб-разработка с Phoenix.
Готовы начать? Давайте перейдём к следующему уроку — Базовый синтаксис!