ФорумПрограммированиеФункциональные языкиErlang → Для чего

Для чего

  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 14 июня 2012 г. 17:51

    Хочу вкратце описать, для чего 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, но при этом читаемость лучше - у меня по крайней мере так выходит.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 14 июня 2012 г. 19:00, спустя 1 час 8 минут 55 секунд

    Инструментов расширения типов нет.

    дополнительные типы данных

    так есть или нет?)
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 14 июня 2012 г. 22:30, спустя 3 часа 30 минут 15 секунд

    Видимо нет typedef или class, но через подключаемые расширения можно добавить типов. Так?
    ιιlllιlllι унц-унц
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 15 июня 2012 г. 2:32, спустя 4 часа 2 минуты 9 секунд

    mathete, спасибо, этот пост как раз был для меня.
    на досуге как то поковыряю обязательно.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 15 июня 2012 г. 3:29, спустя 56 минут 49 секунд

    NRG, был на phpize, там чуваки рассказывали о том, как через эрланг выделяют по процессу на клиента для того, что б в нем чекаут проводился
  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 15 июня 2012 г. 3: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 назад рассказывал мне как прекрасен эрланг. Но я отложил на два года. Не повторяйте моих ошибок :)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 30 июня 2012 г. 9:09, спустя 15 дней 5 часов 9 минут

    Кстати, её создатель, Дима Васильев, ещё года 2.5 назад рассказывал мне как прекрасен эрланг. Но я отложил на два года. Не повторяйте моих ошибок :)

    Спасибо за статью Боря, но я пока отложу на полгодика углубление в Erlang, да и задач пока особо таких нет
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 16 января 2013 г. 14:38, спустя 200 дней 6 часов 29 минут


    mathete, спасибо, этот пост как раз был для меня.
    на досуге как то поковыряю обязательно.
    как продвигается?
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!