Size: a a a

2020 September 10

DS

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

DS

Doge Shibu in rust_offtopic
Если мы про императивные языки говорим
источник

T1

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

NL

Nick Linker in rust_offtopic
Хорошо бы найти бенчмарк. Ладно, буду дальше арбайтен.
источник

Т8

Т-34 85 in rust_offtopic
Nick Linker
Хорошо бы найти бенчмарк. Ладно, буду дальше арбайтен.
Является ли Лукашенко легитимным президентом РБ?
источник

NL

Nick Linker in rust_offtopic
🇧🇾 (1311) T-34 ты задолбал
источник

H

Heorhi in rust_offtopic
я надеюсь это не купленые кремлеботы сюда полезли,, ато все загадят сейчас Рыгорычам.....
источник

B

Bogdan in rust_offtopic
@hirrolot это же завтра будет онлайн митапчик?
источник

H

Hirrolot in rust_offtopic
да
источник

B

Bogdan in rust_offtopic
фух чуть не забыл)
источник

NL

Nick Linker in rust_offtopic
Короче, тут чувак озадачился ручным переписыванием рекурсии в цикл и, внезапно (но я это подозревал!), что эмуляция рекурсии оказалась медленнее.

1.  foo1 is the naive implementation, and also the fastest
2.  foo2 is the manually managed implementation, slightly slower
3.  foo3 is the implementation using futures - very pretty, but slowest

https://github.com/ImmutableBug/recursion_optimization

Дисклеймер: я не запускал бенчмарк, но ревью кода не выявило каких-то ужасных проблем с реализацией, код нормальный. Можно было преаллоцировать Vec во втором случае, но это было бы не совсем честно.

@sirgraim @DogeShibu я бы выбрал (1) как более чистую реализацию.
источник

NL

Nick Linker in rust_offtopic
Bogdan
фух чуть не забыл)
📌 висит
источник

DS

Doge Shibu in rust_offtopic
Nick Linker
Короче, тут чувак озадачился ручным переписыванием рекурсии в цикл и, внезапно (но я это подозревал!), что эмуляция рекурсии оказалась медленнее.

1.  foo1 is the naive implementation, and also the fastest
2.  foo2 is the manually managed implementation, slightly slower
3.  foo3 is the implementation using futures - very pretty, but slowest

https://github.com/ImmutableBug/recursion_optimization

Дисклеймер: я не запускал бенчмарк, но ревью кода не выявило каких-то ужасных проблем с реализацией, код нормальный. Можно было преаллоцировать Vec во втором случае, но это было бы не совсем честно.

@sirgraim @DogeShibu я бы выбрал (1) как более чистую реализацию.
Да, вроде норм смотрится.
источник

H

Heorhi in rust_offtopic
пагадите... чо еще за хешмап
источник

B

Bogdan in rust_offtopic
Nick Linker
Короче, тут чувак озадачился ручным переписыванием рекурсии в цикл и, внезапно (но я это подозревал!), что эмуляция рекурсии оказалась медленнее.

1.  foo1 is the naive implementation, and also the fastest
2.  foo2 is the manually managed implementation, slightly slower
3.  foo3 is the implementation using futures - very pretty, but slowest

https://github.com/ImmutableBug/recursion_optimization

Дисклеймер: я не запускал бенчмарк, но ревью кода не выявило каких-то ужасных проблем с реализацией, код нормальный. Можно было преаллоцировать Vec во втором случае, но это было бы не совсем честно.

@sirgraim @DogeShibu я бы выбрал (1) как более чистую реализацию.
enum StackState {
       Initial(u32, u32),
       FirstRec(u32, u32),
       SecondRec(u32, u32, u32),
       ThirdRec(u32, u32, u32, u32),
   }

макс глубина стека — 4 ? 0_О
источник

DS

Doge Shibu in rust_offtopic
Bogdan
enum StackState {
       Initial(u32, u32),
       FirstRec(u32, u32),
       SecondRec(u32, u32, u32),
       ThirdRec(u32, u32, u32, u32),
   }

макс глубина стека — 4 ? 0_О
Так это не глубина стэка, это возможные состояния того, что может быть на стеке в разные моменты исполнения
источник

DS

Doge Shibu in rust_offtopic
Это как раз стандартный подход, когда рекурсию на цикл переписывают
источник

B

Bogdan in rust_offtopic
а, точно, уже вижу Vec::with_capacity
источник

B

Bogdan in rust_offtopic
Doge Shibu
Это как раз стандартный подход, когда рекурсию на цикл переписывают
я такое только для обхода дерева делал, там было проще со стейтом)
источник

B

Bogdan in rust_offtopic
Nick Linker
Короче, тут чувак озадачился ручным переписыванием рекурсии в цикл и, внезапно (но я это подозревал!), что эмуляция рекурсии оказалась медленнее.

1.  foo1 is the naive implementation, and also the fastest
2.  foo2 is the manually managed implementation, slightly slower
3.  foo3 is the implementation using futures - very pretty, but slowest

https://github.com/ImmutableBug/recursion_optimization

Дисклеймер: я не запускал бенчмарк, но ревью кода не выявило каких-то ужасных проблем с реализацией, код нормальный. Можно было преаллоцировать Vec во втором случае, но это было бы не совсем честно.

@sirgraim @DogeShibu я бы выбрал (1) как более чистую реализацию.
а если 3е сделать на генераторах а не на асинках?
источник