Size: a a a

2021 April 22

VS

Vladimir Shchur in F# Chat
в общем случае нет, вон в таскбилдере так и пишут - не умеем в хвостовую рекурсию
источник

VP

Vladislav Podporkin in F# Chat
В случае асинков даже это работает идеально
источник

VP

Vladislav Podporkin in F# Chat
Вот значит как. Звучит интересно.
Хотя мне кажется именно хвостовую рекурсию можно оптимизировать отдельным методом билдера.
источник

g

gsomix in F# Chat
Хвостовая.
источник

VP

Vladislav Podporkin in F# Chat
Ну, оно явно не оптимизируется компилятором или билдером так как нужно..
источник

g

gsomix in F# Chat
Почему ты так думаешь?
источник

VP

Vladislav Podporkin in F# Chat
Система умирает от недостатка памяти. (Что собственно и ожидается от такого билдера).
источник

оГ

отец Григорий... in F# Chat
Если чо в дебаге нету хвостовой рекурсии
источник

оГ

отец Григорий... in F# Chat
По слухам
источник

VS

Vasily Shapenko in F# Chat
Возможно, не стоит пытаться натянуть сову хаскеля на глобус фшарпа
источник

g

gsomix in F# Chat
Оптимизация хвостовой рекурсии позволяет сохранить стек.
источник

оГ

отец Григорий... in F# Chat
Наоборот. Она выбрасывает стек, а не сохраняет
источник

VP

Vladislav Podporkin in F# Chat
Да, эта оптмизация там скорее всего есть.
Но хотелось бы нечто подобное и для самого типа.
источник

g

gsomix in F# Chat
Я про то, что не тратит. :)
источник

g

gsomix in F# Chat
Ты мемоизируешь граф вычислений в памяти. Как ты представляешь себе оптимизацию?
источник

g

gsomix in F# Chat
Выбрасывает стек фреймы. :)
источник

оГ

отец Григорий... in F# Chat
Вот
источник

VP

Vladislav Podporkin in F# Chat
В билдере скорее всего... Никак.. Во всякос случае даже с мутабельным стейтом в билдере я ничего не придумал.

Если только ручками с закосом под хвостовую рекурсию. Типа такой функции looped
источник

g

gsomix in F# Chat
Ок. Тут я совсем перестал понимать.
источник

VP

Vladislav Podporkin in F# Chat
Это попытка оптимизировать описанный хвостово-рекурсивный алгоритм без компилятора.

Функция f, переданная в looped это условное "тело" хвостово-рекурсивной функции функции.
Если она возвращает Continue x, то f перевызывается с новыми аргументами x, а если Return y, то рекурсия заканчивается.
Все это можно развернуть в while, который перевызывает функцию с новыми аргументами пока она не вернет Return y.
По идее нечто подобное и делает компилятора.


Опять же, мне просто было бы приятно, будь возможность для этого типа писать в рекурсивном стиле без извращений в виде такой функции или чего-то еще.
Но, кажется, низя.
источник