|
Тяпничная хвостовая рекурсия.
|
|||
---|---|---|---|
#18+
mayton petrav пропущено... Они (деструкторы) начнут вызываться в неправильной последовательности. Это принципиально. Или же они вообще перестанут вызываться. А как деструкторы связаны с хвостовой рекурсией? Я понял тему топика так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Я корректно всё понял? И вместо рекурсии в ассемблере будет jump на начало функции? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 20:36 |
|
Тяпничная хвостовая рекурсия.
|
|||
---|---|---|---|
#18+
petrav Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Я корректно всё понял? И вместо рекурсии будет jump на начало функции? Я не силен в теории построения компилляторов. Но по моему свертка хвоста превращает рекурсию в банальный loop. Как там в ассемблере делется loop? Я щас не помню. Много вариантов. Да можно jump сделать. А можно JNZ (jump-non-zero-flag). Суть вобщем не в этом. А в том что стек не будем потреблять. И еще убийственная киллер фича всей функциональщины - все переменные в такой функции становятся values. Константами. Раз нет цикла. То ничего и не меняется. Вселенная с застывшим временем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 20:41 |
|
Тяпничная хвостовая рекурсия.
|
|||
---|---|---|---|
#18+
mayton Я не силен в теории построения компилляторов. Но по моему свертка хвоста превращает рекурсию в банальный loop. Как там в ассемблере делется loop? Я щас не помню. Много вариантов. Да можно jump сделать. А можно JNZ (jump-non-zero-flag). Суть вобщем не в этом. А в том что стек не будем потреблять. И еще убийственная киллер фича всей функциональщины - все переменные в такой функции становятся values. Константами. Раз нет цикла. То ничего и не меняется. Вселенная с застывшим временем. Отлично. Я как раз недавно смотрел научно популярный ролик как вернуть время назад. На Физике Побединского. Но вернёмся к деструкторам и доработаем код. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Тут два варианта: - При честной рекурсии у нас деструкторы класса MyObject вызываются в правильной последовательности. - А при фокусах с разворачиванием рекурсии в цикл что с ними будет? ПНХ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 20:49 |
|
Тяпничная хвостовая рекурсия.
|
|||
---|---|---|---|
#18+
petrav, в вашем примере для компилятора нет хвостовой рекурсии так как вызов не хвостовой, он такой лишь на первый взгляд ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 20:58 |
|
Тяпничная хвостовая рекурсия.
|
|||
---|---|---|---|
#18+
kealon(Ruslan) petrav, в вашем примере для компилятора нет хвостовой рекурсии так как вызов не хвостовой, он такой лишь на первый взгляд Конечно, я понимаю, что деструктор неявно вызывается в конце функции. Упрощённо. Но что будет если MyObject изначально был алиасом к int, а потом я переделал MyObject на класс с деструктором? Поэтому я сразу и написал, что тогда в язык нужно добавить атрибут к функции "настаиваю на хвостовой рекурсии". Не получилось -- сбой компиляции. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 21:03 |
|
|
start [/forum/topic.php?fid=57&msg=40032745&tid=2017275]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 242ms |
total: | 372ms |
0 / 0 |