Что и почему писать на Erlang
Upcoming SlideShare
Loading in...5
×
 

Что и почему писать на Erlang

on

  • 6,512 views

Почему Erlang несравненно лучше, чем Java, C++, Node.js и прочие бейсики.

Почему Erlang несравненно лучше, чем Java, C++, Node.js и прочие бейсики.

Statistics

Views

Total Views
6,512
Views on SlideShare
6,094
Embed Views
418

Actions

Likes
14
Downloads
59
Comments
1

7 Embeds 418

http://lj-toys.com 290
http://l.lj-toys.com 104
http://twitter.com 9
http://www.linkedin.com 6
https://si0.twimg.com 5
https://twitter.com 3
http://xss.yandex.net 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Если вы, уважаемый автор называете Java и C++ бейсиками, то это может означать только одно - вашу полную профнепригодность, что вы закоренелый имбицил или олигофрен и являетесь ярким представителем IT чма.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Что и почему писать на Erlang Что и почему писать на Erlang Presentation Transcript

  • Что и почемуписать на Erlang Макс Лапшин erlyvideo max@erlyvideo.org
  • Erlang — это круто• Опыт создания видеостримингового сервера erlyvideo• Есть с чем сравнивать: C++, Java, ObjectiveC• Erlang прекрасно себя показал
  • Erlang — это круто• Это не больно• Это свободная /cores по утрам• Это возможность пускать новичков в продакшн• Это решение проблем продакшна
  • Область применимостиДолгоживущие серверные приложения,обеспечивающие коммуникацию большого числаонлайн пользователей
  • Область применимости• Игры• Чаты, конференции• Аудио/видео коммуникации
  • Область применимости• Игры• Чаты, конференции• Аудио/видео коммуникации• Коммуникация онлайн-пользователей
  • Это всё можно делать• на Java
  • Это всё можно делать• на Java• на C++
  • Это всё можно делать• на Java• на C++• на Node.js
  • Это всё можно делать• на Java• на C++• на Node.js• на прочих перфокартовых технологиях
  • Проблемы общего назначенияПлатформы общего назначения имеют проблемы,фатальные для описываемой ситуации
  • Проблемы общего назначенияПлатформы общего назначения имеют проблемы,фатальные для описываемой ситуации
  • Проблемы общего назначенияПлатформы общего назначения имеют проблемы,фатальные для описываемой ситуацииВ контексте этих проблем Java от бейсика неотличается
  • Проблемы Java• Утечки памяти
  • Проблемы Java• Утечки памяти• Утечки ресурсов
  • Проблемы Java• Утечки памяти• Утечки ресурсов• Обработка ошибок
  • Проблемы Java• Утечки памяти• Утечки ресурсов• Обработка ошибок• Сложность параллельного программирования
  • Причина проблемВ языках типа Java разделены объекты и потокивыполненияУ них разное время жизни
  • Причина проблемНелокальность исключений по отношению кобъектамОбработка ошибок становится проблемой ипревращает код в спагетти
  • Причина проблемМутабельные данные превращают параллельноепрограммирование в кошмар
  • Результаты проблемПривлечение новых программистов — головная больИх ошибки валят весь проектЦена программирования растет
  • Erlang — это круто
  • Erlang — это круто• Вся память разделена на изолированные потоки исполнения
  • Erlang — это круто• Вся память разделена на изолированные потоки исполнения• Общение происходит через обмен копируемыми сообщениями
  • Erlang — это круто• Вся память разделена на изолированные потоки исполнения• Общение происходит через обмен копируемыми сообщениями• Все данные немутабельны, ссылок нет
  • Erlang — это круто• Вся память разделена на изолированные потоки исполнения• Общение происходит через обмен копируемыми сообщениями• Все данные немутабельны, ссылок нет• Эти потоки выглядят как процессы ОС и так же называются — «процессы»
  • Erlang — это крутоСпроектирован программистами Ericsson, которыеочень хотели спать по ночам
  • А вы хотите, что бы ночью работало только ПО?
  • Решение проблем• Просто и автоматически
  • Решение проблем• Просто и автоматически• Данные живут не дольше процесса
  • Решение проблем• Просто и автоматически• Данные живут не дольше процесса• Отсутствие мутабельности и ссылок снимает проблему их утекания
  • Решение проблем• Просто и автоматически• Данные живут не дольше процесса• Отсутствие мутабельности и ссылок снимает проблему их утекания• Ошибки автоматически пишутся в лог и завершают текущий процесс
  • Решение проблем• Просто и автоматически• Данные живут не дольше процесса• Отсутствие мутабельности и ссылок снимает проблему их утекания• Ошибки автоматически пишутся в лог и завершают текущий процесс• Ресурсы закрываются вместе с процессом
  • Let it crash• Программистам платят только за happy path• Продавцы продают код, а не обработку ошибок
  • ERror handling LANGuage{ok, F} = file:open(“a.txt”),{ok, Bin} = file:read(F, 1024)
  • soft-realtime• Нет ссылок• у каждого процесса изолированная куча• сборка мусора раздельная по ядрам
  • Многоядерность• Процессы изолированы• Никаких взаимных мьютексов• Автоматический шедулинг по ядрам из коробки
  • Горячая замена кода• Деплой кода без отключения онлайн пользователей
  • Легкая кластеризация• Сообщения точно так же копируются по сети• Идентификаторы процессов прозрачно переходят по сети
  • Говорят, Node.js круче• Нам не нужны изолированные треды• Нам не нужна многопроцессорность из коробки• Нам не нужна готовая инфраструктура обработки ошибок• Нам не нужна прозрачная сетевая работа• Мы выбираем server-side JS, потому что мы знаем JS
  • Evented — шаг назад• Evented подход превращает код в спагетти• Обработка ошибок в коллбеках ещё сложнее чем try/catch• Ни одна указанная проблема не решается• Годится для nginx
  • В Erlang и это круче{ok, F} = http_file:open(“http://ya.ru/”),{ok, Bin} = http_file:read(F, 1024)
  • Резюме• Классические решения имеют проблемы, вылезающие в продакшне• Проблемы дизайна усложняют включение новых программистов• Некоторые «модные» технологии ничего нового не привносят
  • Резюме• В Erlang дизайн платформы решает указанные проблем• Удешевляется поддержка и программирование• Растет плотность информации в коде (до 10 раз)• Облегчается включение новых программистов
  • Вопросы? Макс Лапшинmax@erlyvideo.org