о каком подсчете ссылок они разговаривают?
Rc = Ref Count, счётчик ссылок, дропающий под собой ресурс, когда кол-во стронг ссылок = 0 Аналог shared_ptr из с++
А, понял. А цикл это подсчет count-еров))) Забавные челики
Не знаю, о каком цикле речь
Ну типа если что-то что-то считает, то это плохо. Вот у нас семафор считает под капотом сколько потоков к нему обратились. А в цикле мы считаем что-то тоже, видимо это тоже плохо. Крч спекулирую на тему GC, в разрезе Раста, так как подсчет ссылок и GC, который считает граф связей (обычно) разные вещи. Так как в Расте не может существовать висящей ссылки.
Мы ничего не считаем, просто инкрементируем счетчик. Не сильно накладное занятие, особенно если это не Arc (частые атомик операции всё же могут ударить по производительности) Дроп вызывается у Rc только тогда, когда он выходит из скоупа (как и у других структур). Так что проверка счетчика на 0 не так часта, как может показаться Для цикла, скорее всего, нужны слабые ссылки, чтобы ничего не зациклилось, иначе счетчик никогда не будет равен 0, а следовательно будет висеть память. Но в расте утечки - мемсейф, а потому и сейф. Так что да, есть сейфовый код, который позволить утечь памяти Rc - инструмент, его не обязательно использовать. Если нужно - пожалуйста. Но как и любой инструмент у него есть и плюсы, и минусы
> Так как в Расте не может существовать висящей ссылки. Замкнутые сами на себя структуры данных и поехали )
Ну утечки правда сейф в Расте, но обычно добиться утечки можно именно кривым кодом (как и везде, да). Т.е. это не то что инструменты std гарантируют утечки, скорее наоборот.
Не сказал бы, что кривым. Плохо не утечка, плохо, когда ты не знаешь о ней, а она растёт Box::leak, Vec::leak это не так плохо и может даже полезно (не знаю правда зачем)
Обсуждают сегодня