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