SlideShare a Scribd company logo
1 of 30
Download to read offline
Кое-что про
   Erlang
 а также OCaml, Haskell
   Perl, PHP, C и C++

    Лев Валкин, 2010




                          1
О докладчике

Драйверы на Asm x86 (1993)
Веб-сайты на C, Shell, Perl (1996+)
Математические обучалки на Delphi (1998)

SMS-гейт на C, C++, Visual Basic (2001)

Ускорял HTTP[S] на C, M4 (2003, два раза изобрёл LISP)
Куски embedded-платформы Cisco ASA/PIX


                                                         2
Стар(та)пер-2006

AboutEcho.com

Анонсы на TechCrunch, RRW, VentureBeat

~$4.8mln венчурного финансирования

~25 человек, из них 20 — в России




                                         3
2006: Быстрый старт

Цель: быстро сделать эксперимент

4 дня программирования на Perl, через неделю
— анонс на TechCrunch (2006)

Привалило трафика (Sun SPARC 600 MHz)

Часть функциональности сброшено на C
(для скорости)



                                               4
2007: Развитие

Количество программистов: 1

Perl; в критических участках — C

Сложность дебага: 0

Сложность развития: удовлетворительная

Когда нет команды, любая знакомая
технология будет приемлемо работать!


                                         5
2007: Развитие

Количество программистов: 4

Perl; в критических участках — C

Сложность дебага: начинаются проблемы

Развитие:

  Perl: разводится бардак в коде

  C: разводятся sigsegv в продакшне


                                        6
2008: Развитие

Количество программистов: 5-10

В Perl растёт лапшизм в коде

Perl заменяется на Erlang (для нового кода)

Те же люди (!)

Без опыта в ФП (!!)

В условиях ограниченного времени и бюджета


                                              7
Интермиссия: Erlang
Считается функциональным языком

Неизменяемость «переменных»

Горячая замена кода

«Конкурентно-ориентированный»
— Процессы изолированы, общаются
сообщениями

Чрезвычайно простой


                                   8
Простой Erlang

«Erlang действительно учится за две недели,
это не миф»

http://grey-kristy.livejournal.com/87271.html

«По информации от различных источников: 2
недель хватит»

http://levgem.livejournal.com/285670.html



                                                9
Мини-опрос
Спросил наших разработчиков

«Я бы положил на эрланг от одной до двух
недель плотного изучения с упражнениями».

«Достаточно одной — двух недель (прочитать
getting started guide или книгу Армстронга)».

«Можно учить специально и непрерывно, а
можно по наличию задач. Изучал по второму
варианту; за месяц».

                                                10
Мини-опрос
«Писать можно на эрланге через неделю — с
докой, через две — с докой на полке, через месяц
— комфортно».

«Уверен, что можно выучить erlang и уже
попробовать OTP за месяц. Без OTP вообще
наверное недели две».

«По эрлангу, чтобы начать писать модули — недели
две чтения мануалов и тьюториалов. И еще пару
недель доучиваться erlang-style кодописанию».


                                                   11
С точки зрения
   руководителя
Нанимаемые специалисты имели опыт от PHP
+JavaScript до C/C++, но не имели опыта в ФП.

Предыдущий опыт на скорость обучения не влияет.

Возраст — 22-35 лет, на скорость изучения не
влияет.

При наличии задач, обучение происходит быстро,
в горизонте оперативного планирования
(2-4 недели).


                                                  12
С точки зрения
     code nazi
«Набеговое программирование» в команде
располагает делать спагетти-код, кишащий сайд-
эффектами.

Erlang «сопротивляется» эффектам, к которым
приводит спагетти-код:

Процессы изолированы, эффекты плохого кода в
одной подсистеме не влияют на другую.

Связанные процессы не позволяют редкой ошибке
привести к отказу системы.


                                                 13
С точки зрения
     code nazi

Неизменяемые переменные и отсутствие
глобальных переменных поощряют разработку с
минимумом сайд-эффектов.

Эти же свойства упрощают независимое
тестирование подсистем.




                                              14
Адвокат дьявола
В распространённых языках проблема спагетти-кода
облегчается инструктажем, соглашениями о коде,
юнит-тестами и ревью кода. А если проблема не
стоит, зачем использовать Erlang? Тем более, для
программ в функциональном стиле сложно
проводить code-review.

В нашей компании делается ревью Erlang-кода.
Спросим инженеров, что легче, ревью скриптового
языка, на котором они писали до эрланга, или ревью
Erlang-кода?


                                                     15
Ревью P* vs. Erlang?
 (Знание языков. «Отзыв»)

 Erlang >> P*. «Конечно, [Erlang] проще. Меньше
 возможностей для сайд-эффектов. Функции из других
 модулей qualified, проще искать код».

 Erlang (0.7) Perl (0.5). «[Erlang] Проще».

 Erlang (0.8) Perl (0.5). «[Erlang] Однозначно проще.
 Когда пару раз столкнешься с проблемами в перле,
 начинаешь понимать, что ревью там делать очень
 сложно».


                                                        16
Ревью P* vs. Erlang?

 PHP (1.0) Erlang (0.7). «Одинаково».

 PHP (0.7) Erlang (0.6). «Владея контекстом, легче
 делать ревью на erlang код».

 Perl (0.9) Erlang (0.8). «Думаю, одинаково. Ревью
 функционального кода требует более глубокого
 вникания, но менее "богатый" синтаксис и компактный
 код упрощают понимание».

 Perl (1.0) Erlang (0.8). «Проще [Erlang]».


                                                       17
Ревью P* vs. Erlang?

 Те, кто знают Erlang лучше (кстати, почему?), говорят,
 что для Erlang проще делать код-ревью. Логично.

 Те, кто знает P* языки лучше, говорят, что для Erlang
 не сложнее делать код-ревью. Почему?

 «Менее богатый синтаксис и компактный код
 упрощают понимание».

 «Меньше возможностей для сайд-эффектов».



                                                          18
2009: Ускорение
Напомню: Perl → (Perl, C) → (Erlang, C/C++)

Проблема: никто не хочет работать с C/C++. Сложно
найти или обучить людей (N.B.: обычно этот аргумент
выдвигают против FP!)

«Набеговое программирование» даёт сбой и здесь.
Sigsegv в продакшн становятся ежедневной
проблемой, а то и бизнес-риском. Valgrind и анализ
корок помогают, но симптоматично, не устраняя
причины.


                                                      19
2009: Ускорение

Идея: попробовать Haskell (я знал неплохо).

Риски: кривая обучения, производительность
решения.

Сделан аналог C++ кода на Haskell.

В 10 раз медленнее (в 10 раз больше машин?!)

После оптимизаций — в 3 раза медленнее. Плохо.



                                                 20
2009: Ускорение
Альтернатива: попробовать
OCaml (никто не знал).
Риски те же: кривая обучения,
производительность.
Аналог нашего основного C++
компонента:
  Решение в лоб: ~5-10%
  быстрее (да, свежий код).
  В ~5 раз — на несколько тысяч
  строк — короче (см. рис.)
  Пришлось задействовать две
  глобальные переменные.


                                  21
2010: Настоящее

Эволюция ядра системы:

Perl → (Perl, C) → (Erlang, C/C++) → (Erlang, OCaml)

Другие языки тоже используются: Perl, PHP, Python,
JavaScript (на клиенте), C, C++, Haskell (для генерации
JS).

Примерно в 3-5 раз больше функционального кода.




                                                          22
Кококомл

— Он спрашивает, «как ока?»
— Ну и ответь ему, «ко-ко-ко»

Изучаемость: «Примерно в два раза дольше, чем
эрланг». «Без опыта в ФП — месяца два, если есть
опыт, то хватит месяца». (А также «две недели» и «месяца
три»)

«Окамл я знаю хуже C++, но разбираться в нем
(окамле) проще, чем в C++». Кстати, как в OCaml с код-
ревью?


                                                           23
Ревью C/C++ vs. Ocaml

 (Знание языков. «Отзыв»)

 C+/C++ >> OCaml: «По сравнению с c/c++ окамл я знаю
 намного хуже. При солидной форе в сторону
 c/c++ я считаю, что код-ревью в ocaml проще, опять
 же, из-за почти отсутствующих сайд-эффектов».

 OCaml (0.4): «Сложнее».

 C/C++ (0.8) OCaml (0.6): «Для меня пока сложнее или
 одинаково».


                                                       24
Ревью C/C++ vs. Ocaml


 OCaml (0.7) C (0.5): «Сложнее. Причина в основном в
 каринге и использовании функций без точечной
 нотации».

 OCaml (0.6) C (0.6): «Если изменения в коде
 масштабные, ocaml ревьюить сложнее».




                                                       25
Erlang vs. OCaml
 executive summary
Erlang быстро изучается и положительно
воспринимается командой, быстро переходя в список
«комфортных, своих» языков.

«Из всех перечисленных языков эрланг нравится
больше всех, не для решения конкретных задач, а
просто по ощущениям» (респондент знает PHP глубже, чем Erlang)

OCaml воспринимается тяжеловато, как типичный
«неосновной язык». Делать ревью кода для него
сложнее, чем для C/C++. Может ли это быть артефактом
лаконичности (количество смысла на строчку) кода?


                                                                 26
Erlang vs. OCaml
 executive summary
Инженеры отметили положительное влияние отсутсвия
сайд-эффектов на программирование и код-ревью OCaml
и Erlang.
Erlang прост! Необычность синтаксиса более чем
компенсируется его простотой. Понятная и элементарная
семантика. REPL.
Идиосинкразии (не просто необычности, а реальный shit)
синтаксиса OCaml вызывают нарекания в процессе
обучения. Ограниченный REPL.
OCaml компилируем и быстр! Если не делать специальных
оптимизаций, то OCaml ~= C/C++, особенно если
переписывать существующий код.


                                                         27
Erlang
Erlang хорошо себя зарекомендовал для общего
серверного программирования: command-and-
control, координирование потоков данных,
управление функциональностью, написанной на
других языках (OCaml, C/C++, Perl, Python).
В нашей компании он занял нишу динамических
серверных языков (Perl, PHP, Python).
Независимость процессов и лёгкость
коммуникации между ними приводят к простоте
решений и изоляции негативных эффектов. В
продакшн можно пускать неидеальный код.


                                               28
OCaml
OCaml хорошо зарекомендовал себя при
необходимости делать символические вычисления,
порождая эффективный код.
В нашей компании он занял нишу C/C++.
Если есть возможность, рекомендую учить Haskell
(ради стройности на концептуальном и
синтаксическом уровне), затем использовать
OCaml, если появится нужда в скорости,
предсказуемости поведения или желание иногда
использовать сайд-эффекты без излишнего
монадизма.


                                                  29
xkcd.com/297   Вопросы?




30

More Related Content

What's hot

Erlang, который мы потеряли
Erlang, который мы потерялиErlang, который мы потеряли
Erlang, который мы потерялиIvan Grishaev
 
Erlang railsclub - 1
Erlang   railsclub - 1Erlang   railsclub - 1
Erlang railsclub - 1Max Lapshin
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4rit2011
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей ФедоровCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Max Lapshin
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)Ontico
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Daniel Podolsky
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...it-people
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляютсяMax Lapshin
 
неприятная правда про язык go
неприятная правда про язык goнеприятная правда про язык go
неприятная правда про язык goDaniel Podolsky
 
Пайплайн машинного обучения на 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
 

What's hot (18)

Erlang, который мы потеряли
Erlang, который мы потерялиErlang, который мы потеряли
Erlang, который мы потеряли
 
Erlang railsclub - 1
Erlang   railsclub - 1Erlang   railsclub - 1
Erlang railsclub - 1
 
Erlang ruby
Erlang rubyErlang ruby
Erlang ruby
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей Федоров
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляются
 
неприятная правда про язык go
неприятная правда про язык goнеприятная правда про язык go
неприятная правда про язык go
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHP
 

Viewers also liked

ekb.py: KISS REST API
ekb.py: KISS REST APIekb.py: KISS REST API
ekb.py: KISS REST APIYury Yurevich
 
Иван Иноземцев — Fantom
Иван Иноземцев — FantomИван Иноземцев — Fantom
Иван Иноземцев — FantomYury Yurevich
 
Virt2real - есть ли жизнь в железе?
Virt2real - есть ли жизнь в железе?Virt2real - есть ли жизнь в железе?
Virt2real - есть ли жизнь в железе?Maxim Krentovskiy
 
ekb.py: Mini Zen of Python
ekb.py: Mini Zen of Pythonekb.py: Mini Zen of Python
ekb.py: Mini Zen of PythonYury Yurevich
 
Almost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migrationAlmost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migrationYury Yurevich
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Alex Ott
 
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере NitrogenCodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере NitrogenCodeFest
 
BED-Con 2016 - I have a stream - Einsichten in Reactive Programming
BED-Con 2016 - I have a stream - Einsichten in Reactive ProgrammingBED-Con 2016 - I have a stream - Einsichten in Reactive Programming
BED-Con 2016 - I have a stream - Einsichten in Reactive ProgrammingJan Carsten Lohmüller
 
How Small Can Java Microservices Be?
How Small Can Java Microservices Be?How Small Can Java Microservices Be?
How Small Can Java Microservices Be?Eberhard Wolff
 
Artificial Intelligence - Past, Present and Future
Artificial Intelligence - Past, Present and FutureArtificial Intelligence - Past, Present and Future
Artificial Intelligence - Past, Present and FutureGrigory Sapunov
 
Sean's Resume 2015 (Linkedin update )
Sean's Resume 2015 (Linkedin update )Sean's Resume 2015 (Linkedin update )
Sean's Resume 2015 (Linkedin update )Sean Fitzgerald
 
Presentación1 sol pasto
Presentación1 sol pastoPresentación1 sol pasto
Presentación1 sol pastorKevelop
 
I.E. AGROINDUSTRIAL LOS PASTOS
I.E. AGROINDUSTRIAL LOS PASTOSI.E. AGROINDUSTRIAL LOS PASTOS
I.E. AGROINDUSTRIAL LOS PASTOSNelly Garreta
 
Lale festivali,tulip festival 2013
Lale festivali,tulip festival 2013Lale festivali,tulip festival 2013
Lale festivali,tulip festival 2013***
 
Ist.Santo Domingo
Ist.Santo DomingoIst.Santo Domingo
Ist.Santo Domingojuan cherre
 
Hemorragia de Tubo digestivo superior
Hemorragia de Tubo digestivo superiorHemorragia de Tubo digestivo superior
Hemorragia de Tubo digestivo superioreddynoy velasquez
 

Viewers also liked (20)

ekb.py: KISS REST API
ekb.py: KISS REST APIekb.py: KISS REST API
ekb.py: KISS REST API
 
Иван Иноземцев — Fantom
Иван Иноземцев — FantomИван Иноземцев — Fantom
Иван Иноземцев — Fantom
 
Virt2real - есть ли жизнь в железе?
Virt2real - есть ли жизнь в железе?Virt2real - есть ли жизнь в железе?
Virt2real - есть ли жизнь в железе?
 
About Python
About PythonAbout Python
About Python
 
ekb.py: Mini Zen of Python
ekb.py: Mini Zen of Pythonekb.py: Mini Zen of Python
ekb.py: Mini Zen of Python
 
Almost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migrationAlmost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migration
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)
 
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере NitrogenCodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
 
BED-Con 2016 - I have a stream - Einsichten in Reactive Programming
BED-Con 2016 - I have a stream - Einsichten in Reactive ProgrammingBED-Con 2016 - I have a stream - Einsichten in Reactive Programming
BED-Con 2016 - I have a stream - Einsichten in Reactive Programming
 
Http streaming
Http streamingHttp streaming
Http streaming
 
How Small Can Java Microservices Be?
How Small Can Java Microservices Be?How Small Can Java Microservices Be?
How Small Can Java Microservices Be?
 
Artificial Intelligence - Past, Present and Future
Artificial Intelligence - Past, Present and FutureArtificial Intelligence - Past, Present and Future
Artificial Intelligence - Past, Present and Future
 
Sean's Resume 2015 (Linkedin update )
Sean's Resume 2015 (Linkedin update )Sean's Resume 2015 (Linkedin update )
Sean's Resume 2015 (Linkedin update )
 
Presentación1 sol pasto
Presentación1 sol pastoPresentación1 sol pasto
Presentación1 sol pasto
 
I.E. AGROINDUSTRIAL LOS PASTOS
I.E. AGROINDUSTRIAL LOS PASTOSI.E. AGROINDUSTRIAL LOS PASTOS
I.E. AGROINDUSTRIAL LOS PASTOS
 
Lale festivali,tulip festival 2013
Lale festivali,tulip festival 2013Lale festivali,tulip festival 2013
Lale festivali,tulip festival 2013
 
Ist.Santo Domingo
Ist.Santo DomingoIst.Santo Domingo
Ist.Santo Domingo
 
Hemorragia de Tubo digestivo superior
Hemorragia de Tubo digestivo superiorHemorragia de Tubo digestivo superior
Hemorragia de Tubo digestivo superior
 
2016-07
2016-072016-07
2016-07
 
Agenda for Ecologically Safe Cities
Agenda for Ecologically Safe CitiesAgenda for Ecologically Safe Cities
Agenda for Ecologically Safe Cities
 

Similar to Лев Валкин — Кое-что про Erlang

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

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

“Чем хорош Erlang вообще и для веб-разработки в частности?”
Olga Lavrentieva
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 
Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?Vsevolod Dyomkin
 
32 подводных камня OpenMP при программировании на Си++
32 подводных камня OpenMP при программировании на Си++32 подводных камня OpenMP при программировании на Си++
32 подводных камня OpenMP при программировании на Си++Tatyanazaxarova
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin
 
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Anatoly Sharifulin
 
Algorithms and programming lecture in ru
Algorithms and programming lecture in ruAlgorithms and programming lecture in ru
Algorithms and programming lecture in russuser0562f1
 
Алгоритмизация и программирование С/С++
Алгоритмизация и  программирование С/С++Алгоритмизация и  программирование С/С++
Алгоритмизация и программирование С/С++ssuser0562f1
 
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentIntersog
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP languageVladimir Burdaev
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Denis Zakharov
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
Сергей Крыжановский - Языки программирования
Сергей Крыжановский - Языки программированияСергей Крыжановский - Языки программирования
Сергей Крыжановский - Языки программированияYandex
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Anthony Marchenko
 

Similar to Лев Валкин — Кое-что про Erlang (20)

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

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

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

 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?
 
32 подводных камня OpenMP при программировании на Си++
32 подводных камня OpenMP при программировании на Си++32 подводных камня OpenMP при программировании на Си++
32 подводных камня OpenMP при программировании на Си++
 
Invisible
InvisibleInvisible
Invisible
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)
 
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
 
Algorithms and programming lecture in ru
Algorithms and programming lecture in ruAlgorithms and programming lecture in ru
Algorithms and programming lecture in ru
 
Алгоритмизация и программирование С/С++
Алгоритмизация и  программирование С/С++Алгоритмизация и  программирование С/С++
Алгоритмизация и программирование С/С++
 
Изучение С/С++
Изучение С/С++Изучение С/С++
Изучение С/С++
 
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP language
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Сергей Крыжановский - Языки программирования
Сергей Крыжановский - Языки программированияСергей Крыжановский - Языки программирования
Сергей Крыжановский - Языки программирования
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
ОПК № 1 – Вводная
ОПК № 1 – ВводнаяОПК № 1 – Вводная
ОПК № 1 – Вводная
 

More from Yury Yurevich

PyCon UA 2011: Test Infected
PyCon UA 2011: Test InfectedPyCon UA 2011: Test Infected
PyCon UA 2011: Test InfectedYury Yurevich
 
Александр Гладыш — Visual editor for business logic in Lua and JS
Александр Гладыш — Visual editor for business logic in Lua and JSАлександр Гладыш — Visual editor for business logic in Lua and JS
Александр Гладыш — Visual editor for business logic in Lua and JSYury Yurevich
 
Ильшад Хабибуллин — BlueBream
Ильшад Хабибуллин — BlueBreamИльшад Хабибуллин — BlueBream
Ильшад Хабибуллин — BlueBreamYury Yurevich
 
Александр Гладыш — Lua
Александр Гладыш — LuaАлександр Гладыш — Lua
Александр Гладыш — LuaYury Yurevich
 
About (unit) testing
About (unit) testingAbout (unit) testing
About (unit) testingYury Yurevich
 

More from Yury Yurevich (7)

PyCon UA 2011: Test Infected
PyCon UA 2011: Test InfectedPyCon UA 2011: Test Infected
PyCon UA 2011: Test Infected
 
Александр Гладыш — Visual editor for business logic in Lua and JS
Александр Гладыш — Visual editor for business logic in Lua and JSАлександр Гладыш — Visual editor for business logic in Lua and JS
Александр Гладыш — Visual editor for business logic in Lua and JS
 
Ильшад Хабибуллин — BlueBream
Ильшад Хабибуллин — BlueBreamИльшад Хабибуллин — BlueBream
Ильшад Хабибуллин — BlueBream
 
Александр Гладыш — Lua
Александр Гладыш — LuaАлександр Гладыш — Lua
Александр Гладыш — Lua
 
Decorators' recipes
Decorators' recipesDecorators' recipes
Decorators' recipes
 
About (unit) testing
About (unit) testingAbout (unit) testing
About (unit) testing
 
SQLAlchemy Seminar
SQLAlchemy SeminarSQLAlchemy Seminar
SQLAlchemy Seminar
 

Лев Валкин — Кое-что про Erlang

  • 1. Кое-что про Erlang а также OCaml, Haskell Perl, PHP, C и C++ Лев Валкин, 2010 1
  • 2. О докладчике Драйверы на Asm x86 (1993) Веб-сайты на C, Shell, Perl (1996+) Математические обучалки на Delphi (1998) SMS-гейт на C, C++, Visual Basic (2001) Ускорял HTTP[S] на C, M4 (2003, два раза изобрёл LISP) Куски embedded-платформы Cisco ASA/PIX 2
  • 3. Стар(та)пер-2006 AboutEcho.com Анонсы на TechCrunch, RRW, VentureBeat ~$4.8mln венчурного финансирования ~25 человек, из них 20 — в России 3
  • 4. 2006: Быстрый старт Цель: быстро сделать эксперимент 4 дня программирования на Perl, через неделю — анонс на TechCrunch (2006) Привалило трафика (Sun SPARC 600 MHz) Часть функциональности сброшено на C (для скорости) 4
  • 5. 2007: Развитие Количество программистов: 1 Perl; в критических участках — C Сложность дебага: 0 Сложность развития: удовлетворительная Когда нет команды, любая знакомая технология будет приемлемо работать! 5
  • 6. 2007: Развитие Количество программистов: 4 Perl; в критических участках — C Сложность дебага: начинаются проблемы Развитие: Perl: разводится бардак в коде C: разводятся sigsegv в продакшне 6
  • 7. 2008: Развитие Количество программистов: 5-10 В Perl растёт лапшизм в коде Perl заменяется на Erlang (для нового кода) Те же люди (!) Без опыта в ФП (!!) В условиях ограниченного времени и бюджета 7
  • 8. Интермиссия: Erlang Считается функциональным языком Неизменяемость «переменных» Горячая замена кода «Конкурентно-ориентированный» — Процессы изолированы, общаются сообщениями Чрезвычайно простой 8
  • 9. Простой Erlang «Erlang действительно учится за две недели, это не миф» http://grey-kristy.livejournal.com/87271.html «По информации от различных источников: 2 недель хватит» http://levgem.livejournal.com/285670.html 9
  • 10. Мини-опрос Спросил наших разработчиков «Я бы положил на эрланг от одной до двух недель плотного изучения с упражнениями». «Достаточно одной — двух недель (прочитать getting started guide или книгу Армстронга)». «Можно учить специально и непрерывно, а можно по наличию задач. Изучал по второму варианту; за месяц». 10
  • 11. Мини-опрос «Писать можно на эрланге через неделю — с докой, через две — с докой на полке, через месяц — комфортно». «Уверен, что можно выучить erlang и уже попробовать OTP за месяц. Без OTP вообще наверное недели две». «По эрлангу, чтобы начать писать модули — недели две чтения мануалов и тьюториалов. И еще пару недель доучиваться erlang-style кодописанию». 11
  • 12. С точки зрения руководителя Нанимаемые специалисты имели опыт от PHP +JavaScript до C/C++, но не имели опыта в ФП. Предыдущий опыт на скорость обучения не влияет. Возраст — 22-35 лет, на скорость изучения не влияет. При наличии задач, обучение происходит быстро, в горизонте оперативного планирования (2-4 недели). 12
  • 13. С точки зрения code nazi «Набеговое программирование» в команде располагает делать спагетти-код, кишащий сайд- эффектами. Erlang «сопротивляется» эффектам, к которым приводит спагетти-код: Процессы изолированы, эффекты плохого кода в одной подсистеме не влияют на другую. Связанные процессы не позволяют редкой ошибке привести к отказу системы. 13
  • 14. С точки зрения code nazi Неизменяемые переменные и отсутствие глобальных переменных поощряют разработку с минимумом сайд-эффектов. Эти же свойства упрощают независимое тестирование подсистем. 14
  • 15. Адвокат дьявола В распространённых языках проблема спагетти-кода облегчается инструктажем, соглашениями о коде, юнит-тестами и ревью кода. А если проблема не стоит, зачем использовать Erlang? Тем более, для программ в функциональном стиле сложно проводить code-review. В нашей компании делается ревью Erlang-кода. Спросим инженеров, что легче, ревью скриптового языка, на котором они писали до эрланга, или ревью Erlang-кода? 15
  • 16. Ревью P* vs. Erlang? (Знание языков. «Отзыв») Erlang >> P*. «Конечно, [Erlang] проще. Меньше возможностей для сайд-эффектов. Функции из других модулей qualified, проще искать код». Erlang (0.7) Perl (0.5). «[Erlang] Проще». Erlang (0.8) Perl (0.5). «[Erlang] Однозначно проще. Когда пару раз столкнешься с проблемами в перле, начинаешь понимать, что ревью там делать очень сложно». 16
  • 17. Ревью P* vs. Erlang? PHP (1.0) Erlang (0.7). «Одинаково». PHP (0.7) Erlang (0.6). «Владея контекстом, легче делать ревью на erlang код». Perl (0.9) Erlang (0.8). «Думаю, одинаково. Ревью функционального кода требует более глубокого вникания, но менее "богатый" синтаксис и компактный код упрощают понимание». Perl (1.0) Erlang (0.8). «Проще [Erlang]». 17
  • 18. Ревью P* vs. Erlang? Те, кто знают Erlang лучше (кстати, почему?), говорят, что для Erlang проще делать код-ревью. Логично. Те, кто знает P* языки лучше, говорят, что для Erlang не сложнее делать код-ревью. Почему? «Менее богатый синтаксис и компактный код упрощают понимание». «Меньше возможностей для сайд-эффектов». 18
  • 19. 2009: Ускорение Напомню: Perl → (Perl, C) → (Erlang, C/C++) Проблема: никто не хочет работать с C/C++. Сложно найти или обучить людей (N.B.: обычно этот аргумент выдвигают против FP!) «Набеговое программирование» даёт сбой и здесь. Sigsegv в продакшн становятся ежедневной проблемой, а то и бизнес-риском. Valgrind и анализ корок помогают, но симптоматично, не устраняя причины. 19
  • 20. 2009: Ускорение Идея: попробовать Haskell (я знал неплохо). Риски: кривая обучения, производительность решения. Сделан аналог C++ кода на Haskell. В 10 раз медленнее (в 10 раз больше машин?!) После оптимизаций — в 3 раза медленнее. Плохо. 20
  • 21. 2009: Ускорение Альтернатива: попробовать OCaml (никто не знал). Риски те же: кривая обучения, производительность. Аналог нашего основного C++ компонента: Решение в лоб: ~5-10% быстрее (да, свежий код). В ~5 раз — на несколько тысяч строк — короче (см. рис.) Пришлось задействовать две глобальные переменные. 21
  • 22. 2010: Настоящее Эволюция ядра системы: Perl → (Perl, C) → (Erlang, C/C++) → (Erlang, OCaml) Другие языки тоже используются: Perl, PHP, Python, JavaScript (на клиенте), C, C++, Haskell (для генерации JS). Примерно в 3-5 раз больше функционального кода. 22
  • 23. Кококомл — Он спрашивает, «как ока?» — Ну и ответь ему, «ко-ко-ко» Изучаемость: «Примерно в два раза дольше, чем эрланг». «Без опыта в ФП — месяца два, если есть опыт, то хватит месяца». (А также «две недели» и «месяца три») «Окамл я знаю хуже C++, но разбираться в нем (окамле) проще, чем в C++». Кстати, как в OCaml с код- ревью? 23
  • 24. Ревью C/C++ vs. Ocaml (Знание языков. «Отзыв») C+/C++ >> OCaml: «По сравнению с c/c++ окамл я знаю намного хуже. При солидной форе в сторону c/c++ я считаю, что код-ревью в ocaml проще, опять же, из-за почти отсутствующих сайд-эффектов». OCaml (0.4): «Сложнее». C/C++ (0.8) OCaml (0.6): «Для меня пока сложнее или одинаково». 24
  • 25. Ревью C/C++ vs. Ocaml OCaml (0.7) C (0.5): «Сложнее. Причина в основном в каринге и использовании функций без точечной нотации». OCaml (0.6) C (0.6): «Если изменения в коде масштабные, ocaml ревьюить сложнее». 25
  • 26. Erlang vs. OCaml executive summary Erlang быстро изучается и положительно воспринимается командой, быстро переходя в список «комфортных, своих» языков. «Из всех перечисленных языков эрланг нравится больше всех, не для решения конкретных задач, а просто по ощущениям» (респондент знает PHP глубже, чем Erlang) OCaml воспринимается тяжеловато, как типичный «неосновной язык». Делать ревью кода для него сложнее, чем для C/C++. Может ли это быть артефактом лаконичности (количество смысла на строчку) кода? 26
  • 27. Erlang vs. OCaml executive summary Инженеры отметили положительное влияние отсутсвия сайд-эффектов на программирование и код-ревью OCaml и Erlang. Erlang прост! Необычность синтаксиса более чем компенсируется его простотой. Понятная и элементарная семантика. REPL. Идиосинкразии (не просто необычности, а реальный shit) синтаксиса OCaml вызывают нарекания в процессе обучения. Ограниченный REPL. OCaml компилируем и быстр! Если не делать специальных оптимизаций, то OCaml ~= C/C++, особенно если переписывать существующий код. 27
  • 28. Erlang Erlang хорошо себя зарекомендовал для общего серверного программирования: command-and- control, координирование потоков данных, управление функциональностью, написанной на других языках (OCaml, C/C++, Perl, Python). В нашей компании он занял нишу динамических серверных языков (Perl, PHP, Python). Независимость процессов и лёгкость коммуникации между ними приводят к простоте решений и изоляции негативных эффектов. В продакшн можно пускать неидеальный код. 28
  • 29. OCaml OCaml хорошо зарекомендовал себя при необходимости делать символические вычисления, порождая эффективный код. В нашей компании он занял нишу C/C++. Если есть возможность, рекомендую учить Haskell (ради стройности на концептуальном и синтаксическом уровне), затем использовать OCaml, если появится нужда в скорости, предсказуемости поведения или желание иногда использовать сайд-эффекты без излишнего монадизма. 29
  • 30. xkcd.com/297 Вопросы? 30