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

igor

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

alexus

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #16 : Февраль 06, 2012, 05:44:11 pm »
если верить Куно Пфистеру, то такая ситуация сплошь и рядом встречается в компонентно-ориентированном программировании. Готовы ли Вы оспорить Пфистера по этому вопросу?
(Про себя могу сказать, что я не готов спорить с Куно Пфистером, но хотел бы разобраться глубже в этом вопросе)
Оспорить?.. Пусть себе рассуждает... Принцип простой, не нужен компонент, удаляй... нужен - подгружай и используй. Если ОС умная, она сама закэширует компонент при выгрузке, чтобы минимизировать затраты на загрузку.
Тот же принцип справедлив для любых внешних ресурсов: файлов, пайпов, сокетов и пр.
Единственный случай, когда необходим посредник между программой и ресурсом - это в случае разделяемого использования ресурсов, когда один и тот же ресурс используется в разных программах/в разных частях программы. Но в этом случае опосредовано происходит и загрузка ресурса (и, по-хорошему, любое обращение к ресурсу). Сдаётся мне, что GC для этого маловато... нужна полноценная система с продуманными сервисами.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #17 : Февраль 06, 2012, 06:10:25 pm »
Принцип простой, не нужен компонент, удаляй... нужен - подгружай и используй.
Думаю, что всё не так просто. Компоненты в известной мере независимы друг от друга. Если какой-то компоненте А перестала быть нужна другая компонента В, то компонента А не может взять и запросто освободить (удалить) компоненту В, потому что компоненту В, возможно, использует так же компонента С, но компонента А про это знать не обязана.
Если ОС умная, она сама закэширует компонент при выгрузке, чтобы минимизировать затраты на загрузку.
ОС не решит за нас наши проблемы. Во всяком случае, я в "волшебную" ОС не верю.
Сдаётся мне, что GC для этого маловато... нужна полноценная система с продуманными сервисами.
Вы имеете в виду RTS, с её метаданными обо всех модулях, классах, объектах, типах и других программных сущностях?

alexus

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #18 : Февраль 06, 2012, 06:15:16 pm »
Вы имеете в виду RTS, с её метаданными обо всех модулях, классах, объектах, типах и других программных сущностях?
Нет, я имею ввиду систему, созданную для решения задач в конкретной предметной области.

valexey

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

1) Что такое компоненты?
2) Какую задачу они решают (зачем они нужны)?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

igor

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

1) Что такое компоненты?
2) Какую задачу они решают (зачем они нужны)?
Вопросы очень правильные. Но вот чётких и внятных ответов на них мне у адептов компонентно-ориентированного программирования так и не удалось получить.  :(  Собственно, я ни у кого ничего не спрашивал, просто читал опубликованные материалы.
Я мог бы привести здесь своё мнение на этот счёт. Но это мнение слишком слабо подтверждено практикой, и потому не стоит упоминания.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #21 : Февраль 06, 2012, 06:46:53 pm »
Вы имеете в виду RTS, с её метаданными обо всех модулях, классах, объектах, типах и других программных сущностях?
Нет, я имею ввиду систему, созданную для решения задач в конкретной предметной области.
Если я Вас правильно понял, заточка под "конкретную предметную область" заключается в формировании карт распределения памяти (в том числе). Означает ли это, что Вы свои прожекты "строчите" на ассемблере (или с ассемблерными вставками)?

alexus

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #22 : Февраль 07, 2012, 12:56:45 am »
Вы имеете в виду RTS, с её метаданными обо всех модулях, классах, объектах, типах и других программных сущностях?
Нет, я имею ввиду систему, созданную для решения задач в конкретной предметной области.
Если я Вас правильно понял, заточка под "конкретную предметную область" заключается в формировании карт распределения памяти (в том числе). Означает ли это, что Вы свои прожекты "строчите" на ассемблере (или с ассемблерными вставками)?
Нет, Вы традиционно неправильно трактуете то, о чём я пишу (если в этом виновато моё косноязычие, то приношу извинения, если же Вы хотели наехать... то жду Ваших извинений).
  • Речь идёт о разработке (не о "заточке"!) системы под предметную область;
  • Карты распределения памяти делаются для каждого частного приложения/процесса/программы;
  • Язык, на котором я "строчу" "прожекты", как правило, не один. На ассемблере я пишу редко, хотя по моему убеждению, знание ассемблера необходимо любому уважающему себя программисту... гораздо больше, чем медику необходимо знание латыни.
Всё сказанное... IMHO.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #23 : Февраль 07, 2012, 03:02:45 am »
Вы традиционно неправильно трактуете то, о чём я пишу (если в этом виновато моё косноязычие, то приношу извинения, если же Вы хотели наехать... то жду Ваших извинений).
  • Речь идёт о разработке (не о "заточке"!) системы под предметную область;
  • Карты распределения памяти делаются для каждого частного приложения/процесса/программы;
  • Язык, на котором я "строчу" "прожекты", как правило, не один. На ассемблере я пишу редко, хотя по моему убеждению, знание ассемблера необходимо любому уважающему себя программисту... гораздо больше, чем медику необходимо знание латыни.
Я спрашивал Вас искренне, никаких "наездов" не было. Что касается полезности знания ассемблера, то с этим я полностью с Вами согласен. И, как мне кажется, распределение памяти - это слишком интимный... я хотел сказать, машиннозависимый вопрос, потому у меня и возникла мысль об использовании ассемблерных вставок. Хотя, зависит ещё от основного языка, который Вы используете.

Что касается "строчу" и "прожекты", - это просто сленг такой (никаких наездов не означает).

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #24 : Февраль 07, 2012, 04:37:25 am »
Полностью согласен с Сергеем. Принципиальный момент в наличии сборщика - это именно возможность построить платформу, гарантирующию целостность на уровне отдельных объектов (памяти). Точнее, тут от обратного проще сформулировать - без сборщика невозможно такую систему построить.
Все-таки возмножно. Например, если совсем без динамической памяти.

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

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Зачем сборщик мусора? (v2.0)
« Ответ #25 : Февраль 07, 2012, 07:51:53 am »
Все-таки возмножно. Например, если совсем без динамической памяти.
Или если совсем без освобождения динамической памяти. Программа растёт-растёт-растёт, но успевает выполнить поставленную задачу и завершиться задолго до того как исчерпается вся память. У меня есть такая программа на С++, в ней нет ни одного delete. Некий транслятор: запускается, читает несколько файлов, пишет другой файл и завершается. Все объекты, которые она создаёт нужны ей до самого конца, а в конце нет нужды их специально удалять поскольку вся программа заканчивает свою работу  ;)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #26 : Февраль 07, 2012, 08:22:01 am »
Не, на самом деле trurl вел речь о том, что можно жить без динамической памяти вообще. И таки да, живем. В одной из наших программ нет ни одного new/malloc и ни одного delete/free. Рукописных менеджеров памяти также нет. Стандартные контейнеры также не используются.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #27 : Февраль 07, 2012, 08:22:52 am »
Насчет компонент (для который вроде как требуется сборщик мусора).. Предлагаю ответить на два вопроса:

1) Что такое компоненты?
2) Какую задачу они решают (зачем они нужны)?
1 Базовое определение - часть некоторой составной системы , обладающая по крайней мере двумя свойствами
a) Относительно некоторого(ых) признака(ов) функционально законченная
б) Допускающая повторное использование

2. Понижают сложность создаваемой с помощью них системы

alexus

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #28 : Февраль 07, 2012, 10:29:31 am »
Если позволите я немного поправлю Ваше (реально!) очень хорошее определение:
Насчет компонент (для который вроде как требуется сборщик мусора).. Предлагаю ответить на два вопроса:

1) Что такое компоненты?
2) Какую задачу они решают (зачем они нужны)?
1. Базовое определение - часть некоторой составной системы , обладающая по крайней мере двумя тремя свойствами
я) Отвечающая заданному интерфейсу;
a) Относительно некоторого(ых) признака(ов) функционально законченная;
б) Допускающая повторное многократное использование, в том числе, внутри одной системы/программы;

2. Понижают сложность создаваемой с помощью них системы
2. Ускоряют процесс разработки, за счёт перехода к сборке из готовых блоков/компонент.

При этом ни на функциональность, ни на размер компонент ограничений, как правило, не накладывается, то есть, отдельный компонент сам может быть системой или набором компонент.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #29 : Февраль 07, 2012, 10:36:50 am »
Чем в данном случае отличается: повторное и многократное ?