LINUX.ORG.RU

Об утечке памяти в Rust'е

 , libstatic,


0

2

Где-то была статья о том, как человеку удалось обойти borrow checker и сделать в Rust’е настоящую утечку памяти, без всяких unsafe’ов. Там что-то очень сложное, ему растовики сразу сказали, что так писать никто не будет, тогда он свой код упаковал в crate и выложил для всеобщего пользования. Название crate’а что-то вроде libstatic, или я путаю.

Можете помочь найти какую-нибудь статью на эту тему?

★★★★★
Ответ на: комментарий от anonymous

Спасибо, но там что-то другое было. Там прям переменная, которую borrow checker в результате сложных манипуляций не видит, и в итоге она не освобождается.

Camel ★★★★★
() автор топика
Ответ на: комментарий от red75prim

В том что я ищу бага никакого нет. Ну или баг в самой модели работы borrow checker’а. Оно заведомо не может быть исправлено.

Но я бы сильнее отстаивал такие тезисы, если бы нашёл тот самый код и его описание.

Camel ★★★★★
() автор топика
Ответ на: комментарий от Camel

Оно заведомо не может быть исправлено.

Leakpocalypse может быть? https://cglab.ca/%7Eabeinges/blah/everyone-poops/ Но, как выше упоминали, никакого особо сложного кода там не нужно: создаётся reference cycle.

Впрочем к борроучекеру это не имеет отношения. Формализацией семантики борроучекера занимаются давно и пока никаких неисправимых проблем не найдено.

red75prim ★★★
()
Ответ на: комментарий от red75prim

I am locking this thread, since its 100+ comments have become impossible to navigate. Please open threads on zulip if you want to discuss this issue or related bugs

Баг десятилетней давности, и всё что с ним смогли сделать, это закрыть дальнейшее добавление каментов.

Camel ★★★★★
() автор топика
Ответ на: комментарий от pftBest

@Camel

    let boom = fake_static::make_static(&vec![0; 1<<20]);
    println!("{:?}", boom);
8 | pub fn make_static<'a, T>(input: &'a T) -> &'static T {
  |                    -- lifetime `'a` defined here
9 |     let f: fn(_, &'a T) -> &'static T = helper;
  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`

error: could not compile `fake-static` (lib) due to 1 previous error

починили, там же новый трейт-солвер реализовали, который и этот баг исправлял, похоже, стабилизировали

zurg
()
Последнее исправление: zurg (всего исправлений: 3)