Автор Тема: Зачем сборщик мусора? (v2.0)  (Прочитано 28822 раз)

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Зачем сборщик мусора? (v2.0)
« : Февраль 06, 2012, 11:41:33 am »
Первая версия там: Зачем сборщик мусора?

 ::)  ::)  ::) поскольку мне известен правильный ответ на вопрос "Зачем сборщик мусора?", то я решил написать его в новом топике ::)  ::)  ::)

Смысл в следующем. Есть проблема порчи памяти. Она устраняется герметичной системой типов. Только автоматическая сборка мусора гарантированно устраняет повисшие указатели. Поэтому сборщик мусора является неотъемлемой частью герметичной системы типов.

Короче, сборщик мусора имеет смысл в составе герметичной системы типов, которая используется для победы над проблемой порчи памяти. Это всё.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #1 : Февраль 06, 2012, 11:49:00 am »
Погоди.  Зачем мне сборщик мусора в языке с герметичной системой типов (в том числе ссылок/указателей)?

Порчи памяти можно избежать без использования сборщика мусора на самом деле. То есть принципиально это возможно.

Кроме того, наличие сборщика мусора не гарантирует того, что в языке система типов будет герметичной.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #2 : Февраль 06, 2012, 12:01:18 pm »
Что значит "герметичная система типов"?
Знаю, что оберонщики любят хвастать тем, что у них в обероне эта самая "герметичная система типов". Но что они имеют под этим в виду?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #3 : Февраль 06, 2012, 03:48:12 pm »
Что понимается  под словами "порча памяти" - эффекты связанные с фрагментацией (т.е. невозможность выделить кусок определенного размера в некоторой области и или деградация производительности при выделении памяти...) ?
« Последнее редактирование: Февраль 06, 2012, 03:50:27 pm от DIzer »

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Зачем сборщик мусора? (v2.0)
« Ответ #4 : Февраль 06, 2012, 03:54:38 pm »
Погоди.  Зачем мне сборщик мусора в языке с герметичной системой типов (в том числе ссылок/указателей)?
Чтобы повисших указателей не было.
Порчи памяти можно избежать без использования сборщика мусора на самом деле. То есть принципиально это возможно.
По повисшему указателю пишем и запарываем память.
Кроме того, наличие сборщика мусора не гарантирует того, что в языке система типов будет герметичной.
Поэтому я написал, что сборщик мусора является частью герметичной системы типов, а не наоборот.
Что значит "герметичная система типов"?
Комплекс мер статической и динамической типизации (а так же проверки индексов массивов) гарантирующий, что память не запорешь.

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #5 : Февраль 06, 2012, 04:03:37 pm »
Комплекс мер статической и динамической типизации (а так же проверки индексов массивов) гарантирующий, что память не запорешь.
Т.е , говоря по русски - обязательная проверка индексов массива и достаточно жесткие ограничения на преобразования типов?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #6 : Февраль 06, 2012, 04:05:37 pm »
Первая версия там: Зачем сборщик мусора?

Полностью согласен с Сергеем. Принципиальный момент в наличии сборщика - это именно возможность построить платформу, гарантирующию целостность на уровне отдельных объектов (памяти). Точнее, тут от обратного проще сформулировать - без сборщика невозможно такую систему построить. Т.е., если к плюсам прикрутить сборщик, то никаких гарантий, конечно, не появится (поэтому и смысла у него там исчезающе мало). Но если наравне со сборщиком есть гарантии защиты памяти от прямого ковыряния в ней, то все хорошо. Все остальные свойства, который придает сборщик (как в рекламах жабы - не надо вручную delete писать и т.д.) - это уже шашечки и следствия.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #7 : Февраль 06, 2012, 04:10:53 pm »
Погоди.  Зачем мне сборщик мусора в языке с герметичной системой типов (в том числе ссылок/указателей)?

Порчи памяти можно избежать без использования сборщика мусора на самом деле. То есть принципиально это возможно.

Не представляю как это можно сделать, не наворотив что-то еще более сложное, чем сборщик :)

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

Это да...

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #8 : Февраль 06, 2012, 04:13:53 pm »

Полностью согласен с Сергеем. Принципиальный момент в наличии сборщика - это именно возможность построить платформу, гарантирующию целостность на уровне отдельных объектов (памяти). Точнее, тут от обратного проще сформулировать - без сборщика невозможно такую систему построить. Т.е., если к плюсам прикрутить сборщик, то никаких гарантий, конечно, не появится (поэтому и смысла у него там исчезающе мало). Но если наравне со сборщиком есть гарантии защиты памяти от прямого ковыряния в ней, то все хорошо. Все остальные свойства, который придает сборщик (как в рекламах жабы - не надо вручную delete писать и т.д.) - это уже шашечки и следствия.
Если это так, то следует из этого ЯП программирования с мусорозборником  и "герметичной" системой типов не удобен для системного программирования (является по сути языком для создания высокоуровневых приложений)?

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Зачем сборщик мусора? (v2.0)
« Ответ #9 : Февраль 06, 2012, 04:14:47 pm »
Что понимается  под словами "порча памяти"

int x = GetRandom();

byte* p = (byte*)x;

*p = 42;

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Зачем сборщик мусора? (v2.0)
« Ответ #10 : Февраль 06, 2012, 04:17:48 pm »
Если это так, то следует из этого ЯП программирования с мусорозборником  и "герметичной" системой типов не удобен для системного программирования (является по сути языком для создания высокоуровневых приложений)?
Это почему? В "системном программировании" память портить можно что ли?

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #11 : Февраль 06, 2012, 04:17:51 pm »
Что понимается  под словами "порча памяти"

int x = GetRandom();

byte* p = (byte*)x;

*p = 42;
  Да, спасибо -  я знаю что такое  висящие ссылки.

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #12 : Февраль 06, 2012, 04:22:16 pm »
Если это так, то следует из этого ЯП программирования с мусорозборником  и "герметичной" системой типов не удобен для системного программирования (является по сути языком для создания высокоуровневых приложений)?
Это почему? В "системном программировании" память портить можно что ли?
Конечно нет но важна эффективность и удобство низкоуровневых преобразований переменных различных типов, работа с нетипизированными указателями... (которые пресекаются в ЯП с герметичной системой типов).

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #13 : Февраль 06, 2012, 05:02:12 pm »
Зачем мне сборщик мусора в языке с герметичной системой типов (в том числе ссылок/указателей)?

Порчи памяти можно избежать без использования сборщика мусора на самом деле. То есть принципиально это возможно.
Проблема, вроде, не в том, что программист по своему недомыслию не освободит какой-либо указатель, а в том, что зачастую программист В ПРИНЦИПЕ не может определить пора уже освобождать вот этот вот указатель, или нет. И, если верить Куно Пфистеру, то такая ситуация сплошь и рядом встречается в компонентно-ориентированном программировании. Готовы ли Вы оспорить Пфистера по этому вопросу?
(Про себя могу сказать, что я не готов спорить с Куно Пфистером, но хотел бы разобраться глубже в этом вопросе)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #14 : Февраль 06, 2012, 05:04:54 pm »
Проблема, вроде, не в том, что программист по своему недомыслию не освободит какой-либо указатель, а в том, что зачастую программист В ПРИНЦИПЕ не может определить пора уже освобождать вот этот вот указатель, или нет. И, если верить Куно Пфистеру, то такая ситуация сплошь и рядом встречается в компонентно-ориентированном программировании. Готовы ли Вы оспорить Пфистера по этому вопросу?
(Про себя могу сказать, что я не готов спорить с Куно Пфистером, но хотел бы разобраться глубже в этом вопросе)

Я этот случай описал. Но этот случай, когда сборщик мусора таки нужен, возникает ну о-очень редко. И в основном тогда, когда мы сами не знаем что творим, посему вместо продукта делаем конструктор.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"