Форум → Программирование → Функциональные языки → Erlang → Для чего
Для чего
-
Хочу вкратце описать, для чего Erlang стоит использовать, а для чего не стоит.
Пост для людей, которые вообще не в курсе, что это за язык, или только слышали про него.
1. Самое главное понять, что Erlang парадигматически сильно отличается от других языков и его предпочтительная ниша этой парадигмой хорошо очерчена.
Что можно сделать на python так уверенно, что позади останутся ruby, php и прочие? Пожалуй, ничего… Да, может для чего-то есть более удобные библиотеки, но сам язык не выделяет нишу.
С erlang проще - это единственный из популярных промышленных языков, который сделан под параллельные устойчивые системы.
Отсюда следует и ниша - приложения, которые работают в кластерах и требуют повышенной стабильности.
На erlang можно и gui делать и движок под блог сделать, но тут не видно таких преимуществ, чтобы заставить себя изучить его.
Если же у вас проект с серьёзной нагрузкой, множеством процессов, распределенный по кластеру и основные силы уходят на устойчивость, масштабируемость и попытках упростить работу с инфраструктурой, то видимо Erlang для вас. Причем тут конкурентов и нет.
2. Erlang простой язык. Синтаксис непривычный, но лапидарный. Встроенных типов всего ничего. Инструментов расширения типов нет. Да, он функциональный, но довольно поверхностно: есть лямбы, паттерн-матчинг, списковые выражения, иммутабельность. Нет ленивостей, выводов типов, требований чистоты, а также монад.
Если есть понимание программирования, опыт работы с несколькими языками, то за неделю можно начать во всю писать уже полезные вещи.
3. Подробнее про основное. Вся новомодная асинхронность - tornado, gevent(python), node.js и т.д. это то, что в erlang сделано по умолчанию и отточенно десятилетиями. Весь ввод-вывод асинхронный на уровне языка. Более того - "зеленые потоки", это аналог эрланговских процессов. А процессы в эрланге - это как в питоне инстанцы класса, на уровне языка. Только при этом процессы раскидываются по ядрам автоматически, и не только - совершенно спокойно раскидываются и управляются процессы по нодам. Это тоже на уровне языка, причем именно в ядре, а не в стандартных библиотеках.
4. Скорость работы. Erlang компилируется в байт-код, выполняемый виртуальной машиной. Бенчмарки можете сами поискать. Мои личные ощущения - он визиуально значительно быстрее python в задачах краулинга, парсинга, любого сетевого взаимодействия (БД, или как веб-сервер)
5. Скорость разработки. Идет в поставке довольно богатая стандартная библиотека - дополнительные типы данных, работа со строками, регекспы, base64, crypto, http, ssh и т.д. В сети много фреймворков и мелких библиотек (под базы данных, форматы).
Кода получается примерно столько же, сколько и на python, но при этом читаемость лучше - у меня по крайней мере так выходит. -
14 июня 2012 г. 16:00, спустя 1 час 8 минут 55 секунд
Инструментов расширения типов нет.
дополнительные типы данных
так есть или нет?) -
14 июня 2012 г. 19:30, спустя 3 часа 30 минут 15 секунд
Видимо нет typedef или class, но через подключаемые расширения можно добавить типов. Так?ιιlllιlllι унц-унц -
14 июня 2012 г. 23:32, спустя 4 часа 2 минуты 9 секунд
mathete, спасибо, этот пост как раз был для меня.
на досуге как то поковыряю обязательно. -
15 июня 2012 г. 0:29, спустя 56 минут 49 секунд
NRG, был на phpize, там чуваки рассказывали о том, как через эрланг выделяют по процессу на клиента для того, что б в нем чекаут проводился -
15 июня 2012 г. 0:59, спустя 30 минут 29 секунд
Инструментов расширения типов нет.
дополнительные типы данных
так есть или нет?)
Я плохо сформулировал. Да тут без примера и не понять, наверное. Буду сравнивать на примерах питона.
Вот в питоне есть встроенные list, tuple, dict, set. Если же чего-то не хватает то берем и пишем свой класс. И это будет новый тип данных. Для работы с типами и экземплярами много функций втроенных - type, isinstance и т.д.
В эрланге для построения конструкций есть только list и tuple. Всё. И инструментов по работе именно с типами нет - нельзя добавить. Любые конструкции строятся на композициях списков и кортеджей. Это вначале вызывает конечно лютый шок. Но потом быстро к этому привыкаешь.
А библиотеки, которые я имел в виду предоставляют работу именно с такими композициями. Вот например ассоциативный массив.
1> D = dict:from_list([{"a", 1}, {"b", 2}]).
{dict,2,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],
[["b"|2]],
[],[],[],[],[],[],[],[],[],[],
[["a"|1]],
[],[],[]}}}
2> dict:fetch("a", D).
1
3> is_tuple(D).
true
Если смотреть с уровня употребления - да, это тип, ассоциативный массив. Вот мы его сделали из списка, вот получили по ключу значение. Но это кортедж кортеджей, со списками внутри.
NRG, был на phpize, там чуваки рассказывали о том, как через эрланг выделяют по процессу на клиента для того, что б в нем чекаут проводился
Да, я про это не написал - в эрланге очень хорошо сделана коммуникация с другими языками. Есть такое понятие - порт. Порт это совершенно любая программа, которую можно запустить и общаться с ней через stdin, stdout. И так многие делают - инфроструктура, сетевое взаимодействие на erlang, а сложные куски логики, или то, что просто влом переписывать работает в портах. Для питона есть чудная библиотека (https://github.com/hdima/erlport), которая обвязывает это всё и упрощает работу.
Кстати, её создатель, Дима Васильев, ещё года 2.5 назад рассказывал мне как прекрасен эрланг. Но я отложил на два года. Не повторяйте моих ошибок :) -
30 июня 2012 г. 6:09, спустя 15 дней 5 часов 9 минут
Кстати, её создатель, Дима Васильев, ещё года 2.5 назад рассказывал мне как прекрасен эрланг. Но я отложил на два года. Не повторяйте моих ошибок :)
Спасибо за статью Боря, но я пока отложу на полгодика углубление в Erlang, да и задач пока особо таких нетhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
16 января 2013 г. 11:38, спустя 200 дней 6 часов 29 минут
как продвигается?
mathete, спасибо, этот пост как раз был для меня.
на досуге как то поковыряю обязательно.https://smappi.org/ - платформа по созданию API на все случаи жизни
Пожалуйста, авторизуйтесь, чтобы написать комментарий!