SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
Erlang
         @5HT


Мгновенное Просветление
    Обучающий курс
Erlang
Лекция 1. Место языка в современном
          мире функционального
          программирования
На чем делать кошерный проект?

Экосистема JVM   Без ограничений

Scala ML         Haskell ML
Clojure Lisp     OCaml ML
                 Erlang Prolog

                 FFI

                 ANSI С
Haskell

  ●   Сложная задача
  ●   Нужно не потеряться в коде
  ●   Все партнеры Суперзвезды
  ●   Необходима мощная система типов

Успешные области применения:
Микротранзакции, FPGA моделирование,
уникальные утилиты, создание DSL

Консалтинг: WellTyped, LLC
Scala

  ●   Мощная система типов
  ●   JVM экосистема
  ●   Akka легковесные процессы
  ●   Кровавый энтерпрайз

Успешные области применения:
Бэкенды, Веб, Оркестрация Java сервисов

Консалтинг: TypeSafe, Inc.
OCaml

  ●   Cупербыстрота как С++ или выше
  ●   Низкий вход за счет ООП
  ●   Первоклассные типы
  ●   ML-классика

Успешные области применения:
Банковская сфера, сложные алгоритмы,
построение DSL

Консалтинг: OCamlPro SAS
Erlang

  ● Суперпростой и масштабируемый
  ● Супернадежный soft real-time
  ● Оркестрация кластера

Успешные области применения:
Веб, Телеком, GSM, Интернет сервисы,
Месаджинг, DHT

Консалтинг: Synrc Research Center s.r.o.
Промышленность

Haskell 2006— наиболее академичный
OCaml 1996 — маргинальная классика
Scala 2004 — на пути к замене Java
Erlang 1986 — наиболее промышленный

Erlang — единстенный динамически-
типизированный язык среди рассмотреных.
Но грустить рано, смотрим на расклад.
MQ сервера

  ○   FioranoMQ JMS
  ○   Tibco JMS
  ○   WebSphere JMS
  ○   RabbitMQ AMQP

MQ сервер — сердце кластера. Один из
самых быстрых MQ — RabbitMQ —
имплементация бинарного AMQP
протокола разработаного в JP Morgan.
KV сервера

C/C++: Redis AP, MongoDB AP
Java: Oracle Cache Coherence AP,
        Cassandra CA, Hadoop CA
Erlang: Riak AP, CouchDB AP, Hibari AP,
        KAI AP, LeoFS AP, Mnesia CA

Как не странно, больше всего реализаций
DHT именно на Erlang. В основном это из-за
прозрачности распределенного кода.
WEB Сервера
Кот* создавал сайты на Erlang ?

      ●      Lift Scala
      ●      Happstack Haskell
      ●      Eliom OCaml
      ●      Nitrogen Erlang

Нитроген является самым простым и
больше всего подходит для huyak-huyak in
production development process.
* — https://groups.google.com/forum/#!topic/erlang-russian/p6GOpPx03YM
Кто использует Erlang

● Ericsson   ● Amazon SimpleDB
● T-Mobile   ● Facebook Chat
● Telia      ● Github Pages
● Klarna     ● WhatsApp
             ● ShoreTel M5
Современный Erlang стек


● Erlang/OTP устройчивая среда
● Riak надежное Key-Value хранилище
● RabbitMQ промышленный Pub/Sub
● Nitrogen суперпростой веб фреймворк
● Cowboy самый быстрый веб сервер
● GProc распределенный реестр
Erlang
Лекция 2. Обзор решений,
          принятых при
          разработке языка
Parallelism and Concurrency

  ● Shared State (C++, Java)
  ● STM (Haskell, Clojure)
  ● Message Passing (Erlang, Haskell, Scala)

Process Calculus
  ● Parallel composition (Spawn)
  ● Communication (Channels)
  ● Sequential Composition (Monadic)
Task Switching

  ● Preemptive (Erlang, Sparks)
  ● Cooperative (Lwt, Sparks, Akka)

Erlang считает редукции и сам переключает
контексты процессов (1.5К). Sparks
переключаются только когда требуется
память. Остальные модели актёров (Lwt,
Akka) планируются кооперативными
планировщиками.
Shared State

● Нет разделяемой памяти. Рай.
● Разделяемая памать. Java.
● Разделяемые состояния и память. Ад.

Erlang посылает сообщения в процессы не
используя мютекстов, все происходит за
атомарное изменение указателя очереди.
Хип процесса изолирован и собирается GC в
выделеное для этого время.
Interconnection

  ● TCP
  ● SCTP


Simplicity and Openness
● Go https://github.com/goerlang
● Ocaml https://github.com/khigia/erlocaml
● Scala https://github.com/boundary/scalang
Heterogeneity and Interoperability

  ● NIF (C FFI, leveldb, shmem, сuda)
  ● Ports (Fast High Level Right Way)
  ● Distribution Protocol (ETF)

Если надо подключить существующую C
библиотеку лучше это сделать через NIF. В
случае взаимодействия с внешними
системами напрямую через Ports. Если
хочеться хардкора через dist протокол.
Erlang
Лекция 3. Введение в язык и
          примеры программ
Атомарные типы

Integer 42 длинная арифметика
Float 4.2 double
Atom ok
Reference #Ref<0.0.0.29>
Binary <<"maxim">>
Pid <0.0.42>
Port #Port<0.42>
Fun #Fun<erl_eval.6.82930912>
Составные типы

List [<<42,1,0,90>>,1,ok]
Tuple {<0.0.16>,107,42,["maxim",true]}

Можно типизировать кортежи и требовать,
чтобы все элементы списка были одного
типа. Строки — списки. Поэтому работа со
строками в Erlang медленная, нужно
стараться работать с бинарными данными.
Чат на Нитрогене...
body() ->
   wf:comet_global(fun() -> chat_loop() end, chat),
 [ #panel { id=chatHistory, class=chat_history },
   #textbox { id=messageTextBox, next=sendButton },
   #button { id=send, text="Send", postback=chat } ].


event(chat) ->
    Usrname = wf:q(userNameTextBox),
    Msg = wf:q(messageTextBox),
    wf:send_global(chat, {message, Usname, Msg}),
    wf:wire("obj('messageTextBox').focus();"
                 "obj('messageTextBox').select();");
... выглядит просто
chat_loop() ->
    receive
         {message, Username, Message} ->
             Terms = [#span { text=Username,
                              class=username }, ": ",
                      #span { text=Message,
                              class=message } ],
             wf:insert_bottom(chatHistory, Terms),
             wf:wire("obj('chatHistory').scrollTop = "
                     "obj('chatHistory').scrollHeight;"),
             wf:flush()
    end,
    chat_loop().
RLE декомпрессия еще проще
-module(rle).
-compile(export_all).

drle([]) -> [];
drle([H|L]) when H<192 -> [H,drle(L)];
drle([H,X|L]) -> [lists:duplicate(H-192,X),drle(L)].

Любой кто писал на Python, PHP, Perl, Ruby
может писать на Erlang уже на второй
неделе.
XML < > Suck and Blow

  ● Текстовый формат
  ● 10% времени на парсинг
  ● Много ошибок при ручном парсинге

XML нужен только для связи с внешними
системами. Нет смысла использовать
внутри своей системы XML.
ASN.1

● BER - LDAP, SNMP, PKCS#7,
        GSM TAP, ISDN, UMTS
● DER - X.509 Certs and Keys
● XER - XML encoding
● ECN - Bluetooth, UMTS RRC,
        GPRS, GSM, SS7

ASN.1 разработанный в 1984 году на
службе телекомов по сей день.
Свободные ASN компиляторы

  ● Erlang (Ericsson)
  ● asn1c (Lev Walkin)

Свободных ASN компиляторов не так и
много. Erlang — это лучший инструмент для
оркестрации сервисов, где данные
определяются c помощью ASN.1
Как с этим работать ?

SP DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
Message ::= SEQUENCE { version INTEGER DEFAULT 1,
                       type MsgType, body Body }
MsgType ::= ENUMERATED { public(0), private(1), tralala(2) }
Body ::= OCTET STRING
END

$ erlc SP.asn
И в Эрланг консоли

1> {ok, Bin} = 'SP':encode('Message', #'Message'{version = 3,
type = private, body = "Hello, ASN.1"}).
{ok,
[48,20,128,1,3,129,1,1,130,12,72,101,108,108,111,44,32,65,83,78,
46,49]}

1> 'SP':decode('Message', Bin).
{ok,#'Message'{version = 3,type = private,
               body = "Hello, ASN.1"}}
Erlang
Семинар 1. Практическое занятие.
           LDAP сервер
Erlang
Лекция 4. Управление релизами,
          деплой и обновление
          кота
Erlang
Семинар 2. Чат на Cowboy
           и вебсокетах
Erlang
Семинар 3. Демонстрация продакшин
           системы как оно есть
Erlang
Лекция 5. Будущее. Виртуализация и
          работа в Xen

Contenu connexe

Tendances

Erlang for Yandex
Erlang for YandexErlang for Yandex
Erlang for YandexMax Lapshin
 
Erlang railsclub - 1
Erlang   railsclub - 1Erlang   railsclub - 1
Erlang railsclub - 1Max Lapshin
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляютсяMax Lapshin
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей ФедоровCodeFest
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4rit2011
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)Ontico
 
Андрей Акиньшин
Андрей АкиньшинАндрей Акиньшин
Андрей АкиньшинCodeFest
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Ontico
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...it-people
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPOleg Poludnenko
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeGetDev.NET
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 

Tendances (19)

Erlang for Yandex
Erlang for YandexErlang for Yandex
Erlang for Yandex
 
Erlang railsclub - 1
Erlang   railsclub - 1Erlang   railsclub - 1
Erlang railsclub - 1
 
Erlang ruby
Erlang rubyErlang ruby
Erlang ruby
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляются
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей Федоров
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
 
Sivko
SivkoSivko
Sivko
 
Андрей Акиньшин
Андрей АкиньшинАндрей Акиньшин
Андрей Акиньшин
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHP
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 

En vedette

Краткое введение в Erlang/OTP
Краткое введение в Erlang/OTPКраткое введение в Erlang/OTP
Краткое введение в Erlang/OTPAlexander Byndyu
 
Алексей Воинов — Языки программирования
Алексей Воинов — Языки программированияАлексей Воинов — Языки программирования
Алексей Воинов — Языки программированияYandex
 
Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьYuri Zhloba
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Alexander Podkhalyuzin
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Alexander Podkhalyuzin
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераCodeFest
 
Самурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаСамурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаSergey Lobin
 

En vedette (20)

Краткое введение в Erlang/OTP
Краткое введение в Erlang/OTPКраткое введение в Erlang/OTP
Краткое введение в Erlang/OTP
 
Алексей Воинов — Языки программирования
Алексей Воинов — Языки программированияАлексей Воинов — Языки программирования
Алексей Воинов — Языки программирования
 
Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитать
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Feature suggester
Feature suggesterFeature suggester
Feature suggester
 
Erlang
ErlangErlang
Erlang
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Scala magic
Scala magicScala magic
Scala magic
 
Scala #3
Scala #3Scala #3
Scala #3
 
Scala #2
Scala #2Scala #2
Scala #2
 
Lec 2
Lec 2Lec 2
Lec 2
 
Scala #5
Scala #5Scala #5
Scala #5
 
Scala #4
Scala #4Scala #4
Scala #4
 
Scala lecture #4
Scala lecture #4Scala lecture #4
Scala lecture #4
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузера
 
Scala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEAScala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEA
 
Scala training
Scala trainingScala training
Scala training
 
Самурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаСамурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программиста
 

Similaire à Erlang мгновенное просветление

Haskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageHaskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageAlexander Granin
 
Haskell
HaskellHaskell
HaskellDevDay
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 
Erlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoErlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoLev Walkin
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelMikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
Olga Lavrentieva
 
F# - функциональный язык «новой» волны
F# - функциональный  язык «новой» волныF# - функциональный  язык «новой» волны
F# - функциональный язык «новой» волныKiev ALT.NET
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияДмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияFProg
 
Redis: возможности, выгоды, примеры использования
Redis: возможности, выгоды, примеры использованияRedis: возможности, выгоды, примеры использования
Redis: возможности, выгоды, примеры использованияAlexey Kachayev
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангMaxim Krentovskiy
 
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Vadim Kosov
 
Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)Ontico
 
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)ScalaNsk
 
F# функциональный язык "новой" волны
F# функциональный язык "новой" волныF# функциональный язык "новой" волны
F# функциональный язык "новой" волныArtem Prysyazhnuk
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)Ontico
 

Similaire à Erlang мгновенное просветление (20)

Haskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageHaskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell language
 
Haskell
HaskellHaskell
Haskell
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
Erlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoErlang and OCaml Experience at Echo
Erlang and OCaml Experience at Echo
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray Chapel
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”

 
F# - функциональный язык «новой» волны
F# - функциональный  язык «новой» волныF# - функциональный  язык «новой» волны
F# - функциональный язык «новой» волны
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияДмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
 
Redis: возможности, выгоды, примеры использования
Redis: возможности, выгоды, примеры использованияRedis: возможности, выгоды, примеры использования
Redis: возможности, выгоды, примеры использования
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
 
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
 
Cpp
CppCpp
Cpp
 
Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)
 
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
 
F# функциональный язык "новой" волны
F# функциональный язык "новой" волныF# функциональный язык "новой" волны
F# функциональный язык "новой" волны
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 

Erlang мгновенное просветление

  • 1. Erlang @5HT Мгновенное Просветление Обучающий курс
  • 2. Erlang Лекция 1. Место языка в современном мире функционального программирования
  • 3. На чем делать кошерный проект? Экосистема JVM Без ограничений Scala ML Haskell ML Clojure Lisp OCaml ML Erlang Prolog FFI ANSI С
  • 4. Haskell ● Сложная задача ● Нужно не потеряться в коде ● Все партнеры Суперзвезды ● Необходима мощная система типов Успешные области применения: Микротранзакции, FPGA моделирование, уникальные утилиты, создание DSL Консалтинг: WellTyped, LLC
  • 5. Scala ● Мощная система типов ● JVM экосистема ● Akka легковесные процессы ● Кровавый энтерпрайз Успешные области применения: Бэкенды, Веб, Оркестрация Java сервисов Консалтинг: TypeSafe, Inc.
  • 6. OCaml ● Cупербыстрота как С++ или выше ● Низкий вход за счет ООП ● Первоклассные типы ● ML-классика Успешные области применения: Банковская сфера, сложные алгоритмы, построение DSL Консалтинг: OCamlPro SAS
  • 7. Erlang ● Суперпростой и масштабируемый ● Супернадежный soft real-time ● Оркестрация кластера Успешные области применения: Веб, Телеком, GSM, Интернет сервисы, Месаджинг, DHT Консалтинг: Synrc Research Center s.r.o.
  • 8. Промышленность Haskell 2006— наиболее академичный OCaml 1996 — маргинальная классика Scala 2004 — на пути к замене Java Erlang 1986 — наиболее промышленный Erlang — единстенный динамически- типизированный язык среди рассмотреных. Но грустить рано, смотрим на расклад.
  • 9. MQ сервера ○ FioranoMQ JMS ○ Tibco JMS ○ WebSphere JMS ○ RabbitMQ AMQP MQ сервер — сердце кластера. Один из самых быстрых MQ — RabbitMQ — имплементация бинарного AMQP протокола разработаного в JP Morgan.
  • 10. KV сервера C/C++: Redis AP, MongoDB AP Java: Oracle Cache Coherence AP, Cassandra CA, Hadoop CA Erlang: Riak AP, CouchDB AP, Hibari AP, KAI AP, LeoFS AP, Mnesia CA Как не странно, больше всего реализаций DHT именно на Erlang. В основном это из-за прозрачности распределенного кода.
  • 12. Кот* создавал сайты на Erlang ? ● Lift Scala ● Happstack Haskell ● Eliom OCaml ● Nitrogen Erlang Нитроген является самым простым и больше всего подходит для huyak-huyak in production development process. * — https://groups.google.com/forum/#!topic/erlang-russian/p6GOpPx03YM
  • 13. Кто использует Erlang ● Ericsson ● Amazon SimpleDB ● T-Mobile ● Facebook Chat ● Telia ● Github Pages ● Klarna ● WhatsApp ● ShoreTel M5
  • 14. Современный Erlang стек ● Erlang/OTP устройчивая среда ● Riak надежное Key-Value хранилище ● RabbitMQ промышленный Pub/Sub ● Nitrogen суперпростой веб фреймворк ● Cowboy самый быстрый веб сервер ● GProc распределенный реестр
  • 15. Erlang Лекция 2. Обзор решений, принятых при разработке языка
  • 16. Parallelism and Concurrency ● Shared State (C++, Java) ● STM (Haskell, Clojure) ● Message Passing (Erlang, Haskell, Scala) Process Calculus ● Parallel composition (Spawn) ● Communication (Channels) ● Sequential Composition (Monadic)
  • 17. Task Switching ● Preemptive (Erlang, Sparks) ● Cooperative (Lwt, Sparks, Akka) Erlang считает редукции и сам переключает контексты процессов (1.5К). Sparks переключаются только когда требуется память. Остальные модели актёров (Lwt, Akka) планируются кооперативными планировщиками.
  • 18. Shared State ● Нет разделяемой памяти. Рай. ● Разделяемая памать. Java. ● Разделяемые состояния и память. Ад. Erlang посылает сообщения в процессы не используя мютекстов, все происходит за атомарное изменение указателя очереди. Хип процесса изолирован и собирается GC в выделеное для этого время.
  • 19. Interconnection ● TCP ● SCTP Simplicity and Openness ● Go https://github.com/goerlang ● Ocaml https://github.com/khigia/erlocaml ● Scala https://github.com/boundary/scalang
  • 20. Heterogeneity and Interoperability ● NIF (C FFI, leveldb, shmem, сuda) ● Ports (Fast High Level Right Way) ● Distribution Protocol (ETF) Если надо подключить существующую C библиотеку лучше это сделать через NIF. В случае взаимодействия с внешними системами напрямую через Ports. Если хочеться хардкора через dist протокол.
  • 21. Erlang Лекция 3. Введение в язык и примеры программ
  • 22. Атомарные типы Integer 42 длинная арифметика Float 4.2 double Atom ok Reference #Ref<0.0.0.29> Binary <<"maxim">> Pid <0.0.42> Port #Port<0.42> Fun #Fun<erl_eval.6.82930912>
  • 23. Составные типы List [<<42,1,0,90>>,1,ok] Tuple {<0.0.16>,107,42,["maxim",true]} Можно типизировать кортежи и требовать, чтобы все элементы списка были одного типа. Строки — списки. Поэтому работа со строками в Erlang медленная, нужно стараться работать с бинарными данными.
  • 24. Чат на Нитрогене... body() -> wf:comet_global(fun() -> chat_loop() end, chat), [ #panel { id=chatHistory, class=chat_history }, #textbox { id=messageTextBox, next=sendButton }, #button { id=send, text="Send", postback=chat } ]. event(chat) -> Usrname = wf:q(userNameTextBox), Msg = wf:q(messageTextBox), wf:send_global(chat, {message, Usname, Msg}), wf:wire("obj('messageTextBox').focus();" "obj('messageTextBox').select();");
  • 25. ... выглядит просто chat_loop() -> receive {message, Username, Message} -> Terms = [#span { text=Username, class=username }, ": ", #span { text=Message, class=message } ], wf:insert_bottom(chatHistory, Terms), wf:wire("obj('chatHistory').scrollTop = " "obj('chatHistory').scrollHeight;"), wf:flush() end, chat_loop().
  • 26. RLE декомпрессия еще проще -module(rle). -compile(export_all). drle([]) -> []; drle([H|L]) when H<192 -> [H,drle(L)]; drle([H,X|L]) -> [lists:duplicate(H-192,X),drle(L)]. Любой кто писал на Python, PHP, Perl, Ruby может писать на Erlang уже на второй неделе.
  • 27. XML < > Suck and Blow ● Текстовый формат ● 10% времени на парсинг ● Много ошибок при ручном парсинге XML нужен только для связи с внешними системами. Нет смысла использовать внутри своей системы XML.
  • 28. ASN.1 ● BER - LDAP, SNMP, PKCS#7, GSM TAP, ISDN, UMTS ● DER - X.509 Certs and Keys ● XER - XML encoding ● ECN - Bluetooth, UMTS RRC, GPRS, GSM, SS7 ASN.1 разработанный в 1984 году на службе телекомов по сей день.
  • 29. Свободные ASN компиляторы ● Erlang (Ericsson) ● asn1c (Lev Walkin) Свободных ASN компиляторов не так и много. Erlang — это лучший инструмент для оркестрации сервисов, где данные определяются c помощью ASN.1
  • 30. Как с этим работать ? SP DEFINITIONS AUTOMATIC TAGS ::= BEGIN Message ::= SEQUENCE { version INTEGER DEFAULT 1, type MsgType, body Body } MsgType ::= ENUMERATED { public(0), private(1), tralala(2) } Body ::= OCTET STRING END $ erlc SP.asn
  • 31. И в Эрланг консоли 1> {ok, Bin} = 'SP':encode('Message', #'Message'{version = 3, type = private, body = "Hello, ASN.1"}). {ok, [48,20,128,1,3,129,1,1,130,12,72,101,108,108,111,44,32,65,83,78, 46,49]} 1> 'SP':decode('Message', Bin). {ok,#'Message'{version = 3,type = private, body = "Hello, ASN.1"}}
  • 32. Erlang Семинар 1. Практическое занятие. LDAP сервер
  • 33. Erlang Лекция 4. Управление релизами, деплой и обновление кота
  • 34. Erlang Семинар 2. Чат на Cowboy и вебсокетах
  • 35. Erlang Семинар 3. Демонстрация продакшин системы как оно есть
  • 36. Erlang Лекция 5. Будущее. Виртуализация и работа в Xen