Erlang
- Amazon Simple DB
- Yahoo! Delicious (> 5M users)
- Facebook (chat)
- T-Mobile (SMS & auth)
- Ericsson
Bloody Enterprise
Open Source
- CouchDB
- Ejabberd (XMPP-server)
- RabbitMQ
Назначение
Не подходит
- Графоний
- Численные алгоритмы
- Приложение для смартфона
Подходит
- РАСПРЕДЕЛЕННЫЕ
- ОТКАЗОУСТОЙЧИВЫЕ
- ВЫСОКОНАГРУЖЕННЫЕ
- СИСТЕМЫ
- У Л Ь Т Р А _ Х А Р Д К О Р
Интересные особенности
- Декларативный (Prolog)
atom
Term
Пунктуация
Моя личная боль
Интересные особенности
- Декларативный (Prolog)
- Функциональный (Haskell)
Интересные особенности
- Декларативный (Prolog)
- Функциональный (Haskell)
- Concurrent вычисления и передача сообщений
process
MQ
exclusive memory
Интересные особенности
- Декларативный (Prolog)
- Функциональный (Haskell)
- Concurrent вычисления и передача сообщений
- Легковесные потоки и принцип «Let it crash»
Open Telecom Platform (OTP)
- link — если один процесс падает, второй об этом узнаёт
- generic behavior
- сервер (gen_server)
- конечный автомат (gen_statem)
- обработчик событий (gen_event)
- supervisor — процесс-оркестровщик
Интересные особенности
- Декларативный (Prolog)
- Функциональный (Haskell)
- Concurrent вычисления и передача сообщений
- Легковесные потоки и принцип «Let it crash»
- Распределенные вычисления
Интересные особенности
- Декларативный (Prolog)
- Функциональный (Haskell)
- Concurrent вычисления и передача сообщений
- Легковесные потоки и принцип «Let it crash»
- Распределенные вычисления
- Parallel вычисления
Message Queue
Message Queues
Интересные особенности
- Декларативный (Prolog)
- Функциональный (Haskell)
- Concurrent вычисления и передача сообщений
- Легковесные потоки и принцип «Let it crash»
- Распределенные вычисления
- Parallel вычисления
- Интеграция с другими языками
- Native Implemented Functions (NIFs)
- Ports
Интересные особенности
- Декларативный (Prolog)
- Функциональный (Haskell)
- Concurrent вычисления и передача сообщений
- Легковесные потоки и принцип «Let it crash»
- Распределенные вычисления
- Parallel вычисления
- Интеграция с другими языками
- Native Implemented Functions (NIFs)
- Ports
- Горячая замена кода
Синтаксис
Атомы
- Пишутся с маленькой буквы
- Можно смотреть как на строковые константы
- В основном несут пользу при читаемости кода и паттерн матчинге
Термы
- Неизменяемые переменные (invariable variables)
- Пишутся с большой буквы
- Или с underscore, если значение неважно
Списки
- Однонаправленный список
- Основной способ хранения коллекций
- Может хранить разнородные данные
- Отличается от кортежа способом обработки
Функции
- У функций есть арность (arity)
- Можно задать несколько образцов (как в Прологе)
Модули
- -module(fileName).
- Группировка кода. Вместо классов
- import/export
- похоже на js, python
Параллельное программирование
Философия
- В мире события происходят одновременно
- У объектов мира нет общих данных
- Объекты общаются между собой с помощью сообщений
- Случаются неприятности
Рассмотрим locker.erl
Демонстрация
Поведения
gen_server
gen_server
gen_server:start
gen_server:start_link
callback module
Module:init/1
gen_server:stop
Module:terminate/2
gen_server:call gen_server:multi_call
Module:handle_call/3
gen_server:cast gen_server:abcast
Module:handle_info/2
Module:handle_continue/2
Module:code_change/3
Module:handle_cast/2
gen_event
gen_event
callback module
gen_event:notify gen_event:sync_notify
Module:handle_event/2
gen_statem
(ex. gen_fsm)
gen_statem
callback module
gen_statem:call
Module:handle_event/3
Appendix
Типизация
- На момент изобретия языка никто не знал как хорошо построить систему типов
- Основная сложность заключается в горячей замене кода
- TypEr + Dializer
Сборка мусора
- Нет GC pause
- Производится отдельно для каждого процесса
- Копирующая сборка
- Использует две области памяти для того, чтобы оставить живые объекты в одной
- Последовательная сборка (2 поколения)
- Сперва поверхностная
- Потом глубокая
Что осталось за бортом
- Охранные выражения (guards)
- Как происходит компиляция
- Директивы модулей (record, export/import)
- Встроенные функции
- Преобразование типов
- Метапрограммирование
- Ввод/вывод
- Обработка ошибок
- Отладка, автотесты (EUnit)
- Ports & NIFs
- Горячая замена кода
- Supervisor
Erlang
By koteek
Erlang
- 269