Pull to refresh
23
Яков@egobrain

Программист

4
Subscribers
Send message
Разобравшись с инфой по ссылке не совсем понял какой профит принесет такой код относительно моего в том случае если декоратор поставить на рекурсивную функцию.

fact(N) when is_integer(N) andalso N>=1  ->
    fact(N,1).

?MEMOIZE. % now decorator is here
fact(1,Acc) -> Acc;
fact(N,Acc) -> fact(N-1,Acc*N).
Да… И порядок имеет значение.
Я, кстати, реализовывал loginRequired декоратор, когда писал проект под Cowboy.
Согласен. Это скорее кэширование результата.
Но смысл статьи просто продемонстрировать декораторы, а пример — первое что пришло в голову.

Вообще в своем коде я декораторы применяю только для отладки участков кода, а в production они и вовсе отключены.
каррирования, монад)) Но как это обойти во общем-то понятно. Но это тоже «черная магия».

Erlando наше все :)
Тут применимы, я имею в виду более сложные случаи, в которых производительность — ключевой фактор.
+proplist нельзя match-ить
Это уже интереснее: могут выпилить, но могут таки и оставить, слегка улучшив :)
Не знаю как к этому относиться: с одно стороны не хочется чтобы Erlang потерял свою лаконичность из-за введения новых фич; с другой-же, складывается ощущение, что в нем чего-то таки не хватает. Какой-то мелочи, которая сделала бы его идеальным, по крайне мере для меня.
Но с тем что record не самое лучшее решение (особенно, из-за того что его структура теряется в runtime, что особенно критично когда State хранится в record и при добавлении нового поля при hot code reload все летит к чертям ) и его надо чем-то заменить, я полностью согласен.
На сколько я понял это не совсем то.
tuple fun это как-то так:
F = {lists,seq},
F(1,10).

Отлично! Большое спасибо за новость. Вроде как на большой конференции EUC рассказывали про много вкусностей грядущего R16.
Ага! Теперь цыганки смогут более точно предсказывать ваше будущее =))
Прошу прощения, но у вас в ссылке на GitHub лишний пробел затесался. github.com/kappa/yadisk-sync%20.
Речь не о скорости выполнения, а о потребляемой памяти.
Вот набросал простой код для теста (у меня Erlang 15B01). Он съедает всю доступную память, т.к. не используется хвостовая рекурсия:
-module(test).
-export([loop/0]).
loop() ->
  receive
    stop -> true;
    _ -> loop()
  end,
  io:format("test").

Тест вызывался так:
Pid = spawn(fun test:loop/0).
lists:foreach(fun(_) -> Pid ! test end,lists:seq(1,100000000)).

без io:format все отлично работает.
В пункте 5.9 в первом случае применяется не хвостовая рекурсия. При каждом входе в loop() в стек вызовов добавляется адрес возврата (для того чтобы при завершении выполнить io:format). Т.к, теоретически, сервер должен выполняться длительное время, то стек может переполниться. При использовании хвостовой рекурсии такого не происходит.
В данный момент использую Emacs с большим количеством плагинов. Благодаря ему, получилось много чего автоматизировать в процессе разработки. Я еще я пробовал ErlIDE (eclipse) и sublime text 2, но они не удовлетворяют моим потребностям.

Information

Rating
Does not participate
Location
Липецк, Липецкая обл., Россия
Date of birth
Registered
Activity