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

Post on 14-Dec-2014

1.043 views 3 download

description

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

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»•erlang@conference.jabber.ru•http://erlang-russian.org/

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

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

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

avkarpich@gmail.com

twitter.com/_ymn