- PVSM.RU - https://www.pvsm.ru -
Доброе время суток, уважаемая аудитория хабра.
В данной публикации я хотел описать свой опыт перехода с корпоративного Java на Erlang.
С недавнего времени начал замечать, что у большего числа людей просыпается интерес к функциональному программированию. Многих в это направление разработки приводит чисто академический интерес, некоторые пытаются решать задачи более подходящими средствами, а другие просто сталкиваются с этим на новых проектах.
После довольно продолжительного времени Java/Python разработки, я решил кардинально изменить сферу деятельность и открыл для себя Erlang.
После многопоточного хела Java, Erlang предложил более аккуратную и менее ресурсоемкую модель решения проблемы многопоточного программирования — модель акторов.
Данная модель конечно имеет свои минусы и плюсы, но функциональная парадигма и отсутствие (или контроль) за сайд эффектом существенно дополняют друг друга.
Хотя стоит заметить, что «настоящая» многопоточность была введена в Erlang относительно недавно, в 2006 году. После реализации SMP(Symmetrical Multi Processor) внутри Erlang VM.
Данная реализация датирована 2008 годом, к сожалению я не нашел описания последней реализации, но скорее всего они ушли от разделяемой очереди на все планировщики.
Если в кратце, то поддержка SMP позволяет использовать от 1 до 1024 планировщиков процесса, которые работают внутри каждого потока. Планировщики вынимают Erlang процессы и IO задачи из общей очереди. В SMP все разделяемые структуры данных защищены блокировкам. Очередь задач является примером такой структуры. Данная реализация [1] была описана в 2008 году, и разработчики уже тогда планировали уйти от общей очереди задач к очередями на каждый планировщик.
При переходе с хорошо прикормленного Enterprise Java мира, где есть почти все, что нужно и под любыми лицензиями, стоит только об этом подумать, а оно уже лежит где-нибудь в открытом источнике. Я столкнулся с тем, что в мире Erlang отсутствует очень много необходимых инструментов, библиотек, интеграционных технологий, статей, мануалов.
К сожалению, в Erlang нет централизованного места хранения проектов и библиотек, поэтому github дефакто стал той самой площадкой, где публикуются Erlang проекты.
Предлагаю ознакомиться со списком того, без чего очень тяжело работать Erlang разработчику.
Начнем со средств автоматизации развертывания платформы и сборки проекта.
Без этого скрипта было бы очень сложно выполнять тестирования своих приложений на разных версиях Erlang. Позволяет собрать необходимый вам билд Erlang из исходников, добавляет его в глобальный список, позволяет установить собранный билд в необходимую директорию и после очень удобно переключаться между сборками.
Получаем список возможных релизов:
Собираем выбранный релиз как билд:
Устанавливаем собранный билд в дерикторию:
Узнаем список билдов установленных в системе:
Данная утилита выполняет сборку, компиляцию, управления зависимостями также из систем контроля версий.
Существует несколько статей [3] по использованию rebar и довольно хорошая документация. [4]
Я лишь пройдусь по основным командам:
Стоит отметить, что данный инструмент уже давно стал стандартом при работе с проектами на Erlang. Очень хотелось бы, чтобы Ericsson внес его в стандартный OTP.
Де-факто Emacs считается основным средством разработки на Erlang.
Для любителей Emacs существует огромное количество плагинов и расширений, позволяющих упростить и ускорить разработку, но данный подход подойдет не для всех.
После непродолжительных поисков были найдены некоторые плагины.
Проект развивается и на данный момент удалось добиться (список не полный):
Так же есть довольно удобный рефакторинг и поиск.
А какие инструменты используете вы при разработке на Erlang?
Автор: HDDimon
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/68999
Ссылки в тексте:
[1] реализация : http://www.erlang.se/euc/08/euc_smp.pdf
[2] Kerl: https://github.com/yrashk/kerl
[3] статей: http://habrahabr.ru/post/112681/
[4] документация.: https://github.com/rebar/rebar/wiki
[5] Источник: http://habrahabr.ru/post/235719/
Нажмите здесь для печати.