Size: a a a

2020 August 27

AB

Alex Bubnov in pro.elixir
Źmićer Rubinštejn
Есть «оптимизация хвостовой рекурсии», когда она превращается в цикл
это и есть tco
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Alex Bubnov
это и есть tco
Нет
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Это разные вещи
источник

Е

Евгений in pro.elixir
Alex Bubnov
tco либо есть, либо её нет, нет никакой оптимальности
нет никакой "оптимизации обычной рекурсии", только tco
незнаю как в BEAM, а компилируемые языки могут и нехвостовую рекурсию в некоторых случаях в цикл оптимизировать.
источник

AB

Alex Bubnov in pro.elixir
тогда что же такое tco, если не tail call optimization?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Alex Bubnov
тогда что же такое tco, если не tail call optimization?
TCO это rail call optimisation, НО НЕ tail recursion optimisation
источник

Е

Евгений in pro.elixir
Źmićer Rubinštejn
А tco это про jmp вместо call
ну так оно взаимосвязано. beam гарантирует, что для хвостовой рекурсии TCO будет обязательно выполнено, не вижу смысла разделять в данном контексте эти понятия.
источник

AB

Alex Bubnov in pro.elixir
Źmićer Rubinštejn
TCO это rail call optimisation, НО НЕ tail recursion optimisation
так tail recursion это и есть рекурсия, попадающая под tco
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Евгений
ну так оно взаимосвязано. beam гарантирует, что для хвостовой рекурсии TCO будет обязательно выполнено, не вижу смысла разделять в данном контексте эти понятия.
Так в бим нету оптимизации рекурсии
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Бим оптимизирует last call
источник

Е

Евгений in pro.elixir
Źmićer Rubinštejn
Бим оптимизирует last call
он же tail call
источник

ŹR

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

Е

Евгений in pro.elixir
Ну так я не понимаю о чем ты говоришь? Tail Call Recursion - это и есть хвостовая рекурсия, котора в BEAM гарантировано будет оптимизирована.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Естественно будет. Только с чего ты решил, что она будет быстрее обычной?
источник

PG

Pig Greenest in pro.elixir
дык было же обсуждение, что Tail Call Optimization и Tail Recursion Optimization это разные вещи, и TCO более общая
источник

Е

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

Е

Евгений in pro.elixir
Мы тыт обсуждаем TCO исключительно по отношению к оптимиации хвостовой рекурсии
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Евгений
хотя бы потому что обычно безусловный переход быстрее вызова процедуры
Тока вызов процедуры добавляет тебе «аккумулятор» на уровне ВМ, а переписывание функции в хвостовую рекурсию заставляет тебя добавлять аккумулятор на высоком уровне самого языка
источник

Е

Евгений in pro.elixir
Źmićer Rubinštejn
Тока вызов процедуры добавляет тебе «аккумулятор» на уровне ВМ, а переписывание функции в хвостовую рекурсию заставляет тебя добавлять аккумулятор на высоком уровне самого языка
Компиляторы такие вещи запросто оптимизируют, видимо в BEAM не так, или не всегда так
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Поэтому то и не оптимизируют, что нету tro, а есть tco
источник