SlideShare a Scribd company logo
Erlang
Прагматичный рассказ про прагматичный язык




                                      yzh44yzh.com
●   Немного истории
●   Обзор языка
    ●   Многопоточность
    ●   Устойчивость к ошибкам
    ●   Распределенность
    ●   Горячее обновление
●   Live Coding: сервис сокращенных ссылок
●   OTP фреймворк
●   Сфера применения. Истории успеха.
●   Импровизация по другим темам :)


                                             yzh44yzh.com
Немного истории

●   Ericsson 70-e годы. Язык и ОС PLEX
●   1985 г – исследование существующих языков
●   1987 г – началась разработка Erlang
●   1995 г – релиз Erlang
●   1996 г – релиз OTP
●   1998 г – Erlang/OTP выпущены в open source
●   2006 г – рост популярности платформы




                                                 yzh44yzh.com
Обзор языка.



    ●   Многопоточность
    ●   Устойчивость к ошибкам
    ●   Распределенность
    ●   Горячее обновление




                                 yzh44yzh.com
Обзор языка.



  ●   Erlang Run-Time System (ERTS)
      ●   Sheduler
      ●   I/O
      ●   Garbage Collector




                                      yzh44yzh.com
Обзор языка. Многопоточность.



●   Shared memory with locks? Нет (ну почти нет)
●   Software transactional memory? Нет (ну почти нет)
●   Futures, Promises и подобное? Нет
●   Message Passing – это оно :)




                                                   yzh44yzh.com
Обзор языка. Многопоточность.

   run() ->
       Pid = spawn(fun ping/0),
       Pid ! self(),
       receive
            pong -> ok
       end.

   ping() ->
       receive
            From -> From ! pong
       end.




                                  yzh44yzh.com
Обзор языка. Устойчивость к ошибкам.




 Defensive Programming – не нужно

      Try … catch – не нужно




                                    yzh44yzh.com
Обзор языка. Устойчивость к ошибкам.




        Let It Crush




                               yzh44yzh.com
Обзор языка. Устойчивость к ошибкам.




Делаем только Happy Case :)




                                yzh44yzh.com
Обзор языка. Устойчивость к ошибкам.




                               yzh44yzh.com
Обзор языка. Распределенность.




         Erlang Node




                                 yzh44yzh.com
Обзор языка. Распределенность.




         Message Passing


       Location Transparency




                                 yzh44yzh.com
Обзор языка. Распределенность.




        Trusted окружение

               или


           TCP сокеты




                                 yzh44yzh.com
Обзор языка. Горячее обновление.




●   Обновить beam
●   Использовать инфраструктуру OTP фреймворка




                                            yzh44yzh.com
OTP фреймворк.




   Open Telecom Platform




                           yzh44yzh.com
OTP фреймворк.



         Set of principles:
     ●   Supervision Trees
     ●   Behaviours
     ●   Applications
     ●   Releases




                              yzh44yzh.com
OTP фреймворк. Behaviours.



         ●   gen_server
         ●   gen_event
         ●   gen_fsm
         ●   supervisor




                             yzh44yzh.com
OTP фреймворк. gen_server.


        ●   init/1
        ●   handle_call/3
        ●   handle_cast/2
        ●   handle_info/2
        ●   terminate/2
        ●   code_change/3




                             yzh44yzh.com
OTP фреймворк. gen_event.




        ●   event
        ●   event manager
        ●   event handlers




                             yzh44yzh.com
OTP фреймворк. gen_event.


●   gen_event:start({local, manager_name}).
●   gen_event:add_handler(manager_name,
    handler_module, []).
●   gen_event:notify(manager_name, event).
●   gen_event:delete_handler(manager_name,
    handler_module, []).




                                              yzh44yzh.com
OTP фреймворк. gen_fsm.




       Finite State Machine




                              yzh44yzh.com
OTP фреймворк. supervisor.



           Restart Strategy:
       ●   one_for_one
       ●   one_for_all
       ●   rest_for_one




                               yzh44yzh.com
OTP фреймворк. supervisor.


    Child Specification:
●   Id = term()
●   StartFunc = {M, F, A}
●   Restart = permanent | transient | temporary
●   Shutdown = brutal_kill | integer() >=0 | infinity
●   Type = worker | supervisor
●   Modules = [Module]




                                                        yzh44yzh.com
OTP фреймворк. application.


    Directory Structure:
●   src -- contains the Erlang source code.
●   ebin -- contains the Erlang object code, the beam files.
●   include -- used for include files.
●   priv -- used for application specific files.




                                                         yzh44yzh.com
OTP фреймворк. application.

   application resource file

   {application, ch_app,
    [{description, "Channel allocator"},
     {vsn, "1"},
     {modules, [ch_app, ch_sup, ch3]},
     {registered, [ch3]},
     {applications, [kernel, stdlib, sasl]},
     {mod, {ch_app,[]}}
    ]}.




                                               yzh44yzh.com
Сфера применения.

    Долгоживущие сервеные приложения, обеспечивающие
    коммуникацию большого числа пользователей.
●   computer telephony
●   messaging systems
●   retail and commercial banking
●   enterprise
●   web services




                                               yzh44yzh.com
Истории успеха.

    AXD301 ATM Switch
●   telephony-class 10–160 Gbps ATM switch
●   1.5 million lines of Erlang code
●   has been installed in networks all over the world
●   largest “Voice over ATM” backbone in the world
●   99.9999999% availability.
●   Erlang code was 4 to 10 times shorter than similar
    systems written in C/C++, Java, and PLEX



                                                        yzh44yzh.com
Истории успеха.


    CouchDB
●   open source database made by Damien Katz
●   schema-less replicated document store, storing objects in JSON
    format
●   and accessed through a RESTful interface.
●   first version of CouchDB in C++
●   entire C++ code base was replaced with Erlang
●   one of the best known Erlang open source applications currently
    being used in production systems worldwide.


                                                           yzh44yzh.com
Импровизация по другим темам :)


●   Недостатки языка
●   Средства разработки (Emacs, Erlide, ErlGray)
●   Книги
●   Чем Erlang лучше Scala, чем Scala лучше Erlang?
●   Как убедить себя, работодателя, заказчика
    использовать Erlang?
●   Предложите свою тему :)




                                                   yzh44yzh.com

More Related Content

PDF
20140310 parallel programming_kalishenko_lecture03-04
PDF
TeaVM: dead code elimination and devirtualization
PDF
2012 03 14_parallel_programming_lecture05
PPTX
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
PDF
Rust - GDG DevFest 2016 Nizhny Novgorod
PDF
PDF
Rust: история языка и контекст применения
PPTX
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
20140310 parallel programming_kalishenko_lecture03-04
TeaVM: dead code elimination and devirtualization
2012 03 14_parallel_programming_lecture05
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust: история языка и контекст применения
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...

Similar to Erlang: прагматичный рассказ про прагматичный язык (20)

PPTX
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
PDF
Serghei Iakovlev "Chaos engineering in action"
KEY
Erlyvideo — сервер потокового видео.
PPTX
Sphinx: распределяя индексы.
PDF
Как перезапустить проблемное приложение и одновременно отладить его
PPTX
Язык программирования PHP
PDF
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
PDF
Erlang мгновенное просветление
PDF
Полезное покрытие кода
PPTX
Multithreading in go
PPTX
Инструменты профайлинга С++ кода
PDF
Баннерокрутилка на Erlang
PDF
Максим Лапшин. Erlang production
PDF
Async Python
PPT
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PPTX
Aspect-Oriented Programming in PHP
PDF
Build your own multistack JS startup
PDF
Построение мультисервисного стартапа в реалиях full-stack javascript
PPTX
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
PDF
Scala performance под капотом
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
Serghei Iakovlev "Chaos engineering in action"
Erlyvideo — сервер потокового видео.
Sphinx: распределяя индексы.
Как перезапустить проблемное приложение и одновременно отладить его
Язык программирования PHP
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Erlang мгновенное просветление
Полезное покрытие кода
Multithreading in go
Инструменты профайлинга С++ кода
Баннерокрутилка на Erlang
Максим Лапшин. Erlang production
Async Python
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
Aspect-Oriented Programming in PHP
Build your own multistack JS startup
Построение мультисервисного стартапа в реалиях full-stack javascript
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
Scala performance под капотом
Ad

More from Vasil Remeniuk (20)

PPTX
Product Minsk - РТБ и Программатик
PDF
Работа с Akka Сluster, @afiskon, scalaby#14
PDF
Cake pattern. Presentation by Alex Famin at scalaby#14
PDF
Scala laboratory: Globus. iteration #3
PPTX
Testing in Scala by Adform research
PPTX
Spark Intro by Adform Research
PPTX
Types by Adform Research, Saulius Valatka
PPTX
Types by Adform Research
PPTX
Scalding by Adform Research, Alex Gryzlov
PPTX
Scalding by Adform Research, Alex Gryzlov
PPTX
Spark by Adform Research, Paulius
PPTX
Scala Style by Adform Research (Saulius Valatka)
PPTX
Spark intro by Adform Research
PPTX
SBT by Aform Research, Saulius Valatka
PDF
Scala laboratory: Globus. iteration #2
PPTX
Testing in Scala. Adform Research
PDF
Scala laboratory. Globus. iteration #1
PDF
Cassandra + Spark + Elk
PDF
Опыт использования Spark, Основано на реальных событиях
PDF
ETL со Spark
Product Minsk - РТБ и Программатик
Работа с Akka Сluster, @afiskon, scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14
Scala laboratory: Globus. iteration #3
Testing in Scala by Adform research
Spark Intro by Adform Research
Types by Adform Research, Saulius Valatka
Types by Adform Research
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex Gryzlov
Spark by Adform Research, Paulius
Scala Style by Adform Research (Saulius Valatka)
Spark intro by Adform Research
SBT by Aform Research, Saulius Valatka
Scala laboratory: Globus. iteration #2
Testing in Scala. Adform Research
Scala laboratory. Globus. iteration #1
Cassandra + Spark + Elk
Опыт использования Spark, Основано на реальных событиях
ETL со Spark
Ad

Erlang: прагматичный рассказ про прагматичный язык

  • 1. Erlang Прагматичный рассказ про прагматичный язык yzh44yzh.com
  • 2. Немного истории ● Обзор языка ● Многопоточность ● Устойчивость к ошибкам ● Распределенность ● Горячее обновление ● Live Coding: сервис сокращенных ссылок ● OTP фреймворк ● Сфера применения. Истории успеха. ● Импровизация по другим темам :) yzh44yzh.com
  • 3. Немного истории ● Ericsson 70-e годы. Язык и ОС PLEX ● 1985 г – исследование существующих языков ● 1987 г – началась разработка Erlang ● 1995 г – релиз Erlang ● 1996 г – релиз OTP ● 1998 г – Erlang/OTP выпущены в open source ● 2006 г – рост популярности платформы yzh44yzh.com
  • 4. Обзор языка. ● Многопоточность ● Устойчивость к ошибкам ● Распределенность ● Горячее обновление yzh44yzh.com
  • 5. Обзор языка. ● Erlang Run-Time System (ERTS) ● Sheduler ● I/O ● Garbage Collector yzh44yzh.com
  • 6. Обзор языка. Многопоточность. ● Shared memory with locks? Нет (ну почти нет) ● Software transactional memory? Нет (ну почти нет) ● Futures, Promises и подобное? Нет ● Message Passing – это оно :) yzh44yzh.com
  • 7. Обзор языка. Многопоточность. run() -> Pid = spawn(fun ping/0), Pid ! self(), receive pong -> ok end. ping() -> receive From -> From ! pong end. yzh44yzh.com
  • 8. Обзор языка. Устойчивость к ошибкам. Defensive Programming – не нужно Try … catch – не нужно yzh44yzh.com
  • 9. Обзор языка. Устойчивость к ошибкам. Let It Crush yzh44yzh.com
  • 10. Обзор языка. Устойчивость к ошибкам. Делаем только Happy Case :) yzh44yzh.com
  • 11. Обзор языка. Устойчивость к ошибкам. yzh44yzh.com
  • 13. Обзор языка. Распределенность. Message Passing Location Transparency yzh44yzh.com
  • 14. Обзор языка. Распределенность. Trusted окружение или TCP сокеты yzh44yzh.com
  • 15. Обзор языка. Горячее обновление. ● Обновить beam ● Использовать инфраструктуру OTP фреймворка yzh44yzh.com
  • 16. OTP фреймворк. Open Telecom Platform yzh44yzh.com
  • 17. OTP фреймворк. Set of principles: ● Supervision Trees ● Behaviours ● Applications ● Releases yzh44yzh.com
  • 18. OTP фреймворк. Behaviours. ● gen_server ● gen_event ● gen_fsm ● supervisor yzh44yzh.com
  • 19. OTP фреймворк. gen_server. ● init/1 ● handle_call/3 ● handle_cast/2 ● handle_info/2 ● terminate/2 ● code_change/3 yzh44yzh.com
  • 20. OTP фреймворк. gen_event. ● event ● event manager ● event handlers yzh44yzh.com
  • 21. OTP фреймворк. gen_event. ● gen_event:start({local, manager_name}). ● gen_event:add_handler(manager_name, handler_module, []). ● gen_event:notify(manager_name, event). ● gen_event:delete_handler(manager_name, handler_module, []). yzh44yzh.com
  • 22. OTP фреймворк. gen_fsm. Finite State Machine yzh44yzh.com
  • 23. OTP фреймворк. supervisor. Restart Strategy: ● one_for_one ● one_for_all ● rest_for_one yzh44yzh.com
  • 24. OTP фреймворк. supervisor. Child Specification: ● Id = term() ● StartFunc = {M, F, A} ● Restart = permanent | transient | temporary ● Shutdown = brutal_kill | integer() >=0 | infinity ● Type = worker | supervisor ● Modules = [Module] yzh44yzh.com
  • 25. OTP фреймворк. application. Directory Structure: ● src -- contains the Erlang source code. ● ebin -- contains the Erlang object code, the beam files. ● include -- used for include files. ● priv -- used for application specific files. yzh44yzh.com
  • 26. OTP фреймворк. application. application resource file {application, ch_app, [{description, "Channel allocator"}, {vsn, "1"}, {modules, [ch_app, ch_sup, ch3]}, {registered, [ch3]}, {applications, [kernel, stdlib, sasl]}, {mod, {ch_app,[]}} ]}. yzh44yzh.com
  • 27. Сфера применения. Долгоживущие сервеные приложения, обеспечивающие коммуникацию большого числа пользователей. ● computer telephony ● messaging systems ● retail and commercial banking ● enterprise ● web services yzh44yzh.com
  • 28. Истории успеха. AXD301 ATM Switch ● telephony-class 10–160 Gbps ATM switch ● 1.5 million lines of Erlang code ● has been installed in networks all over the world ● largest “Voice over ATM” backbone in the world ● 99.9999999% availability. ● Erlang code was 4 to 10 times shorter than similar systems written in C/C++, Java, and PLEX yzh44yzh.com
  • 29. Истории успеха. CouchDB ● open source database made by Damien Katz ● schema-less replicated document store, storing objects in JSON format ● and accessed through a RESTful interface. ● first version of CouchDB in C++ ● entire C++ code base was replaced with Erlang ● one of the best known Erlang open source applications currently being used in production systems worldwide. yzh44yzh.com
  • 30. Импровизация по другим темам :) ● Недостатки языка ● Средства разработки (Emacs, Erlide, ErlGray) ● Книги ● Чем Erlang лучше Scala, чем Scala лучше Erlang? ● Как убедить себя, работодателя, заказчика использовать Erlang? ● Предложите свою тему :) yzh44yzh.com