Языки программирования

Учебник Erlang для начинающих

26 уроков · 8 разделов · бесплатно, без регистрации

Erlang — функциональный язык для построения конкурентных, распределённых и отказоустойчивых систем, способных работать годами без остановки. В этом курсе вы пройдёте путь от истории языка в Ericsson и философии «let it crash» до модели акторов, передачи сообщений, фреймворка OTP с gen_server и деревьями супервизоров, распределённых кластеров и горячей замены кода. Подойдёт тем, кто знаком с программированием и хочет понять, как устроена надёжность промышленных систем вроде WhatsApp, RabbitMQ и телеком-платформ.

Курс «Erlang: язык надёжных систем» состоит из 8 разделов и 26 уроков: Знакомство с Erlang, Основы языка, Функциональное программирование в Erlang, Модель акторов и процессы, Надёжность и обработка ошибок, OTP — фреймворк надёжности, Хранение, распределённость и горячая замена и Erlang в мире: сравнения и применения. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Знакомство с Erlang

    1. Что такое Erlang и зачем он нужен

      Erlang — язык для надёжных конкурентных систем: история в Ericsson, телеком, девять девяток доступности и философия отказоустойчивости.

    2. Философия «let it crash» и отказоустойчивость

      Почему в Erlang принято «пусть падает»: изоляция отказов, восстановление вместо защиты от каждой ошибки и роль супервизоров.

    3. Платформа BEAM: виртуальная машина Erlang

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

  2. 2 Основы языка

    1. Установка, оболочка erl и первая программа

      Как поставить Erlang/OTP, работать в интерактивной оболочке erl, скомпилировать модуль и запустить первую функцию.

    2. Неизменяемые данные и одно присваивание

      Переменные в Erlang связываются один раз и неизменяемы: что такое single assignment, как читать ошибку no match и почему это упрощает конкурентность.

    3. Типы данных: атомы, числа, кортежи, списки, map, бинарные данные

      Базовые типы Erlang: атомы, целые и числа с плавающей точкой, кортежи, списки, ассоциативные массивы map и бинарные данные.

  3. 3 Функциональное программирование в Erlang

    1. Сопоставление с образцом (pattern matching)

      Pattern matching в Erlang: сопоставление кортежей и списков, переменные-заполнители, конструкция case и почему сопоставление — основа всего языка.

    2. Функции, модули и многовариантные определения

      Определение функций в Erlang: несколько клауз с pattern matching, локальные и экспортируемые функции, анонимные функции fun и модульная организация кода.

    3. Рекурсия и хвостовые вызовы

      Рекурсия как основной способ повторения в Erlang: обычная и хвостовая рекурсия, аккумуляторы и почему хвостовые вызовы не переполняют стек.

    4. Списковые включения, lists и охранные выражения

      Работа со списками в Erlang: list comprehensions, модуль lists (map, filter, foldl) и охранные выражения guards для уточнения клауз.

  4. 4 Модель акторов и процессы

    1. Лёгкие процессы и spawn

      Модель акторов в Erlang: лёгкие процессы, функция spawn, идентификаторы PID, изоляция и почему миллионы процессов — это норма.

    2. Передача сообщений: ! и receive

      Обмен сообщениями между процессами Erlang: оператор отправки !, блок receive, почтовый ящик и селективный приём сообщений.

    3. Состояние, регистрация и серверный цикл

      Как процесс хранит состояние через рекурсивный цикл, регистрация процессов под именем и шаблон «сервер на receive».

  5. 5 Надёжность и обработка ошибок

    1. Связи и мониторы: link и monitor

      Обнаружение падений в Erlang: связи link с двусторонним распространением сигналов, мониторы monitor для одностороннего наблюдения и флаг trap_exit.

    2. «Let it crash» на практике: изоляция отказов

      Практика отказоустойчивости: почему рабочий код пишут счастливым путём, как отказ локализуется в процессе и роль перезапуска чистого состояния.

    3. Обработка ошибок: try/catch, throw, exit, error

      Механизмы исключений в Erlang: классы ошибок throw, error и exit, конструкция try/catch и почему её используют умеренно.

  6. 6 OTP — фреймворк надёжности

    1. Что такое OTP и поведения

      OTP как фреймворк надёжности Erlang: что такое поведения (behaviours), разделение общей и прикладной части, и почему OTP — стандарт промышленного Erlang.

    2. gen_server: главный строительный блок

      Поведение gen_server в Erlang: callbacks init, handle_call и handle_cast, синхронные и асинхронные вызовы, хранение состояния и клиентский API.

    3. Деревья супервизоров и стратегии перезапуска

      Поведение supervisor в Erlang: дочерние спецификации, стратегии перезапуска one_for_one, one_for_all и rest_for_one, интенсивность перезапуска и деревья надзора.

    4. Приложения и релизы OTP

      Обзор приложений и релизов OTP: .app-файл, корневой супервизор, дерево приложения, сборка релиза и запуск как единого продукта.

  7. 7 Хранение, распределённость и горячая замена

    1. ETS: быстрое хранилище в памяти

      ETS (Erlang Term Storage) — встроенное хранилище в памяти: типы таблиц set, bag и ordered_set, доступ из многих процессов и место ETS в архитектуре.

    2. Распределённость: узлы и прозрачная передача сообщений

      Распределённый Erlang: узлы (nodes), имена и cookie, прозрачная передача сообщений между машинами и кластер «из коробки».

    3. Горячая замена кода без остановки

      Горячая замена кода в Erlang: загрузка новой версии модуля без остановки системы, две версии модуля одновременно и полностью квалифицированные вызовы.

  8. 8 Erlang в мире: сравнения и применения

    1. Erlang и Elixir: одна платформа, разный синтаксис

      Сравнение Erlang и Elixir: общая виртуальная машина BEAM и OTP, различия синтаксиса, макросы и инструментарий, и когда выбирать каждый язык.

    2. Почему модель акторов проще для конкурентности

      Сравнение модели акторов с потоками и общей памятью: гонки данных, блокировки, deadlock и почему изоляция процессов делает конкурентный код понятнее.

    3. Где применяют Erlang: реальные системы

      Практические применения Erlang: мессенджеры (WhatsApp), телеком, очереди сообщений (RabbitMQ), базы данных и когда Erlang — правильный выбор.