Comments 15
Автор, хрошее дело делаете, спасибо.
Народ, поделитесь опытом, для каких задач кто применяет Erlang (желательно поподробней, с примерами кода)?
Народ, поделитесь опытом, для каких задач кто применяет Erlang (желательно поподробней, с примерами кода)?
+1
На сколько я знаю, серверная часть Яндекс диска на Erlang ездит. Хотя могу ошибаться.
+2
В телекоме используется для роутинга пакетов (как я понял, для этого Эрланг и разработали), в серверах приложений (слышал, что кое-где на эрланге пишут сервер для онлайн игры). В общем, везде, где нужно что-то быстро обработать поточно, причём массово, высокопараллельно и супернадёжно.
+2
Пишем процессинг платежных транзакций (и кучу вспомогательных вещей). Но мы не одни такие. Шведская Klarna пока еще тоже на эрланге сидит. Кроме того (из того, что еще не отметили), эрланг применяют в hft (Exante), в чем-то связаном с рекламой (насколько я понимаю, Campanja), играми (MochiMedia), интерактивным Web (Echo), видеостриммингом (Flussonic, бывший erlyvideo, код, например, тут можно посмотреть).
+1
Эти ребята используют его для игры.
Pikko Server — для мультиплеерных игровых серверов.
И даже для веб-приложений.
Pikko Server — для мультиплеерных игровых серверов.
И даже для веб-приложений.
0
Единственное — посоветовал бы в примерах писать не
Первый вариант обычно понимается, как динамически вызываемая функция, типа:
Я лично с Erlang начал знакомство тут www.rsdn.ru/article/erlang/GettingStartedWithErlang.xml — перевод официального tutorial.
ModuleName:FunctionName(Arg1, Arg2, ..., ArgN)
а module_name:function_name(Arg1, Arg2, ..., ArgN)
.Первый вариант обычно понимается, как динамически вызываемая функция, типа:
call_function(ModuleName, FunctionName) ->
ModuleName:FunctionName().
Я лично с Erlang начал знакомство тут www.rsdn.ru/article/erlang/GettingStartedWithErlang.xml — перевод официального tutorial.
+3
А есть ли возможность сделать «return» в середине функции?
0
Именно return нет. Но, если требуется прервать выполнение из за ошибки (и при этом не выпустить ошибку наружу), можно слепить конструкцию из catch и begin… end например (но это плохой пример, потому что можно и нужно обойтись и без этого трюка, но идея должна быть ясна).
А насчет return из середины при happy path я не припомню, чтобы это пригождалось. Всегда находится способ (матч в голове клоза, вынести логику в лямбду или отдельную функцию) не прибегать к этому. Получается элегантнее.
foo(Bar) ->
catch begin
Zoo = do_some_very_necessary_work(),
if
Bar < 5 -> throw({error, invalid_bar});
true -> ok
end,
Result = do_bar(Bar, Zoo),
{ok, Result}
end.
А насчет return из середины при happy path я не припомню, чтобы это пригождалось. Всегда находится способ (матч в голове клоза, вынести логику в лямбду или отдельную функцию) не прибегать к этому. Получается элегантнее.
+1
Можно разбить тело функции на две логические ветви (как раз будет рассмотрено в следующей главе). Тогда перед выполнением функции производится проверка и выполняется та часть, которая нужна. И результат возвращается из нее.
+1
Нет, нельзя. Можно бросить эксепшен, а в вызывающей функции его поймать, но как-то это не очень красиво получается, и вообще не erlang-way
На практике этот приводит к разбиению кода на множество функций по 2-3 строки, что бы не вылезать за 2 уровня в дереве case'ов
На практике этот приводит к разбиению кода на множество функций по 2-3 строки, что бы не вылезать за 2 уровня в дереве case'ов
0
Sign up to leave a comment.
Erlang для самых маленьких. Глава 2: Модули и функции