Size: a a a

2020 May 25

AR

Andrew Rudenko in pro.elixir
после каких "компилируемых языков"?
источник

AB

Alexey Bolshakov in pro.elixir
быстрее обычной рекурсии
источник

AB

Alexey Bolshakov in pro.elixir
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Помоему интуитивно обычная рекурсия гораздо быстрее, но там может закончится стэк
источник

LL

Lama Lover in pro.elixir
Andrew Rudenko
в приведенной ссылке (https://erlang.org/pipermail/erlang-questions/2016-October/090663.html) Joe сравнивает термины Tail recustion с Last Call Optiomization. В чем отличие от общеупотребительного TCO я так и не понял, так что зачем он изобрел свою терминологию тоже не оч понятно )
Last call optimization - это когда после исполнения последней функции, goto происходит не в тело функции которая её вызывала, а в тело следующей функции
Tail recursion optimization - это когда последняя инструкция функции - это вызов себя же и это оптимизируется в классический цикл
источник

AB

Alexey Bolshakov in pro.elixir
Źmićer Rubinštejn
Помоему интуитивно обычная рекурсия гораздо быстрее, но там может закончится стэк
не знаю. мне интуитивно быстрее, когда оптимизатор меняет call на jmp
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Alexey Bolshakov
не знаю. мне интуитивно быстрее, когда оптимизатор меняет call на jmp
Интуитивно быстрее - когда нету аккумулятора. Что там в кишках меняется - это не про интуицию
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Lama Lover
Last call optimization - это когда после исполнения последней функции, goto происходит не в тело функции которая её вызывала, а в тело следующей функции
Tail recursion optimization - это когда последняя инструкция функции - это вызов себя же и это оптимизируется в классический цикл
Судя по всему ты не прав. Следует отличать tail call от tail recursion
источник

AB

Alexey Bolshakov in pro.elixir
Ну буквоедство. Кому как. Субъективно, как выясняется.
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
Судя по всему ты не прав. Следует отличать tail call от tail recursion
Да, опечатка)
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Тока фишка в том, что по английски всегда говорят TCO, а вот по русски - оптимизация хвостовой рекурсии
источник

ŹR

Źmićer Rubinštejn in pro.elixir
И это просто ебучий парадокс.

Например в Википедии
https://en.wikipedia.org/wiki/Tail_call

Все четко - меняем call на jmp
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Нажимаем на русскиу версию - и куда попадаем? А хуй его знает
источник

ŹR

Źmićer Rubinštejn in pro.elixir
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Судя по всему это просто специфика перевода
источник

AR

Andrew Rudenko in pro.elixir
> edit11: It was pointed out in the comments that the performance characteristics might differ for larger lists. And it does, taking 1000 times as many elements (10_000_000) all tail-recursive versions are significantly faster than the body-recursive version (and even the stdlib version).
источник

AR

Andrew Rudenko in pro.elixir
ну т.е. когда размер становится приличным, таки быстрее )
источник

AR

Andrew Rudenko in pro.elixir
ну и там пример такой конечно взят, оч неудобный для TCO
источник

AR

Andrew Rudenko in pro.elixir
def map_body([], _func), do: []
 def map_body([head | tail], func) do
   [func.(head) | map_body(tail, func)]
 end
источник

AR

Andrew Rudenko in pro.elixir
в кложе, например, такое пишется без TCO и при этом не жрется стэк — на ленивых коллекциях
источник