Язык программирования Elixir
Алгоритм обучения
Я буду следовать такой структуре для каждой темы:
- Теоретическая часть - объяснение концепций
- Примеры кода - практическая демонстрация
- Упражнения - задачи для закрепления
- Ключевые моменты - резюме для запоминания
Начнем с Недели 1, Темы 1.
НЕДЕЛЯ 1: Основы Elixir и функционального программирования
Тема 1: Введение в Elixir и экосистему (2 часа)
1.1 История и философия языка
Elixir - это функциональный язык программирования, созданный José Valim (бывший core contributor Rails) в 2011 году.
Ключевые особенности:
- Функциональный язык с неизменяемыми данными
- Работает на Erlang VM (BEAM)
- Отличная поддержка конкурентности
- Fault-tolerance (устойчивость к сбоям)
- Метапrogrammирование через макросы
- Современный синтаксис, вдохновленный Ruby
Зачем Elixir?
- Масштабируемость - легко обрабатывать миллионы одновременных соединений
- Надежность - системы с 99.9999999% uptime (9 девяток!)
- Производительность - low latency, высокая пропускная способность
- Удобство разработки - приятный синтаксис, отличный tooling
1.2 Beam VM и Erlang
BEAM (Bogdan's Erlang Abstract Machine) - виртуальная машина, на которой работает Elixir.
Преимущества BEAM:
- Легковесные процессы (можно запустить миллионы)
- Preemptive scheduling - справедливое распределение CPU
- Изолированные процессы с garbage collection для каждого
- Hot code reloading - обновление без остановки системы
- Распределенные системы out of the box
Связь с Erlang:
- Elixir полностью совместим с Erlang
- Можно использовать любые Erlang библиотеки
- Доступ к 30+ летней экосистеме Erlang
1.3 Установка и настройка окружения
Шаг 1: Установка Elixir
macOS:
☯
Terminal:
⌕
≡
✕
brew install elixir
Ubuntu/Debian:
☯
Terminal:
⌕
≡
✕
# Добавить Erlang Solutions repo
wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb
sudo dpkg -i erlang-solutions_2.0_all.deb
sudo apt-get update
sudo apt-get install esl-erlang elixir
Windows:
- Скачать installer с
Шаг 2: Проверка установки
☯
Terminal:
⌕
≡
✕
elixir --version
# Должно показать что-то вроде:
# Erlang/OTP 26
# Elixir 1.15.7
Шаг 3: Настройка редактора
Рекомендуемые редакторы:
- VS Code + ElixirLS extension
- IntelliJ IDEA + Elixir plugin
- Vim/Neovim + elixir-ls
1.4 Mix - build tool для Elixir
Mix - это инструмент для:
- Создания проектов
- Компиляции кода
- Запуска тестов
- Управления зависимостями
- Создания задач (tasks)
Основные команды Mix:
☯
Terminal:
⌕
≡
✕
# Создать новый проект
mix new my_project
# Войти в директорию
cd my_project
# Компиляция проекта
mix compile
# Запуск тестов
mix test
# Интерактивная консоль с проектом
iex -S mix
# Форматирование кода
mix format
# Получить зависимости
mix deps.get
Структура Mix проекта:
☯
Terminal:
⌕
≡
✕
my_project/
├── lib/
│ └── my_project.ex # Основной код
├── test/
│ ├── my_project_test.exs # Тесты
│ └── test_helper.exs # Настройки тестов
├── mix.exs # Конфигурация проекта
└── README.md
1.5 Интерактивная консоль IEx
IEx (Interactive Elixir) - REPL для Elixir.
☯
Terminal:
⌕
≡
✕
# Запуск IEx
iex
# В консоли можно выполнять любой Elixir код:
iex(1)> 1 + 1
2
iex(2)> "Hello" <> " World"
"Hello World"
Полезные команды IEx:
☯
Terminal:
⌕
≡
✕
# Помощь
h()
# Документация по функции
h(Enum.map)
# Информация о типе
i("hello")
# Скомпилировать файл
c("path/to/file.ex")
# Перекомпилировать проект
recompile()
# Выход
# Ctrl+C два раза или:
System.halt()
Практическое задание 1.1
Задача: Создайте свой первый Elixir проект
☯
Terminal:
⌕
≡
✕
# 1. Создайте проект
mix new hello_elixir
# 2. Откройте файл lib/hello_elixir.ex
# 3. Замените содержимое на:
☯
Terminal:
⌕
≡
✕
defmodule HelloElixir do
@moduledoc """
Мой первый модуль на Elixir
"""
def hello do
"Hello, Elixir World!"
end
def greet(name) do
"Hello, #{name}!"
end
end
☯
Terminal:
⌕
≡
✕
# 4. Запустите в IEx
iex -S mix
# 5. Протестируйте:
iex> HelloElixir.hello()
iex> HelloElixir.greet("Студент")
Резюме Темы 1
Ключевые понятия:
- ✅ Elixir - функциональный язык на BEAM VM
- ✅ BEAM обеспечивает конкурентность и fault-tolerance
- ✅ Mix - основной инструмент для работы с проектами
- ✅ IEx - интерактивная консоль для экспериментов
Следующий шаг: Тема 2 - Базовые типы данных и неизменяемость