Size: a a a

Rust — русскоговорящее сообществo

2020 November 19

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Ты не можешь статически определить, нужна тебе дальше память или нет, потому что для этого потребовалось бы узнать, обратится ли к ней код в будущем. Это эквивалентно решению halting problem.
источник

M

MrSmith in Rust — русскоговорящее сообществo
Не совсем
источник

M

MrSmith in Rust — русскоговорящее сообществo
Тут логика простая, если о чем то мы можем судить проведя мало вычислений, значит хорошо, если посчитаем колличество предполагаемых вычислений то можно выдавать диагностику "возможно преждевременное выделение памяти"
источник

M

MrSmith in Rust — русскоговорящее сообществo
Причем нам требуется проверить хотя бы 1 возможный путь достижения освобожленич
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Существующие модели управления памятью используют разные способы определить, что память больше не нужна.
C: «если про память сказали, что она не нужна, то она не нужна»
Python: «если на память больше никто не ссылается, то она не нужна, потому что к ней нельзя обратиться»
Rust: «если память не видно ни из какой переменной в скоупе, то она не нужна»
источник

M

MrSmith in Rust — русскоговорящее сообществo
Но во всех случаях память released
источник

M

MrSmith in Rust — русскоговорящее сообществo
В утверждении же говорится если не нужна и не освобождается
источник

M

MrSmith in Rust — русскоговорящее сообществo
Но во всех случиях выше как только не нужна - освобождается
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
MrSmith
Тут логика простая, если о чем то мы можем судить проведя мало вычислений, значит хорошо, если посчитаем колличество предполагаемых вычислений то можно выдавать диагностику "возможно преждевременное выделение памяти"
Ты не можешь в общем случае определить нужна тебе память или нет.
let smth = allocate();
thread::spawn(|| {
   maybe_halts();
   now_use(smth);
});

Если функция maybe_halts() завершается, то память нужна до конца треда.
Если же, однако, она не завершается, то память можно освобождать сразу после аллокации.
источник

M

MrSmith in Rust — русскоговорящее сообществo
Ну и чем не компромис считать n шагов потом уже говорить, даже если оно и завершается чет долго ждём диагностику слать
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
MrSmith
Ну и чем не компромис считать n шагов потом уже говорить, даже если оно и завершается чет долго ждём диагностику слать
Это решение уже не полное. И оно предполагает, что реальные программы можно разбить на абстрактные «шаги», что неправда.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Заменим maybe_halts() на sleep(Duration::from_years(1_000_000)) — реалистично мы знаем, что эта функция никогда не завершается, но с точки зрения статического анализатора это мало «шагов»
источник

M

MrSmith in Rust — русскоговорящее сообществo
Проблема в том что один фиг это ситуация выходит относительно наблюдателя
источник

M

MrSmith in Rust — русскоговорящее сообществo
Вот кто то нажал все кнопочки и за 3 сек освободилась память, а кто то начал редактировать таблицу exele, в итогу что для одного "утечка" для другого "оптимальная работа"
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Это не говоря о том, что этот «алгоритм» — эвристика, которая будет давать кучу ложноположительных результатов, а подобную диагностику можно будет провести только в рантайме.
источник

M

MrSmith in Rust — русскоговорящее сообществo
Но мы уже перестаем оперировать техническими терминами, разделяя на группы: точно не достижимы, точно достижимы, возможно достижимы.
источник

M

MrSmith in Rust — русскоговорящее сообществo
Вот из всех трёх утечки это только точно недостижимы
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
MrSmith
Вот из всех трёх утечки это только точно недостижимы
Это бесполезное определение утечки.
источник

M

MrSmith in Rust — русскоговорящее сообществo
Ну ваще тоже не лучше, выходит что термин зависит от взаимодействующего пользоаателя
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Утечка памяти — это когда память больше не будет использоваться, но мы её не освобождаем.
источник