Size: a a a

2020 September 10

p

polunin.ai in rust_offtopic
Nick Linker
Со стеком. Ну то есть эмуляция стека вызовов руками, зачем только — непонятно.
Потому что у рекурсии есть лимит
источник

p

polunin.ai in rust_offtopic
У тебя вообще все задачи про дереаья
источник

NL

Nick Linker in rust_offtopic
polunin.ai
Потому что у рекурсии есть лимит
Рекурсия может быть хвостовая, это раз. И у стека в куче тоже есть лимит, это два.
источник

B

Bogdan in rust_offtopic
В мейне еще обсуждали вопрос поднятия лимита стека, но это изврат
источник

NL

Nick Linker in rust_offtopic
Bogdan
Ого, нормальный такой список, спасибо!!! Столько написал.

Про ханойские я и забыл😅
https://nlinker.github.io/presentations/06_advanced-data-structures-2/
Там есть слайд Functional RB tree, insert
источник

B

Bogdan in rust_offtopic
А если дерево адекватной глубины то стека нативного за глаза обычно
источник

B

Bogdan in rust_offtopic
Ну деревя я тоже хочу дать, но по позже, буду чет простое придумывать)
источник

p

polunin.ai in rust_offtopic
Nick Linker
Рекурсия может быть хвостовая, это раз. И у стека в куче тоже есть лимит, это два.
Тебе трудно будет достичь лимита на куче, а лимита рекурсии вполне реально
источник

EG

Emmanuel Goldstein in rust_offtopic
Это неинтересное дерево
Интересное было бы дерево на идрисе с статической верификацией того, что оно действительно красно-чёрное
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Это неинтересное дерево
Интересное было бы дерево на идрисе с статической верификацией того, что оно действительно красно-чёрное
О
источник

p

polunin.ai in rust_offtopic
Этим и займусь
источник

p

polunin.ai in rust_offtopic
Потом
источник

NL

Nick Linker in rust_offtopic
polunin.ai
Тебе трудно будет достичь лимита на куче, а лимита рекурсии вполне реально
Не, ну просто можно на стеке хранить указатели. И лимит действительно можно увеличить так, что для практических нужд хватит более чем.

Если у тебя глубина AST превышает 1 миллиона (насколько я знаю, дефолтный стек равен 8Мб), значит тут явно что-то не так. И всегда можно контролировать глубину рекурсии через глобальную переменную и вызывать кастомную обработку переполнения рекурсии, если уж так надо.
источник

p

polunin.ai in rust_offtopic
Nick Linker
Не, ну просто можно на стеке хранить указатели. И лимит действительно можно увеличить так, что для практических нужд хватит более чем.

Если у тебя глубина AST превышает 1 миллиона (насколько я знаю, дефолтный стек равен 8Мб), значит тут явно что-то не так. И всегда можно контролировать глубину рекурсии через глобальную переменную и вызывать кастомную обработку переполнения рекурсии, если уж так надо.
Не понял
источник

p

polunin.ai in rust_offtopic
Дерево храни как угодно
источник

p

polunin.ai in rust_offtopic
Обработка через стек
источник

p

polunin.ai in rust_offtopic
Что не так?
источник

NL

Nick Linker in rust_offtopic
polunin.ai
Не понял
Ты делаешь рекурсивный вызов (не хвостовой), у тебя фрейм кладётся на стек. Можно просто фрейм уменьшить до минимума, храня просто указатель на объект в куче с текущими данными.

Сейчас подумал, да, мы в сущности говорим об одном и том же.
источник

T1

Tony 123 in rust_offtopic
Через цикл часто намного быстрее на современных компьютерах
источник

NL

Nick Linker in rust_offtopic
Tony 123
Через цикл часто намного быстрее на современных компьютерах
Это если ты обрабатываешь массив, то да. А если дерево — то что-то неочевидно, цикл будет постоянно спотыкаться об if-ы и сбрасывать кэш объектами, которые эмулируют фреймы.
источник