![Page 2: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/2.jpg)
Erlang — это круто
•Опыт создания видеостримингового сервера erlyvideo
•Есть с чем сравнивать: C++, Java, ObjectiveC
•Erlang прекрасно себя показал
![Page 3: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/3.jpg)
Erlang — это круто
•Это не больно
•Это свободная /cores по утрам
•Это возможность пускать новичков в продакшн
•Это решение проблем продакшна
![Page 4: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/4.jpg)
Область применимости
Долгоживущие серверные приложения,
обеспечивающие коммуникацию большого числа
онлайн пользователей
![Page 5: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/5.jpg)
Область применимости
•Игры
•Чаты, конференции
•Аудио/видео коммуникации
![Page 6: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/6.jpg)
Это всё можно делать
•на Java
![Page 7: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/7.jpg)
Это всё можно делать
•на Java
•на C++
![Page 8: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/8.jpg)
Это всё можно делать
•на Java
•на C++
•на Node.js
![Page 9: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/9.jpg)
Это всё можно делать
•на Java
•на C++
•на Node.js
•на прочих перфокартовых технологиях
![Page 10: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/10.jpg)
Проблемы общего назначения
Платформы общего назначения имеют проблемы,
фатальные для описываемой ситуации
![Page 11: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/11.jpg)
Проблемы общего назначения
Платформы общего назначения имеют проблемы,
фатальные для описываемой ситуации
![Page 12: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/12.jpg)
Проблемы общего назначения
Платформы общего назначения имеют проблемы,
фатальные для описываемой ситуации
В контексте этих проблем Java от бейсика не отличается
![Page 13: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/13.jpg)
Проблемы Java•Утечки памяти
![Page 14: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/14.jpg)
Проблемы Java•Утечки памяти
•Утечки ресурсов
![Page 15: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/15.jpg)
Проблемы Java•Утечки памяти
•Утечки ресурсов
•Обработка ошибок
![Page 16: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/16.jpg)
Проблемы Java•Утечки памяти
•Утечки ресурсов
•Обработка ошибок
•Сложность параллельного программирования
![Page 17: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/17.jpg)
Причина проблем
В языках типа Java разделены объекты и потоки выполнения
У них разное время жизни
![Page 18: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/18.jpg)
Причина проблем
Нелокальность исключений по отношению к объектам
Обработка ошибок становится проблемой и превращает код в спагетти
![Page 19: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/19.jpg)
Результаты проблем
Привлечение новых программистов — головная боль Их ошибки валят весь проект
Цена программирования растет
![Page 20: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/20.jpg)
Erlang — это круто
![Page 21: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/21.jpg)
Erlang — это круто•Вся память разделена на изолированные
потоки исполнения
![Page 22: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/22.jpg)
Erlang — это круто•Вся память разделена на изолированные
потоки исполнения
•Общение происходит через обмен копируемыми сообщениями
![Page 23: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/23.jpg)
Erlang — это круто•Вся память разделена на изолированные
потоки исполнения
•Общение происходит через обмен копируемыми сообщениями
•Все данные немутабельны, ссылок нет
![Page 24: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/24.jpg)
Erlang — это круто•Вся память разделена на изолированные
потоки исполнения
•Общение происходит через обмен копируемыми сообщениями
•Все данные немутабельны, ссылок нет
•Эти потоки выглядят как процессы ОС и так же называются — «процессы»
![Page 25: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/25.jpg)
Erlang — это круто
Спроектирован программистами Ericsson, которые очень хотели спать по ночам
![Page 26: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/26.jpg)
А вы хотите, что бы ночью работало
только ПО?
![Page 27: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/27.jpg)
Решение проблем•Просто и автоматически
![Page 28: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/28.jpg)
Решение проблем•Просто и автоматически
•Данные живут не дольше процесса
![Page 29: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/29.jpg)
Решение проблем•Просто и автоматически
•Данные живут не дольше процесса
•Отсутствие мутабельности и ссылок снимает проблему их утекания
![Page 30: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/30.jpg)
Решение проблем•Просто и автоматически
•Данные живут не дольше процесса
•Отсутствие мутабельности и ссылок снимает проблему их утекания
•Ошибки автоматически пишутся в лог и завершают текущий процесс
![Page 31: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/31.jpg)
Решение проблем•Просто и автоматически
•Данные живут не дольше процесса
•Отсутствие мутабельности и ссылок снимает проблему их утекания
•Ошибки автоматически пишутся в лог и завершают текущий процесс
•Ресурсы закрываются вместе с процессом
![Page 32: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/32.jpg)
Let it crash
•Программистам платят только за happy path
•Продавцы продают код, а не обработку ошибок
![Page 33: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/33.jpg)
ERror handling LANGuage
{ok, F} = file:open(“a.txt”),
{ok, Bin} = file:read(F, 1024)
![Page 34: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/34.jpg)
soft-realtime
•Нет ссылок
•у каждого процесса изолированная куча
•сборка мусора раздельная по ядрам
![Page 35: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/35.jpg)
Многоядерность
•Процессы изолированы
•Никаких взаимных мьютексов
•Автоматический шедулинг по ядрам из коробки
![Page 36: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/36.jpg)
Горячая замена кода
•Деплой кода без отключения онлайн пользователей
![Page 37: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/37.jpg)
Легкая кластеризация
•Сообщения точно так же копируются по сети
•Идентификаторы процессов прозрачно переходят по сети
![Page 38: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/38.jpg)
Говорят, Node.js круче
•Нам не нужны изолированные треды
•Нам не нужна многопроцессорность из коробки
•Нам не нужна готовая инфраструктура обработки ошибок
•Нам не нужна прозрачная сетевая работа
•Мы выбираем server-side JS, потому что мы знаем JS
![Page 39: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/39.jpg)
Evented — шаг назад
•Evented подход превращает код в спагетти
•Обработка ошибок в коллбеках ещё сложнее чем try/catch
•Ни одна указанная проблема не решается
•Годится для nginx
![Page 40: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/40.jpg)
В Erlang и это круче
{ok, F} = http_file:open(“http://ya.ru/”),
{ok, Bin} = http_file:read(F, 1024)
![Page 41: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/41.jpg)
Резюме
•Классические решения имеют проблемы, вылезающие в продакшне
•Проблемы дизайна усложняют включение новых программистов
•Некоторые «модные» технологии ничего нового не привносят
![Page 42: что и почему вы должны программировать на Erlang.максим лапшин. зал 4](https://reader035.vdocuments.pub/reader035/viewer/2022062220/557f4933d8b42ac3288b4fd5/html5/thumbnails/42.jpg)
Резюме•В Erlang дизайн платформы решает
указанные проблем
•Удешевляется поддержка и программирование
•Растет плотность информации в коде (до 10 раз)
•Облегчается включение новых программистов