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

10,035 views

Published on

Published in: Technology
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total views
10,035
On SlideShare
0
From Embeds
0
Number of Embeds
6,844
Actions
Shares
0
Downloads
39
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. Erlang @5HTМгновенное Просветление Обучающий курс
  2. 2. ErlangЛекция 1. Место языка в современном мире функционального программирования
  3. 3. На чем делать кошерный проект?Экосистема JVM Без ограниченийScala ML Haskell MLClojure Lisp OCaml ML Erlang Prolog FFI ANSI С
  4. 4. Haskell ● Сложная задача ● Нужно не потеряться в коде ● Все партнеры Суперзвезды ● Необходима мощная система типовУспешные области применения:Микротранзакции, FPGA моделирование,уникальные утилиты, создание DSLКонсалтинг: WellTyped, LLC
  5. 5. Scala ● Мощная система типов ● JVM экосистема ● Akka легковесные процессы ● Кровавый энтерпрайзУспешные области применения:Бэкенды, Веб, Оркестрация Java сервисовКонсалтинг: TypeSafe, Inc.
  6. 6. OCaml ● Cупербыстрота как С++ или выше ● Низкий вход за счет ООП ● Первоклассные типы ● ML-классикаУспешные области применения:Банковская сфера, сложные алгоритмы,построение DSLКонсалтинг: OCamlPro SAS
  7. 7. Erlang ● Суперпростой и масштабируемый ● Супернадежный soft real-time ● Оркестрация кластераУспешные области применения:Веб, Телеком, GSM, Интернет сервисы,Месаджинг, DHTКонсалтинг: Synrc Research Center s.r.o.
  8. 8. ПромышленностьHaskell 2006— наиболее академичныйOCaml 1996 — маргинальная классикаScala 2004 — на пути к замене JavaErlang 1986 — наиболее промышленныйErlang — единстенный динамически-типизированный язык среди рассмотреных.Но грустить рано, смотрим на расклад.
  9. 9. MQ сервера ○ FioranoMQ JMS ○ Tibco JMS ○ WebSphere JMS ○ RabbitMQ AMQPMQ сервер — сердце кластера. Один изсамых быстрых MQ — RabbitMQ —имплементация бинарного AMQPпротокола разработаного в JP Morgan.
  10. 10. KV сервераC/C++: Redis AP, MongoDB APJava: Oracle Cache Coherence AP, Cassandra CA, Hadoop CAErlang: Riak AP, CouchDB AP, Hibari AP, KAI AP, LeoFS AP, Mnesia CAКак не странно, больше всего реализацийDHT именно на Erlang. В основном это из-запрозрачности распределенного кода.
  11. 11. WEB Сервера
  12. 12. Кот* создавал сайты на Erlang ? ● Lift Scala ● Happstack Haskell ● Eliom OCaml ● Nitrogen ErlangНитроген является самым простым ибольше всего подходит для huyak-huyak inproduction development process.* — https://groups.google.com/forum/#!topic/erlang-russian/p6GOpPx03YM
  13. 13. Кто использует Erlang● Ericsson ● Amazon SimpleDB● T-Mobile ● Facebook Chat● Telia ● Github Pages● Klarna ● WhatsApp ● ShoreTel M5
  14. 14. Современный Erlang стек● Erlang/OTP устройчивая среда● Riak надежное Key-Value хранилище● RabbitMQ промышленный Pub/Sub● Nitrogen суперпростой веб фреймворк● Cowboy самый быстрый веб сервер● GProc распределенный реестр
  15. 15. ErlangЛекция 2. Обзор решений, принятых при разработке языка
  16. 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. 17. Task Switching ● Preemptive (Erlang, Sparks) ● Cooperative (Lwt, Sparks, Akka)Erlang считает редукции и сам переключаетконтексты процессов (1.5К). Sparksпереключаются только когда требуетсяпамять. Остальные модели актёров (Lwt,Akka) планируются кооперативнымипланировщиками.
  18. 18. Shared State● Нет разделяемой памяти. Рай.● Разделяемая памать. Java.● Разделяемые состояния и память. Ад.Erlang посылает сообщения в процессы неиспользуя мютекстов, все происходит заатомарное изменение указателя очереди.Хип процесса изолирован и собирается GC ввыделеное для этого время.
  19. 19. Interconnection ● TCP ● SCTPSimplicity and Openness● Go https://github.com/goerlang● Ocaml https://github.com/khigia/erlocaml● Scala https://github.com/boundary/scalang
  20. 20. Heterogeneity and Interoperability ● NIF (C FFI, leveldb, shmem, сuda) ● Ports (Fast High Level Right Way) ● Distribution Protocol (ETF)Если надо подключить существующую Cбиблиотеку лучше это сделать через NIF. Вслучае взаимодействия с внешнимисистемами напрямую через Ports. Еслихочеться хардкора через dist протокол.
  21. 21. ErlangЛекция 3. Введение в язык и примеры программ
  22. 22. Атомарные типыInteger 42 длинная арифметикаFloat 4.2 doubleAtom okReference #Ref<0.0.0.29>Binary <<"maxim">>Pid <0.0.42>Port #Port<0.42>Fun #Fun<erl_eval.6.82930912>
  23. 23. Составные типыList [<<42,1,0,90>>,1,ok]Tuple {<0.0.16>,107,42,["maxim",true]}Можно типизировать кортежи и требовать,чтобы все элементы списка были одноготипа. Строки — списки. Поэтому работа состроками в Erlang медленная, нужностараться работать с бинарными данными.
  24. 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. 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. 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. 27. XML < > Suck and Blow ● Текстовый формат ● 10% времени на парсинг ● Много ошибок при ручном парсингеXML нужен только для связи с внешнимисистемами. Нет смысла использоватьвнутри своей системы XML.
  28. 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, SS7ASN.1 разработанный в 1984 году наслужбе телекомов по сей день.
  29. 29. Свободные ASN компиляторы ● Erlang (Ericsson) ● asn1c (Lev Walkin)Свободных ASN компиляторов не так имного. Erlang — это лучший инструмент дляоркестрации сервисов, где данныеопределяются c помощью ASN.1
  30. 30. Как с этим работать ?SP DEFINITIONS AUTOMATIC TAGS ::=BEGINMessage ::= SEQUENCE { version INTEGER DEFAULT 1, type MsgType, body Body }MsgType ::= ENUMERATED { public(0), private(1), tralala(2) }Body ::= OCTET STRINGEND$ erlc SP.asn
  31. 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. 32. ErlangСеминар 1. Практическое занятие. LDAP сервер
  33. 33. ErlangЛекция 4. Управление релизами, деплой и обновление кота
  34. 34. ErlangСеминар 2. Чат на Cowboy и вебсокетах
  35. 35. ErlangСеминар 3. Демонстрация продакшин системы как оно есть
  36. 36. ErlangЛекция 5. Будущее. Виртуализация и работа в Xen

×