LINUX.ORG.RU

сборка мусора - зацените идейку


1

0

Доброго!

Как я понял, поколенческая сборка мусора требует некоторых дополнительных действий при каждом создании или изменении ссылки, чтобы отследить ссылки старого объекта на молодой. Почему бы тогда не обобщить понятие «поколения» на понятие «область хранения» и не позволить пользователю явно управлять областями? Например, ввести глобальную (поточную) переменную «текущая область хранения» и всё выделение по умолчанию вести в этой области. Или добавить параметр в конструктор (хотя это требует переделки языка). Области могут быть упорядочены в иерархию и тогда нужно будет отслеживать только ссылки «старших» на «младших» по иерархии. Или они могут составлять произвольный граф и тогда нужно отслеживать все ссылки. Причём, можно отслеживать ссылки как тонко (на уровне объектов), так и грубо (на уровне областей). Например, мы знаем, что область A ссылается на область B. Тогда, чтобы собрать мусор в области B, нам нужно искать корни также в области А. Самое главное, если на область B вообще никто не ссылается, то мы можем одним махом убить все объекты в области B.

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

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

> Изобретаешь RTSJ?
Ну, по правде говоря, я не вижу, чтобы эта идея была у них прописана. Куча у них одна: The HeapMemory class is a singleton object

den73 ★★★★★
() автор топика

Неужели за долгую историю сборок мусора ещё не всё было по 1000 раз изобретено? Один лиспер на лоре всех убеждал, что сборка мусора и Лисп появились чуть ли не во времена палеозоя.

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

По статистике, из того, что я придумываю, обычно до меня бывает изобретено только 95-97%. 3-5% всё же бывает того, что нигде не засветилось. Я не говорю, что сегодня - как раз такой день, когда выпал случай из этих 3-5%. Но почему бы и нет?

den73 ★★★★★
() автор топика

Идеи, идеи, идеи... Что ни тема, то новая идея. Ваша работа не позволяет вам реализовывать ваш творческий потенциал и поэтомы вы здесь пишите свои идеи? Или наоборот? Вы уже знаменитый разработчик языков и компиляторов и иногда заходите сюда, чтобы поболтать о языках и компиляторах?

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

>Идеи, идеи, идеи... Что ни тема, то новая идея. Ваша работа не позволяет вам реализовывать ваш творческий потенциал и поэтомы вы здесь пишите свои идеи? Или наоборот? Вы уже знаменитый разработчик языков и компиляторов и иногда заходите сюда, чтобы поболтать о языках и компиляторах?

Анон, успокойся =)

Мне нравится, когда у людей есть свои идеи.

*про себя* Plagerize, let nothing else evade your eyes...

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

Может же быть хобби у человека изобретать языки и писать компиляторы. Не на Ваши же деньги он этим занимается, а на свои. А чтобы стать «знаменитым разработчиком языков и компиляторов» надо сначала побыть не знаменитым.

anonymous
()
Ответ на: комментарий от Absurd

> Зато ScopedMemory
Scoped memory не имеет ровно никакого отношения к GC. Конечно, стек сам в себя вложен :)

Ваша работа не позволяет вам реализовывать ваш творческий потенциал и поэтомы вы здесь пишите свои идеи?

Можно, наверное, сказать и так.

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

А если точнее, я не хочу быть разработчиком языков и компиляторов.

Безобразность всех известных мне языков и сред программирования побуждает меня к тому, чтобы создать свой язык/компилятор, а некоторые другие причины (включая объём задачи, лень, религиозные воззрения и уже не совсем подходящий возраст) побуждают меня этого не делать. Поэтому я пытаюсь выдать для общего пользования накопленные идеи, с тем, чтобы освободить от них свою голову. Т.е., типа, рожаю :)

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

В общем, не обижайтесь, если что не так.

Просто я где-то слышал, что если хобби увлекает сильнее работы, то это плохо и для хобби, и для работы, и для всего остального.

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

>Просто я где-то слышал, что если хобби увлекает сильнее работы, то это плохо и для хобби, и для работы, и для всего остального.

Некоторые автомобили с самолётами сами делают. Им это больше нравится, чем работа винтиком на должности сборщика самолётов или автомобилей на конвеере в транснациональных концернах.

anonymous
()
Ответ на: комментарий от Absurd

> Зато ScopedMemory ЕМНИП могут быть вложены иерархически
Хотя да, получается, что это похоже на то, что я предложил. Является частным случаем. Но я-то предлагаю несколько другое. Раз уж мы всё равно имеем накладные расходы на поддержание поколений, то почему бы не дать пользователю возможность управлять областями кучи явно? Правда, если число областей мало или фиксировано, то работу с областями можно сделать более быстрой, чем если количество областей произвольно.

den73 ★★★★★
() автор топика

сложная деревянная структура, в которой постоянно отваливаются какие-то связи и появляются дырки
тема, достойная диссертации

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

«Раз уж мы всё равно имеем накладные расходы на сборку мусора, то почему бы не дать пользователю возможность управлять памятью явно?»

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

Тема страрая, об этом также писал B. Stroustrup в своих книгах

Automatic garbage collection is possibly the issue over which the C and Lisp communities has tradi- tionally been most at odds. The Lisp community was certain that memory management was far too important to leave to users, and the C community was sure that memory management was far too important to leave to the system. C++ takes an intermediate approach. Automatic garbage collection is possible, but not compulsory in C++. Traditionally, this simply meant that C++ programs didn’t use automatic garbage collection, but now both commercial and free garbage collectors for C++ has found their way into non-experimental use. The performance of these collectors is respectable, and in particular, far better than the pessimistic predictions that I have repeatedly heard over the years. Even where a garbage collector isn’t used, well-designed C++ programs suffer far less from memory management problems than traditional C programs. Memory management is often encapsulated in user defined types so that users don’t have to allocate and deallocate memory directly. In particular, standard containers such as string, vector, and list do their own memory management and provide variable-sized data structures.

CEHO
()
Ответ на: комментарий от kto_tama

>сложная деревянная структура, в которой постоянно отваливаются >какие-то связи и появляются дырки тема, достойная диссертации
И что?

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

Automatic garbage collection is possible, but not compulsory in C++

В C++ она во вменяемом виде невозможна. Тчк.

Вообще, трупа страуса читать смысла нет никакого. Все его «труды» это убогие попытки рационализации говнодизайна C++.

Вся эта его философия попахивает говном. Все гораздо проще, на самом деле - в Си нет GC по причине издержек производительности, особенно критичных в начале 70х. Если бы у нас сейчас повсеместно стояли процессоры с GC(а что? такой же модуль, как FPU), а не убогие x86, никто бы даже Си не пользовался.

Love5an
()
Ответ на: комментарий от CEHO

Все какбе знают что Строуструп решает дилему вида «простота vs гранулярность» при помощи уничтожения и того и другого. И что?

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

> почему бы не дать пользователю возможность управлять памятью явно
Если мы оставим только явное управление, мы потеряем производительность труда разработчика и надёжность. Если мы смешаем сборку мусора и явное управление, мы ИМХО получим смесь недостатков без смеси достоинств: опасности явного управления и тормозного сборщика. Если смешать явное управление с какими-нибудь «умными» указателями, гарантирующими надёжность ссылок, и сборку мусора, получится просто смесь двух медленных и/или прожорливых до памяти способов управления. То, что я предлагаю - это вещь гораздо более простая. Достоинства:
1. гарантировать надёжность в той же степени, что и просто сборка мусора.
2. поколенческая сборка является частным случаем, т.е., мы имеем не меньше того, чем имели раньше.
3. те случаи, когда сборка мусора быстра, остаются в нашем распоряжении (например, линейность и отсутствие фрагментации).
4. есть возможность управлять быстродействием в частных случаях.

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

А как же VirtualBox, Firefox, OpenOffice и множество других программ на С++. Неужели они все ошиблись в выборе языка, не послушав аналитиков с лора про «говнодизайн» С++?

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

Лет через 10 я понял, что на С++ действительно можно писать. Только Страуструпа всё равно читать не нужно. А выучить лисп - это, конечно, обязательное условие. Тем не менее, я надеюсь, что мне не придётся больше писать на С++.

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

И вообще, говоря о явном управлении, я имел в виду не управление на уровне «удалить область, наплевав на безопасность», а только лишь:
1. Создавать новые области.
2. Определять, как размещаются вновь создаваемые объекты по областям
3. Определять гранулярность ссылок между областями (по-объектная таблица ссылок или обобщённые факты типа «область А ссылается на область Б»).
4. Управлять запуском сборки мусора в каждой области (это и так можно в делать в лиспах). В ходе сборки мусора иметь возможность двигать выбранные объекты между областями (это и так делается в лиспах).
5. Удалять область в том же смысле, в каком unintern удаляет символ. Т.е., не совсем, а только потенциально.

Это - один из вариантов API.

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

Ну да. Только почему с ЛОРа? Как будто только на ЛОРе C++ критикуют.
Вон человек целый сайт посвятил проблеме:
http://yosefk.com/c++fqa/index.html

Не послушались, теперь расхлебывают.
Все эти три программы, кстати - глючное, тормозное, текущее памятью изо всех дыр, говно, в сорцы которого противно смотреть.

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

Пользуюсь всеми этими тремя программами и не испытываю от них неудобств. Очень жаль, что Вам они не понравились.

CEHO
()
Ответ на: комментарий от den73

А почему Вы им продолжаете пользоваться, если он у Вас 10 раз за день падает? Возьмте другой браузер, без С++, написанный на хорошем языке с GC и забудьте про Firefox.

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

> А почему Вы им продолжаете пользоваться, если он у Вас 10 раз за день падает? Возьмте другой браузер, без С++, написанный на хорошем языке с GC и забудьте про Firefox
Да, я так и думал, что этот убийственный аргумент будет применён. Что ж, вздыхаю и продолжаю пользваться FF.

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

>А почему Вы им продолжаете пользоваться, если он у Вас 10 раз за день падает?

Что за придурочный вопрос? Естественно потому, что языки с GC на десктопы вошли только-только, и нормальных браузеров на них пока не написали.

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

>Естественно потому, что языки с GC на десктопы вошли только-только, и нормальных браузеров на них пока не написали.

GC появились в начале 60, С в начале 70, С++ в начале 80 годов. Почему же GC не может до сих пор прийти на десктопы, несмотря на свой почтенный возраст. Почему сопляки C/С++ потеснили GC, создав Linux, FreeBSD, Solaris, HP Linux, Windows. А также GNOME, KDE, VirtualBox, OpenOffice, MS Office, Visual Studio, Firefox, Explorer, Quake, Apache, Oracle и много-много всего другого?

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

>GC появились в начале 60
В конце 50х

Почему же GC не может до сих пор прийти на десктопы, несмотря на свой почтенный возраст. Почему сопляки C/С++ потеснили GC, создав Linux, FreeBSD, Solaris, HP Linux, Windows. А также GNOME, KDE, VirtualBox, OpenOffice, MS Office, Visual Studio, Firefox, Explorer, Quake, Apache, Oracle и много-много всего другого?

Ты идиот, да? Потому что ресурсы компьютеров не позволяли.
И не не может прийти, а уже пришел. MS .NET - будущее десктопных приложений для винды, и уже немного настоящее.

Love5an
()
Ответ на: комментарий от Booster

> Объясните мне зачем нужен GC? Чем смарт поинтеры хуже?

опять двадцать пять. тебе не нужен. иди дальше лабай на своем недоязычке.

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

>опять двадцать пять. тебе не нужен. иди дальше лабай на своем недоязычке.
Уважаемый аноним, на каком таком недоязычке?

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

Все большие и извесные программы написаны на «недоязычках».

Даже anonymous 23.12.2009 1:48:36 писал свой комментарий вероятно из браузера на «недоязычке», на ОС на «недоязычке», комментарий шёл по сети через маршрутизаторы на «недоязычках» и попал на ХТТП сервер с ЛОРом, написанный на «недоязычке» и работающий под ОС на «недоязычке».

А на языках с GC только быдлокодеры пишут недопрограммы из 100 строк для недофирм с быдлосайтами. Ну может ещё тормозную быдлопрограмму NetBeans.

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

и попал на ХТТП сервер с ЛОРом, написанный на «недоязычке»

Tomcat написан на java

mipt_student
()
Ответ на: комментарий от den73

Лет через 10 я понял, что на С++ действительно можно писать. Только Страуструпа всё равно читать не нужно. А выучить лисп - это, конечно, обязательное условие. Тем не менее, я надеюсь, что мне не придётся больше писать на С++.

Как раз лет 10-12ть назад писать на С++ было ммм.. несколько геморройно, я бы так сказал. Все помнят 11й Watcom и его чудесные феерические баги? А ведь какой продукт был для C! Или допустим MSVC6 по ночам не снится в кошмарах? А egcc? djpp? И у каждого свои 'фишки'. Да много их было - красавцев. Так что 'C++ лет десять назад' в виде конкретных реализаций и C++ сегодня - это все-таки немного разные вещи.

bibi
()
Ответ на: комментарий от anonymous

> браузера на «недоязычке»

Оно и видно... Браузеры на слегка исправленном недоязычке (т.е. на Qt) ведут себя поприличнее. Хотя и побажнее в силу возраста.

ОС на «недоязычке»

Ой-ой-ой, это какая-такая ОС на цепепе написана?

маршрутизаторы на «недоязычках»

Интересно, сколько маршрутизаторов имеют таки софт на недоязычке, а не на портируемом ассемблере?

ХТТП сервер с ЛОРом, написанный на «недоязычке»

У-у-у, Tomcat уже на цепепе переписали? Какая страшная новость... Apache, к слову сказать, тоже не на недоязычке написан, surprise!

kemm
()
Ответ на: комментарий от BOEHKOM

> У С появился GC?

Я где-то утверждал, что в C есть GC? Ответ про недоязычки без GC был в ответ на сообщение про C? В C есть смарт-пойнтеры?

С я вообще люблю — простой, понятный, предсказуемый низкоуровневый язык без закидонов и нелепых претензий на высокоуровневость.

kemm
()
Ответ на: комментарий от Booster

>>опять двадцать пять. тебе не нужен. иди дальше лабай на своем недоязычке.

Уважаемый аноним, на каком таком недоязычке?

Чем смарт поинтеры хуже?

смарт поинтеры

уродец цепепе же

anonymous
()

вот и обиженные жизнью гуру подтянулись

lester ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.