Краткое введение в Erlang/OTP
description
Transcript of Краткое введение в Erlang/OTP
![Page 1: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/1.jpg)
Краткое введение в Erlang/OTP
Александр Карпич«Планар»
twitter.com/_ymn
5-я конференция .NET разработчиков21 октября 2012www.dotnetconf.ru
![Page 2: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/2.jpg)
2Краткое введение в Erlang/OTP, Александр Карпич
Веб сегодня
● Большое количество пользователей
● Множество долгоживущих соединений
● Многопроцессорные конфигурации оборудования
![Page 3: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/3.jpg)
3Краткое введение в Erlang/OTP, Александр Карпич
Больше интерактива!
● Аудио/видео стримминг● Системы обмена сообщениями● Мобильные приложения
![Page 4: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/4.jpg)
4Краткое введение в Erlang/OTP, Александр Карпич
Инструменты:
● C++● Java● .NET● Node.JS● Всякие Python, Perl, Ruby
![Page 5: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/5.jpg)
5Краткое введение в Erlang/OTP, Александр Карпич
Проблемы реализации
● Утечки памяти● Утечки ресурсов● Сложность параллельного
программирования● Проблемы с масштабированием
![Page 6: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/6.jpg)
6Краткое введение в Erlang/OTP, Александр Карпич
Серебряной пули нет
![Page 7: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/7.jpg)
7Краткое введение в Erlang/OTP, Александр Карпич
Но есть инструмент, позволяющий решать многие проблемы
![Page 8: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/8.jpg)
8Краткое введение в Erlang/OTP, Александр Карпич
![Page 9: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/9.jpg)
9Краткое введение в Erlang/OTP, Александр Карпич
● 25 лет использования в продакшн● Придуман ленивыми инженерами,
которые хотели проводить выходные дома● Erlang — не академическая поделка вроде
Haskell● Разрабатывался и тестировался в «боевых»
условиях
![Page 10: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/10.jpg)
10Краткое введение в Erlang/OTP, Александр Карпич
Кто использует?
![Page 11: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/11.jpg)
11Краткое введение в Erlang/OTP, Александр Карпич
«You probably use systems based on Erlang/OTP every day
without knowing it.»
Mike Williams
![Page 12: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/12.jpg)
12Краткое введение в Erlang/OTP, Александр Карпич
Кто использует
![Page 13: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/13.jpg)
13Краткое введение в Erlang/OTP, Александр Карпич
Что написано
![Page 14: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/14.jpg)
14Краткое введение в Erlang/OTP, Александр Карпич
Killer features
•Изолированные потоки исполнения•Обмен копируемыми сообщениями•Иммутабельные данные
![Page 15: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/15.jpg)
15Краткое введение в Erlang/OTP, Александр Карпич
Решение проблем
•Иммутабельные данные решают проблему утечек ресурсов•Данные умирают вместе с процессами•Специфическая обработка ошибок
![Page 16: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/16.jpg)
16Краткое введение в Erlang/OTP, Александр Карпич
Обработка ошибок
•Проверка входящих параметров?•Исключения?•POSIX Сигналы?
![Page 17: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/17.jpg)
17Краткое введение в Erlang/OTP, Александр Карпич
Есть идея получше
![Page 18: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/18.jpg)
18Краткое введение в Erlang/OTP, Александр Карпич
Let it fail!
![Page 19: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/19.jpg)
19Краткое введение в Erlang/OTP, Александр Карпич
Worker/Supervisor
![Page 20: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/20.jpg)
20Краткое введение в Erlang/OTP, Александр Карпич
one_for_one
![Page 21: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/21.jpg)
21Краткое введение в Erlang/OTP, Александр Карпич
one_for_one
![Page 22: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/22.jpg)
22Краткое введение в Erlang/OTP, Александр Карпич
one_for_one
![Page 23: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/23.jpg)
23Краткое введение в Erlang/OTP, Александр Карпич
all_for_one
![Page 24: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/24.jpg)
24Краткое введение в Erlang/OTP, Александр Карпич
all_for_one
![Page 25: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/25.jpg)
25Краткое введение в Erlang/OTP, Александр Карпич
all_for_one
![Page 26: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/26.jpg)
26Краткое введение в Erlang/OTP, Александр Карпич
Учим Erlang за 40 минут
![Page 27: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/27.jpg)
27Краткое введение в Erlang/OTP, Александр Карпич
Типы
•Числа — 42, 3.14, 9.1E-31•Атомы — ok, true, blablabla•Кортежи — {1, true, {msg, 123}, 42}•Списки — [1, 2, [3, 4]]•Строки — «abc», [97, 98, 99]•Булева логика — true, false
![Page 28: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/28.jpg)
28Краткое введение в Erlang/OTP, Александр Карпич
Переменные
•Имена начинаются с большой буквы•Одиночное присваивание
1> A = 42.422> A = 43.** exception error: no match of right hand side value 43
![Page 29: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/29.jpg)
29Краткое введение в Erlang/OTP, Александр Карпич
Pattern matching
fib(0) → 0;fib(1) → 1;fib(N) when N>1 → fib(N-1) + fib(N-2).
![Page 30: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/30.jpg)
30Краткое введение в Erlang/OTP, Александр Карпич
Hello World!
-module(hello).-export([start/0]).
start() ->io:format("Hello world!~n").
![Page 31: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/31.jpg)
31Краткое введение в Erlang/OTP, Александр Карпич
![Page 32: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/32.jpg)
32Краткое введение в Erlang/OTP, Александр Карпич
Создаем процесс
Pid = spawn(mod, func, [A, B, C]).
![Page 33: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/33.jpg)
33Краткое введение в Erlang/OTP, Александр Карпич
Отправляем сообщение
Pid ! Msg.
![Page 34: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/34.jpg)
34Краткое введение в Erlang/OTP, Александр Карпич
Принимаем сообщение
receiveMsg → Msg
end.
![Page 35: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/35.jpg)
35Краткое введение в Erlang/OTP, Александр Карпич
Hello World!
-module(hello).-export([start/0, loop/0]).
start() ->Pid = spawn(hello, loop, []),Pid ! hello.
loop() ->receive
hello ->io:format("Hello, World!~n"),loop()
end.
![Page 36: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/36.jpg)
36Краткое введение в Erlang/OTP, Александр Карпич
Сравнение с другими языками
![Page 37: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/37.jpg)
37Краткое введение в Erlang/OTP, Александр Карпич
Erlang vs. C/C++
•Более продуктивен•Более надежен•Более краток•Модель акторов•На порядок медленнее
![Page 38: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/38.jpg)
38Краткое введение в Erlang/OTP, Александр Карпич
Erlang vs. Java
•Проектировался для многопроцессорных конфигураций•Легко масштабируется•Горячая замена кода•Меньше библиотек
![Page 39: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/39.jpg)
39Краткое введение в Erlang/OTP, Александр Карпич
Недостатки
•На порядок медленнее C•Работа со строками•Динамическая типизация•Непривычный синтаксис
![Page 40: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/40.jpg)
40Краткое введение в Erlang/OTP, Александр Карпич
Расширяем возможности
![Page 41: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/41.jpg)
41Краткое введение в Erlang/OTP, Александр Карпич
![Page 42: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/42.jpg)
42Краткое введение в Erlang/OTP, Александр Карпич
Материалы для обучения
![Page 43: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/43.jpg)
43Краткое введение в Erlang/OTP, Александр Карпич
•http://learnyousomeerlang.com/•Armstrong — «Programming Erlang: Software for Concurrent World»•Cesarini, Thompson — «Erlang Programming»•[email protected]•http://erlang-russian.org/
![Page 44: Краткое введение в Erlang/OTP](https://reader033.fdocument.pub/reader033/viewer/2022051515/557fe531d8b42a117e8b4ff0/html5/thumbnails/44.jpg)
44Краткое введение в Erlang/OTP, Александр Карпич
Спасибо за внимание
Александр Карпич«Планар»
twitter.com/_ymn