LINUX.ORG.RU

libgc 1.0 - библиотека автоматической сборки мусора для C++


0

0

LibGC - небольшая, быстрая, портируемая и многопоточная библиотека сборки мусора для C++, распространяемая по лицензии BSD. Разработчик отмечает простоту и гибкость в использовании, а также эффективность. А что скажете вы? :)

>>> Домашняя страница



Проверено: Shaman007 ()

А нафига козе баян?..

Я видел и кривые приложения, которые писаны на языках с гравицапой (ну кушали они рам ложками), а тут гравицапу в плюсы ставить хотят...

Покажите мне, хоть кто-то пример, когда нужна гравицапа и не спасает delete (про склероз разработчика мы знаем, но тут можно и его ide научить delete строкой ниже ставить...)

catap ★★★★★
()

Альтернатива сборки мусора в яве?

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

иногда лучше молчать. если ты не имел никогда промышленного опыта разработки ПО, это отнюдь не значит, что ты самой умный, ок?

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

Использование GC (или reference count) упрощает логику программы. К тому же не всегда очевидно, где именно вставлять delete :)

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

Вы пример такого упращения...

А на тему, что не очевидно когда... Это возможно, но на то вам и дан мозг, что бы понять, когда надо удалить объект, а не надеятся на гравицапу.

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

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

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

дело совсем не в склерозе
если бы вся проблема была именно в делите то ауто_птр бы все проблемы решил на раз
иногда динамические переменные существуют дольше чем локальный контекст функции и тогда часто возникает вопрос - а как и когда его убивать? гц тут пусть дешево и сердито но все таки пользительно
даже сам Страуструп ничего против гц в плюсах никогда не говорил
проверьте сами - почитайте Бьярна

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

>Это возможно, но на то вам и дан мозг, что бы понять, когда надо удалить объект, а не надеятся на гравицапу.

Когда надо удалять и где надо удалять - немного разные понятия. Зная _когда_ надо удалять не всегда возможно решить _где_ надо удалять.

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

WFrag ★★★★
()

Не, в принципе вещь полезная, жаль только проект под винду заточен и с g++ не тестировался. Хотя автор и приводит рекомендации как портировать на другие платформы.

anonymous
()

чем оно лучше, скажем, чем bohem gc, который идет в составе gcc ? Кто-нибудь в курсе?

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

> Разве что кроме случаев где это действительно чем-то обоснованно.

Например если своевременное удаление объекта является критичным моментом для программы.

mutronix ★★★★
()

Ну и новость. Такие "открытия" сплош и рядом пользуются. Ладно бы тут вели учебный курс по С++, но при чем тут линукс и какая это новость если подоные весчи описаны годы (если не десятилетия) назад?

Исключения не обрабатываются. Такой тряпочкой дырявую голову инженера можно только на половину прикрыть.

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

Гравицапа нужна для пепелаца, чтобы полететь на планету Плюк. Стоит полспички. Ку-ууу...

"Кин-дза-дза"

anonymous
()

если писать программу на C++ полностью используя сборку мусора, то зачем тогда вы взяли именно этот язык программирования?

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

>В смысле? Имеются в виду исключения в деструкторе?

Вообще никакие. Оно само обосреться и тебе всю жизнь испортит. Куча - статический массив.

zZzZ
()

Полный дебилизм) БАЯНЪ! Есть куча средств уже давно протестированых, стабильных.. Си++ рулит, а сборщик мусора для него.. хм... Придумали точно поцы, поцы реализовали, кто будет пользоваться? Поцы))) IMHO

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

>Например если своевременное удаление объекта является критичным моментом для программы.

Чаще всего критичным является своевременное освобождение некоторого ресурса (причем не памяти). Удаление объекта - всего лишь один из способов этого достичь, правда как раз больше всего подходящий под идеологию C++.

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

C++ - объектно-ориентированный язык, поэтому естественно связать ресурс с объектом и в деструкторе его освободить, других путей просто нет.

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

не всегда delete спасает!

Мозг дан думать, а эта тулза могут помочь думать... Хотя можть у тя проц в мозг интегрирован, все может быть и ты помнишь все выделения памяти, даже когда делаешь связные списки, да вообще работаешь с динамическими данными...

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

> C++ - объектно-ориентированный язык, поэтому естественно связать ресурс с объектом и в деструкторе его освободить, других путей просто нет.

Вот и не правда ваша. Часто в классе ведется подсчет ссылок на объект и деструктор не удаляет объект до тех пор пока на него ссылается хотя бы один указатель-дескриптор(до боли знакомо, правда?) В этом случае за удаление объекта отвечает закрытая функция-член класса вызываемая из деструктора или перегруженного оператора "=", а не сам деструктор. Управление памятью в С++ это отнюдь не простая задача. Это же не Java.

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

>C++ - объектно-ориентированный язык, поэтому естественно связать ресурс с объектом и в деструкторе его освободить, других путей просто нет.

Да, но можно по разному связать ресурс и объект. Например, можно освобождать ресурс из dispose(). :) То есть освобождение в деструкторе - вообще не единственный вариант.

Я имел ввиду, что в C++ принято управлять ресурсами основываясь на принципе RAII.

WFrag ★★★★
()

Скажем, что чем это оно лучше Boehm GC?

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

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

Явное освобождение памяти во многих случаях будет крайне неэффективным, в сравнении с инкрементальным, и часто просто недопустимо в задачах реального времени. Удаление разлапистой структуры неизвестного заранее объёма может скушать больше времени, чем разрешено потратить единовременно на memory management, тогда как как GC реального времени просто отложит удаление остатков структуры на лучшие времена.

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

Чудило, не всегда ты вообще имеешь право удалять объекты явным образом. Это крайне неэффективно и по времени, и по памяти.

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

>Вот и не правда ваша. Часто в классе ведется подсчет ссылок на объект и деструктор не удаляет объект до тех пор пока на него ссылается хотя бы один указатель-дескриптор(до боли знакомо, правда?) В этом случае за удаление объекта отвечает закрытая функция-член класса вызываемая из деструктора или перегруженного оператора "=", а не сам деструктор.

ОБАНА! Единственный интерестный пост во всем этом треде о домашней работе для студента младшего курса!

А не растолкует ли уважаемый сэр что он собственно имел ввиду? Если я правильно понял, то тут два постулата:

1) Деструктор вызывается, а объект не уничтожается - ибо ссылок на него есть и так моного раз...

2) Из перегруженного оператора = вызывается некая "закрытая функция-член класса", которая и уничтожает объект, не вызывая его деструктор.

Был бы счастлив получить урок эксперта!

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

>Явное освобождение памяти во многих случаях будет крайне неэффективным, в сравнении с инкрементальным, и часто просто недопустимо в задачах реального времени. Удаление разлапистой структуры неизвестного заранее объёма может скушать больше времени, чем разрешено потратить единовременно на memory management, тогда как как GC реального времени просто отложит удаление остатков структуры на лучшие времена.

Еще один "эксперт" мля. А я то думал почему подавляющее больштнство RT приложений пишут на жабе! Понял тапереча спасибочки!

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

>Вот уж какая форма GC почти никогда недопустима, так это подсчёт ссылок.

А я то думаю почему в случае shared ownership в жабских программах ссылки считают? Понял таперича - неправильно делают. А как правильно то? Научи.

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

>Чудило, не всегда ты вообще имеешь право удалять объекты явным образом. Это крайне неэффективно и по времени, и по памяти.

Не растолкует ли уважаемый сэр ламеру, каким образом это накладно по времени и по памяти?

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

Парой постов выше это растолковано. Когда надо удалить хэш-таблицу о паре сотен мегабайт, а у тебя на memory management по регламенту предусмотренно строго не более 0.1% машинного времени в рассчёте на одну минуту, то делать это явным образом - бред свинячий, тогда как GC легко с задачей справится, причём - без каких бы то ни было дополнительных накладных расходов.

Вообще же, лучший вариант - комбинированный. Там, где можно автоматически вывести случаи явного удаления объектов - удалять явно, а в остальных случаях использовать GC. Так умеет пока только MLTon, однако.

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

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

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

Читай, как нормальные GC устроены - про компактифицирующий stop and copy, про инкрементальный mark and sweep...

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

>Когда надо удалить хэш-таблицу о паре сотен мегабайт, а у тебя на memory management по регламенту предусмотренно строго не более 0.1% машинного времени в рассчёте на одну минуту, то делать это явным образом - бред свинячий, тогда как GC легко с задачей справится, причём - без каких бы то ни было дополнительных накладных расходов.

А я выделю блок в пару сотен мегов, размещу там свою таблицу и грохну ее за один раз - просто грохнув блок. Или вообще не буду грохать, а использую для другой такой таблицы или ... короче - куча способов - только ДЕБИЛ не догонит. А вообще говоря, я по глупости своей думал, что в RT приложениях обычно память динамически стараются не распределять...

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

действительно козе баян нафиг...

а про примеры, так всякие есть... я например, знаю о проекте, который потерял в производительности от того, что ветераны плюсов (а проект на .NET) решили ее улучшить выгружая объекты сами (IDisposable) и т.д.

ФАКТ - выделение и освобождение памяти не самые быстрые операции. Так, что ... примеры есть всякие.

А вот плюсам врядли гравицапа поможет... Потому как уже так много кода используется с объектами где ресурсы освобождаются именно в деструкторе... Так, что libgc только добавит головной боли для проектов работающих с системными ресурсами.

А для тех кто уверен, что delete отнимает время у программиста на обдумывание, то оч. сильно ошибается.. такие вещи уже давно находятся в их мозжечках и выполняется автоматически. Т.е. никто не задумывается над каждым своим шагом при ходьбе.

Врядли проект выйграет во времени, заменив время потраченное при решении хорошо известной задачей исправления memory leak-ов с использованием широкого набора инструментов, на поиск и разрешения конфликтов доступа к ресурсам.

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

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

Ну чтож, в газенваген всегда успеется, а не будете ли вы так любезны, не скажете ли мне ламеру, какие RT "рантаймы c GC" вы знаете?

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

> А вообще говоря, я по глупости своей думал, что в RT приложениях обычно память динамически стараются не распределять...

Это раньше так было, когда еще не было правильных, доказанных RT GC. Вот и приходилось лечить головную боль топором, отказываясь от динамического распределения памяти вообще. Зато теперь...

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

>итай, как нормальные GC устроены - про компактифицирующий stop and copy, про инкрементальный mark and sweep..

Спасибочки за совет. Вы забыли еще слово multigenerational. Так ведь читал и доки и исходный код, и сам писАл - по глупости - в студенчестве зеленом...

И что?

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

>выгружая объекты сами (IDisposable)

Дааа. Выгружать объекты с помощью IDisposable ... Побойтесь бога! Я хоть не треплю о том, всем не ухо не рыло! А то один у живого объекта сто раз деструктор вызывает, другой объекты "выгружает" с помощью IDisposable, третий кучу объектов на раз незнает как убить - это что? Я отсюда ухожу. В жопу таких собеседников.

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

Ну ты правильно догнал тему, что ты - дебил.

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

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

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

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

сходи на гугль со словами "real time garbage collector" и просвещайся до растительного состояния. Ну а потом уж не забудь проследовать в газенваген.

anonymous
()

вот что я скажу...

Какое отношение имеет этот убогий windoze-only junk к *NIX|Linux ?

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