Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

19
Erlang - concurrency-oriented programming Serhiy Yvtyshenko

Transcript of Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Page 1: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Erlang - concurrency-oriented programming

Serhiy Yvtyshenko

Page 2: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Як ми програмували ?

• Одночасно виконується одне завдання.

• Якщо щось піде не так - процес/система крешиться.

• Щоб дізнатися чи є оновлення - потрібно постій робити запити.

• Організація багатопотоковості –надзвичайно складна.

Page 3: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Зміни

• Ми маємо багатопроцесорті сервери і технології віртуалізації

• Ми хочемо щоб програма швидко реагувала на наші команди

• Паралельна обробка великих обємів данних

• Необхідна коректна реакція на форсмажорні обставини

• Легке маштабування

Page 4: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Світ паралельний

Erlang дозволяє програмувати за прикладом наших думок і взаємодій.

Page 5: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Основні особливості

• Декларативна мова програмування.

• Паралельне виконання коду без блокувань, синхронізації і спільної памяті

• Віртуальна машина яка максимально використовує всі ресурси сервера/кластера

• Коректна робота за будь-яких обставин

• Легке маштабування

• Готовий фреймворк і база данних

• Оновлення коду на льоту

Page 6: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Чи легко вивчити цю мову ?

Так – якщо Ви зможете змінити своє мислення

Page 7: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Змінюємо спосіб мислення 1

• Цілі числа довільного розміру

• Змінним можна присвоїти значення один раз

• Немає звичних масивів, але є атоми, кортежі, списки.

• «=» оператор шаблону а не присвоєння (x =6, x=4+2)

• Немає циклів

Page 8: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Змінюємо спосіб мислення 2

• BIF (built-in functions) і NIF (native implemented functions)

• Проста робота з бінарними данними

• Створення процесів і відправка повідомлень між ними є надзвичано проста і швидка

• Єдиний спосіб взаємодії між процесами –це відправка повідомлень

Page 9: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Змінюємо спосіб мислення 3

• Ви маєте повний контроль над процесами

• Легко створювати кластер

• Простий спосіб створення TPC/UDP сервера (Nonblocking/Blocking/Hybrid)

• Легка взаємодія з зовнішніми програмами С/python і т.д.

• ETS / DETS таблиці

• OTP Фреймворк

Page 10: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Змінюємо спосіб мислення 4

• Mnesia

• Оновлення коду на льоту

• Моніторинг/ логи / дебаг / тестування

Page 11: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Де не використовувати Erlang

• Парсинг

• Конвертація данних

• Складна обробка данних

• Однопотокові завдання

Page 12: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Скільки нас ? (TIOBE: 0.25%)Мова Доля на ринку(%) Зміни (в порівнянні з 07/11) Рабочий зараз Доля ринку в перспективі

Почали б проект зараз

Як додатковий робочий

В хоббі —проекті

1 Java 26.19 5.6 621 24.01 650 531 570

2 C# 21.26 - 504 23.2 629 0 673

3 PHP 14.5 -3 344 9.12 247 407 631

4 C++ 10.46 - 248 7.94 215 459 498

5 Python 6.33 - 150 12.52 339 453 424

6 Ruby 3.8 - 91 6.64 180 181 198

7 Javascript 3.71 1.08 88 3.43 93 1594 649

8 Objective-C 3.71 - 88 3.47 94 127 132

9 C 2.02 - 48 - 20 318 186

10 ActionScript 1.68 - 40 - 20 0 0

11Pascal/Delphi

1.47 -0.9 35 - 25 0 0

12 PL/SQL 1.01 - 24 - 10 452 0

13 1C 1.01 - 24 - 8 0 0

14 Perl - - 20 - 16 111 83

15 Basic - - 12 - 0 40 26

16 Scala - - 10 3.1 84 47 66

17 Groovy - - 8 - 25 92 40

18 Apex - - 4 - 0 0 0

19 Lua - - 4 - 0 45 25

20 Erlang - - 4 - 17 31 22

21 Haskell - - 1 - 17 0 37

22 F# - - 1 - 12 0 7

23 Lisp - - 1 - 0 33 43

24 Asm - - 2 - 0 0 35

25 Fortran - - 0 - 0 0

Page 13: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Хто використовує Erlang

Amazon (SimpleDB), Yahoo! (Delicious), Facebook (чат), Телкоми (Ericsson, Motorola, T-Mobile), Electronic Arts, 37signals, Wooga, Machine Zone, RebbitMQ, Riak, Couchbase, Wings 3D, ejabberd, ПриватБанк

Page 14: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Книги

• Programming Erlang: Software for a Concurrent World by Joe Armstrong

• Erlang Programming By Francesco Cesarini, Simon Thompson

Page 15: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Приклад №1: Pattern Matching

Page 16: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Приклад №2: Створення процесу

Pid = spawn(fun server_fun:loop/0).

Page 17: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Приклад №3: Годинник

Page 18: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Приклад №4: Чат

Page 19: Erlang - concurrency-oriented programming by Serhiy Yvtyshenko

Дякую за увагу

Якщо у Вас є питання чи Ви бажаєте вивчати

Erlang i/або HTML5 – буду радий познайомитися.

Явтушенко Сергій:

[email protected]