Краткое введение в erlang/otp

44
Краткое введение в Erlang/OTP Александр Карпич «Планар» twitter.com/_ymn 5-я конференция .NET разработчиков 21 октября 2012 www.dotnetconf.ru

Upload: ymn

Post on 16-Jun-2015

649 views

Category:

Education


0 download

DESCRIPTION

По материалам конференции .NET разработчиков - www.dotnetconf.ru

TRANSCRIPT

Page 1: Краткое введение в Erlang/OTP

Краткое введение в Erlang/OTP

Александр Карпич«Планар»

twitter.com/_ymn

5-я конференция .NET разработчиков21 октября 2012www.dotnetconf.ru

Page 2: Краткое введение в Erlang/OTP

2Краткое введение в Erlang/OTP, Александр Карпич

Веб сегодня

● Большое количество пользователей

● Множество долгоживущих соединений

● Многопроцессорные конфигурации оборудования

Page 3: Краткое введение в Erlang/OTP

3Краткое введение в Erlang/OTP, Александр Карпич

Больше интерактива!

● Аудио/видео стримминг● Системы обмена сообщениями● Мобильные приложения

Page 4: Краткое введение в Erlang/OTP

4Краткое введение в Erlang/OTP, Александр Карпич

Инструменты:

● C++● Java● .NET● Node.JS● Всякие Python, Perl, Ruby

Page 5: Краткое введение в Erlang/OTP

5Краткое введение в Erlang/OTP, Александр Карпич

Проблемы реализации

● Утечки памяти● Утечки ресурсов● Сложность параллельного

программирования● Проблемы с масштабированием

Page 6: Краткое введение в Erlang/OTP

6Краткое введение в Erlang/OTP, Александр Карпич

Серебряной пули нет

Page 7: Краткое введение в Erlang/OTP

7Краткое введение в Erlang/OTP, Александр Карпич

Но есть инструмент, позволяющий решать многие проблемы

Page 8: Краткое введение в Erlang/OTP

8Краткое введение в Erlang/OTP, Александр Карпич

Page 9: Краткое введение в Erlang/OTP

9Краткое введение в Erlang/OTP, Александр Карпич

● 25 лет использования в продакшн● Придуман ленивыми инженерами,

которые хотели проводить выходные дома● Erlang — не академическая поделка вроде

Haskell● Разрабатывался и тестировался в «боевых»

условиях

Page 10: Краткое введение в Erlang/OTP

10Краткое введение в Erlang/OTP, Александр Карпич

Кто использует?

Page 11: Краткое введение в Erlang/OTP

11Краткое введение в Erlang/OTP, Александр Карпич

«You probably use systems based on Erlang/OTP every day

without knowing it.»

Mike Williams

Page 12: Краткое введение в Erlang/OTP

12Краткое введение в Erlang/OTP, Александр Карпич

Кто использует

Page 13: Краткое введение в Erlang/OTP

13Краткое введение в Erlang/OTP, Александр Карпич

Что написано

Page 14: Краткое введение в Erlang/OTP

14Краткое введение в Erlang/OTP, Александр Карпич

Killer features

•Изолированные потоки исполнения•Обмен копируемыми сообщениями•Иммутабельные данные

Page 15: Краткое введение в Erlang/OTP

15Краткое введение в Erlang/OTP, Александр Карпич

Решение проблем

•Иммутабельные данные решают проблему утечек ресурсов•Данные умирают вместе с процессами•Специфическая обработка ошибок

Page 16: Краткое введение в Erlang/OTP

16Краткое введение в Erlang/OTP, Александр Карпич

Обработка ошибок

•Проверка входящих параметров?•Исключения?•POSIX Сигналы?

Page 17: Краткое введение в Erlang/OTP

17Краткое введение в Erlang/OTP, Александр Карпич

Есть идея получше

Page 18: Краткое введение в Erlang/OTP

18Краткое введение в Erlang/OTP, Александр Карпич

Let it fail!

Page 19: Краткое введение в Erlang/OTP

19Краткое введение в Erlang/OTP, Александр Карпич

Worker/Supervisor

Page 20: Краткое введение в Erlang/OTP

20Краткое введение в Erlang/OTP, Александр Карпич

one_for_one

Page 21: Краткое введение в Erlang/OTP

21Краткое введение в Erlang/OTP, Александр Карпич

one_for_one

Page 22: Краткое введение в Erlang/OTP

22Краткое введение в Erlang/OTP, Александр Карпич

one_for_one

Page 23: Краткое введение в Erlang/OTP

23Краткое введение в Erlang/OTP, Александр Карпич

all_for_one

Page 24: Краткое введение в Erlang/OTP

24Краткое введение в Erlang/OTP, Александр Карпич

all_for_one

Page 25: Краткое введение в Erlang/OTP

25Краткое введение в Erlang/OTP, Александр Карпич

all_for_one

Page 26: Краткое введение в Erlang/OTP

26Краткое введение в Erlang/OTP, Александр Карпич

Учим Erlang за 40 минут

Page 27: Краткое введение в Erlang/OTP

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

28Краткое введение в Erlang/OTP, Александр Карпич

Переменные

•Имена начинаются с большой буквы•Одиночное присваивание

1> A = 42.422> A = 43.** exception error: no match of right hand side value 43

Page 29: Краткое введение в Erlang/OTP

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

30Краткое введение в Erlang/OTP, Александр Карпич

Hello World!

-module(hello).-export([start/0]).

start() ->io:format("Hello world!~n").

Page 31: Краткое введение в Erlang/OTP

31Краткое введение в Erlang/OTP, Александр Карпич

Page 32: Краткое введение в Erlang/OTP

32Краткое введение в Erlang/OTP, Александр Карпич

Создаем процесс

Pid = spawn(mod, func, [A, B, C]).

Page 33: Краткое введение в Erlang/OTP

33Краткое введение в Erlang/OTP, Александр Карпич

Отправляем сообщение

Pid ! Msg.

Page 34: Краткое введение в Erlang/OTP

34Краткое введение в Erlang/OTP, Александр Карпич

Принимаем сообщение

receiveMsg → Msg

end.

Page 35: Краткое введение в Erlang/OTP

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

36Краткое введение в Erlang/OTP, Александр Карпич

Сравнение с другими языками

Page 37: Краткое введение в Erlang/OTP

37Краткое введение в Erlang/OTP, Александр Карпич

Erlang vs. C/C++

•Более продуктивен•Более надежен•Более краток•Модель акторов•На порядок медленнее

Page 38: Краткое введение в Erlang/OTP

38Краткое введение в Erlang/OTP, Александр Карпич

Erlang vs. Java

•Проектировался для многопроцессорных конфигураций•Легко масштабируется•Горячая замена кода•Меньше библиотек

Page 39: Краткое введение в Erlang/OTP

39Краткое введение в Erlang/OTP, Александр Карпич

Недостатки

•На порядок медленнее C•Работа со строками•Динамическая типизация•Непривычный синтаксис

Page 40: Краткое введение в Erlang/OTP

40Краткое введение в Erlang/OTP, Александр Карпич

Расширяем возможности

Page 41: Краткое введение в Erlang/OTP

41Краткое введение в Erlang/OTP, Александр Карпич

Page 42: Краткое введение в Erlang/OTP

42Краткое введение в Erlang/OTP, Александр Карпич

Материалы для обучения

Page 43: Краткое введение в 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/

Page 44: Краткое введение в Erlang/OTP

44Краткое введение в Erlang/OTP, Александр Карпич

Спасибо за внимание

Александр Карпич«Планар»

[email protected]

twitter.com/_ymn