Инфраструктура Erlang: с чего начать?

Feb 5, 2014 16:37 · 547 words · 3 minute read erlang tutorial

Посмотрев замечательную вводную от Юрия Жлобы, я понял, что писал под YAWS совсем не так, как нужно. Всё-таки без OTP, на чистом erlang, трудно делать серьёзные вещи. Вот и стал копать глубже в инфраструктуру этого языка: узнавать какие есть веб-сервера, библиотеки, концепции и правила. Посему эта заметка будет от новичка для новичка :)

С чего же начать?

Прежде всего основы следует изучить на RSDN (там же и про обработку ошибок). После этого стоит посмотреть видео по ссылке выше. Надеюсь, к этому моменту должно возникнуть понимаение что такое OTP :) И вот только после этого стоит читать перевод книги Армстронга “Programming Erlang”. Если есть свободная тысяча рублей, то можно приобрести книгу Чезарини/Томпсона “Программирования в Erlang”. В ней есть главы, посвещённые раработке GUI-приложений, взаимодействию с Ruby, стилю кодирования, тестам, документации…

В процессе изучения должна попасться на глаза классная штука - rebar - менеджер зависимостей. Поставить его надо обязательно - без него никуда. Можно взять с github, а можно из репозитория ubuntu. Эта штука умеет не только тянуть зависимости, но также компилировать проект, создавать новый по OTP, запускать тесты.

Кому нужна теория без практики?! :) Вот здесь описано как парсить страницы, а тут создание паука для скачивания информации с сайта.

Что есть для веба?

Вот тут такое разнообразие, что у меня до сих пор полного понимания нет :( Здесь следует разделять веб-сервера и фреймворки. Отдельно я бы вынес mochiweb - набор модулей для всяких разных вещей. Например, я из ней использовал модули для разбора html и его парсинга. Тем не менее там есть и средства для организации веб-сервера. Кстати, она используется в cowboy, и можно подключить к приложению для YAWS.

Раз уж заикнулся, то основных веб-сервера 2: YAWS и cowboy. Оба есть в репах ubuntu под названиями yaws и erlang-cowboy соответственно. Однако, в репозитории erlang-solution всегда самые свежие версии. Документация есть, не сказать что подробная да и тем более на английском, так что вот ссылочки для быстрого старта: Yaws — веб-сервер на Erlang и Web-сервер на базе Cowboy. В самом начале я предпочёл первый вариант, так что про него информации чуть больше. Пример как его готовить лучше посмотреть на исходниках самого сайта, есть даже книжка, но она не на русском :(. Поставить оные можно по следующей схеме:

$ git clone https://github.com/klacke/yaws
$ cd yaws/
$ rebar get-deps compile
$ autoconf
$ ./configure
$ make

Однако, YAWS меня несколько огорчает :( Автоперекомпиляция модулей работает с задержкой, что для отладки неудобно ни разу; к тому же непонятно как генерировать 500ку. В общем, познакомился, поковырял, но буду изучать альтернативу, а она пока всего одна - cowboy. Говорят там даже встроенный шаблонизатор есть :)

Куда ж в наше время без фреймворков?!

Для каждого веб-сервера написан свой фреймворк - YAWS/Nitrogen и Cowboy/ChicagoBoss, N2O. Есть ещё BeepBeep, Erlang Web, ErlyWeb, Zotonic, но они фактически мертвы - последние коммиты были в прошлом десятилетии. Сравнить же все их можно на этой странице, а здесь есть бенчмарки. Не буду врать, я с ними не работал, так что много сказать не могу. Разве что немного примеров разработки на N2O, Nitrogen и ChicagoBoss (1, 2).

Итоги

Вот и всё, что мне удалось пока накопать. В будущем я планирую уйти от YAWS к N2O (мне подсказали, что он сейчас в тренде) и переписать под него Mercator.

Upd. Большое спасибо комментатору Илья Беда за критику заметки. Я обновил её в соответствии с замечаниями.