SlideShare a Scribd company logo
1 of 44
Download to read offline
5-я конференция .NET разработчиков
21 октября 2012
www.dotnetconf.ru




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

                               Александр Карпич
                                    «Планар»
                                twitter.com/_ymn
Веб сегодня
●
    Большое количество
    пользователей
●
    Множество долгоживущих
    соединений
●
    Многопроцессорные
    конфигурации оборудования

         Краткое введение в Erlang/OTP Александр Карпич
                                      ,                   2
Больше интерактива!
●
    Аудио/видео стримминг
●
    Системы обмена сообщениями
●
    Мобильные приложения




         Краткое введение в Erlang/OTP Александр Карпич
                                      ,                   3
Инструменты:
●
    C++
●
    Java
●
    .NET
●
    Node.JS
●
    Всякие Python, Perl, Ruby

           Краткое введение в Erlang/OTP Александр Карпич
                                        ,                   4
Проблемы реализации
●
    Утечки памяти
●
    Утечки ресурсов
●
    Сложность параллельного
    программирования
●
    Проблемы с масштабированием

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




 Краткое введение в Erlang/OTP Александр Карпич
                              ,                   6
Но есть инструмент, позволяющий
    решать многие проблемы



       Краткое введение в Erlang/OTP Александр Карпич
                                    ,                   7
Краткое введение в Erlang/OTP Александр Карпич
                             ,                   8
●
    25 лет использования в продакшн
●
    Придуман ленивыми инженерами,
    которые хотели проводить выходные дома
●
    Erlang — не академическая поделка вроде
    Haskell
●
    Разрабатывался и тестировался в «боевых»
    условиях


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




Краткое введение в Erlang/OTP Александр Карпич
                             ,                   10
«You probably use systems based
    on Erlang/OTP every day
      without knowing it.»

                                                Mike Williams


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




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




Краткое введение в Erlang/OTP Александр Карпич
                             ,                   13
Killer features
• Изолированные потоки исполнения
• Обмен копируемыми сообщениями
• Иммутабельные данные




       Краткое введение в Erlang/OTP Александр Карпич
                                    ,                   14
Решение проблем
• Иммутабельные данные решают
  проблему утечек ресурсов
• Данные умирают вместе с
  процессами
• Специфическая обработка ошибок



       Краткое введение в Erlang/OTP Александр Карпич
                                    ,                   15
Обработка ошибок
• Проверка входящих параметров?
• Исключения?
• POSIX Сигналы?




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




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




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




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




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




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




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




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




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




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




   Краткое введение в Erlang/OTP Александр Карпич
                                ,                   26
Типы
• Числа — 42, 3.14, 9.1E-31
• Атомы — ok, true, blablabla
• Кортежи — {1, true, {msg, 123}, 42}
• Списки — [1, 2, [3, 4]]
• Строки — «abc», [97, 98, 99]
• Булева логика — true, false

         Краткое введение в Erlang/OTP Александр Карпич
                                      ,                   27
Переменные
• Имена начинаются с большой буквы
• Одиночное присваивание

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



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


fib(0) → 0;
fib(1) → 1;
fib(N) when N>1 → fib(N-1) + fib(N-2).




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

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

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




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



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




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



               Pid ! Msg.




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



          receive
            Msg → Msg
          end.


  Краткое введение в Erlang/OTP Александр Карпич
                               ,                   34
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.

                 Краткое введение в Erlang/OTP Александр Карпич
                                              ,                   35
Сравнение с другими языками




   Краткое введение в Erlang/OTP Александр Карпич
                                ,                   36
Erlang vs. C/C++
• Более продуктивен
• Более надежен
• Более краток
• Модель акторов
• На порядок медленнее



       Краткое введение в Erlang/OTP Александр Карпич
                                    ,                   37
Erlang vs. Java
• Проектировался для
  многопроцессорных конфигураций
• Легко масштабируется
• Горячая замена кода
• Меньше библиотек



       Краткое введение в Erlang/OTP Александр Карпич
                                    ,                   38
Недостатки
• На порядок медленнее C
• Работа со строками
• Динамическая типизация
• Непривычный синтаксис




       Краткое введение в Erlang/OTP Александр Карпич
                                    ,                   39
Расширяем возможности




 Краткое введение в Erlang/OTP Александр Карпич
                              ,                   40
Краткое введение в Erlang/OTP Александр Карпич
                             ,                   41
Материалы для обучения




 Краткое введение в Erlang/OTP Александр Карпич
                              ,                   42
• http://learnyousomeerlang.com/
• Armstrong — «Programming Erlang:
  Software for Concurrent World»
• Cesarini, Thompson — «Erlang
  Programming»
• erlang@conference.jabber.ru
• http://erlang-russian.org/

        Краткое введение в Erlang/OTP Александр Карпич
                                     ,                   43
Спасибо за внимание

          Александр Карпич
                «Планар»
        avkarpich@gmail.com
           twitter.com/_ymn




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

More Related Content

Viewers also liked

Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьYuri Zhloba
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыYuri Zhloba
 
Бутылка саке и муравей
Бутылка саке и муравейБутылка саке и муравей
Бутылка саке и муравейAlexander Byndyu
 
Data mining в реальном проекте
Data mining в реальном проектеData mining в реальном проекте
Data mining в реальном проектеAlexander Byndyu
 
Не SQL'ем единым
Не SQL'ем единымНе SQL'ем единым
Не SQL'ем единымAlexander Byndyu
 
код шрёдингера
код шрёдингеракод шрёдингера
код шрёдингераRuslan Safin
 
Смотрим на Mvvm сквозь prism'у
Смотрим на Mvvm сквозь prism'уСмотрим на Mvvm сквозь prism'у
Смотрим на Mvvm сквозь prism'уAlexander Byndyu
 
Клиентская оптимизация в ритме военного марша
Клиентская оптимизация в ритме военного маршаКлиентская оптимизация в ритме военного марша
Клиентская оптимизация в ритме военного маршаAlexander Byndyu
 
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.Alexander Byndyu
 
Много данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'еМного данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'еAlexander Byndyu
 
Отличие Erlang от объектных языков
Отличие Erlang от объектных языковОтличие Erlang от объектных языков
Отличие Erlang от объектных языковMax Lapshin
 
Модульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETAlexander Byndyu
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
Непрерывная интеграция в ритме военного марша
Непрерывная интеграция в ритме военного маршаНепрерывная интеграция в ритме военного марша
Непрерывная интеграция в ритме военного маршаAlexander Byndyu
 
RabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работаетRabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работаетAlexander Byndyu
 
Agile на практике
Agile на практикеAgile на практике
Agile на практикеAlexander Byndyu
 
Cassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахCassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахAlexander Mezhov
 
Индексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизацииИндексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизацииAlexander Byndyu
 

Viewers also liked (20)

Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитать
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игры
 
Бутылка саке и муравей
Бутылка саке и муравейБутылка саке и муравей
Бутылка саке и муравей
 
Data mining в реальном проекте
Data mining в реальном проектеData mining в реальном проекте
Data mining в реальном проекте
 
Не SQL'ем единым
Не SQL'ем единымНе SQL'ем единым
Не SQL'ем единым
 
код шрёдингера
код шрёдингеракод шрёдингера
код шрёдингера
 
Смотрим на Mvvm сквозь prism'у
Смотрим на Mvvm сквозь prism'уСмотрим на Mvvm сквозь prism'у
Смотрим на Mvvm сквозь prism'у
 
Клиентская оптимизация в ритме военного марша
Клиентская оптимизация в ритме военного маршаКлиентская оптимизация в ритме военного марша
Клиентская оптимизация в ритме военного марша
 
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.
Продуктово-аутсорсинговая разработка. Развитие продуктовых идей.
 
Много данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'еМного данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'е
 
Отличие Erlang от объектных языков
Отличие Erlang от объектных языковОтличие Erlang от объектных языков
Отличие Erlang от объектных языков
 
Модульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NET
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Непрерывная интеграция в ритме военного марша
Непрерывная интеграция в ритме военного маршаНепрерывная интеграция в ритме военного марша
Непрерывная интеграция в ритме военного марша
 
RabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работаетRabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работает
 
Agile на практике
Agile на практикеAgile на практике
Agile на практике
 
Cassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахCassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системах
 
Индексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизацииИндексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизации
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Scala #3
Scala #3Scala #3
Scala #3
 

More from Alexander Byndyu

Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...Alexander Byndyu
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеAlexander Byndyu
 
Антихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить измененияАнтихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить измененияAlexander Byndyu
 
Карта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планированияКарта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планированияAlexander Byndyu
 
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиКак перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиAlexander Byndyu
 
История о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проектаИстория о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проектаAlexander Byndyu
 
Шпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателяШпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателяAlexander Byndyu
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияAlexander Byndyu
 
IT-директор на аутсорсе
IT-директор на аутсорсеIT-директор на аутсорсе
IT-директор на аутсорсеAlexander Byndyu
 
Бизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуруБизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуруAlexander Byndyu
 
Impact Mapping на практике v2
Impact Mapping на практике v2Impact Mapping на практике v2
Impact Mapping на практике v2Alexander Byndyu
 
Кнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаКнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаAlexander Byndyu
 
Пять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктовПять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктовAlexander Byndyu
 
Пять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектовПять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектовAlexander Byndyu
 
Impact mapping in practice
Impact mapping in practiceImpact mapping in practice
Impact mapping in practiceAlexander Byndyu
 
Impact Mapping на практике
Impact Mapping на практикеImpact Mapping на практике
Impact Mapping на практикеAlexander Byndyu
 
Customer satisfaction для программистов
Customer satisfaction для программистовCustomer satisfaction для программистов
Customer satisfaction для программистовAlexander Byndyu
 
CQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафорCQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафорAlexander Byndyu
 
Как размножается Sphinx
Как размножается SphinxКак размножается Sphinx
Как размножается SphinxAlexander Byndyu
 

More from Alexander Byndyu (20)

Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзе
 
Антихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить измененияАнтихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить изменения
 
Карта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планированияКарта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планирования
 
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиКак перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
 
История о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проектаИстория о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проекта
 
Шпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателяШпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателя
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс Россия
 
IT-директор на аутсорсе
IT-директор на аутсорсеIT-директор на аутсорсе
IT-директор на аутсорсе
 
Бизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуруБизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуру
 
Impact Mapping на практике v2
Impact Mapping на практике v2Impact Mapping на практике v2
Impact Mapping на практике v2
 
Кнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаКнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продукта
 
Пять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктовПять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктов
 
Пять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектовПять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектов
 
Час Кода 2015
Час Кода 2015Час Кода 2015
Час Кода 2015
 
Impact mapping in practice
Impact mapping in practiceImpact mapping in practice
Impact mapping in practice
 
Impact Mapping на практике
Impact Mapping на практикеImpact Mapping на практике
Impact Mapping на практике
 
Customer satisfaction для программистов
Customer satisfaction для программистовCustomer satisfaction для программистов
Customer satisfaction для программистов
 
CQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафорCQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафор
 
Как размножается Sphinx
Как размножается SphinxКак размножается Sphinx
Как размножается Sphinx
 

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