SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
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

Más contenido relacionado

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

[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф  easy"[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф  easy"
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"Provectus
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Max Lapshin
 
Sphinx: распределяя индексы.
Sphinx: распределяя индексы.Sphinx: распределяя индексы.
Sphinx: распределяя индексы.MageCloud
 
Как перезапустить проблемное приложение и одновременно отладить его
Как перезапустить проблемное приложение и одновременно отладить егоКак перезапустить проблемное приложение и одновременно отладить его
Как перезапустить проблемное приложение и одновременно отладить егоOlga Rusakova
 
Язык программирования PHP
Язык программирования PHPЯзык программирования PHP
Язык программирования PHPVasiliy Gudoshnikov
 
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...corehard_by
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветлениеMaxim Sokhatsky
 
Полезное покрытие кода
Полезное покрытие кодаПолезное покрытие кода
Полезное покрытие кодаSQALab
 
Инструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаИнструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаcorehard_by
 
Баннерокрутилка на Erlang
Баннерокрутилка на ErlangБаннерокрутилка на Erlang
Баннерокрутилка на ErlangArtyom Gavrichenkov
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...Arvids Godjuks
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAlexander Lisachenko
 
Построение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptПостроение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptFDConf
 
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
Windbg: когда у нас не воспроизводится. Александр Головач ➠  CoreHard Autumn ...Windbg: когда у нас не воспроизводится. Александр Головач ➠  CoreHard Autumn ...
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...corehard_by
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотомRoman Grebennikov
 

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

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

Más de Vasil Remeniuk

Product Minsk - РТБ и Программатик
Product Minsk - РТБ и ПрограмматикProduct Minsk - РТБ и Программатик
Product Minsk - РТБ и ПрограмматикVasil Remeniuk
 
Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Vasil Remeniuk
 
Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14Vasil Remeniuk
 
Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3Vasil Remeniuk
 
Testing in Scala by Adform research
Testing in Scala by Adform researchTesting in Scala by Adform research
Testing in Scala by Adform researchVasil Remeniuk
 
Spark Intro by Adform Research
Spark Intro by Adform ResearchSpark Intro by Adform Research
Spark Intro by Adform ResearchVasil Remeniuk
 
Types by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaTypes by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaVasil Remeniuk
 
Types by Adform Research
Types by Adform ResearchTypes by Adform Research
Types by Adform ResearchVasil Remeniuk
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovVasil Remeniuk
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovVasil Remeniuk
 
Spark by Adform Research, Paulius
Spark by Adform Research, PauliusSpark by Adform Research, Paulius
Spark by Adform Research, PauliusVasil Remeniuk
 
Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)Vasil Remeniuk
 
Spark intro by Adform Research
Spark intro by Adform ResearchSpark intro by Adform Research
Spark intro by Adform ResearchVasil Remeniuk
 
SBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaSBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaVasil Remeniuk
 
Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2Vasil Remeniuk
 
Testing in Scala. Adform Research
Testing in Scala. Adform ResearchTesting in Scala. Adform Research
Testing in Scala. Adform ResearchVasil Remeniuk
 
Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Vasil Remeniuk
 
Cassandra + Spark + Elk
Cassandra + Spark + ElkCassandra + Spark + Elk
Cassandra + Spark + ElkVasil Remeniuk
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 

Más de Vasil Remeniuk (20)

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

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