LINUX.ORG.RU

[@] GC


1

2

а давайте поговорим о сборщиках мусора

используете ли языки с GC, и какими их преимуществами при этом пользуетесь? если не используете, то как автоматизируете работу с памятью (и автоматизируете ли)? знаете ли современные алгоритмы сборки мусора, оцениваете ли их производительность при выборе механизмов работы с памятью?

в общем, жажду конструктивной дискуссии

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

Аргумент поди забыл дать программе. Там же atoi(argv[1]) в первой строчке main'а.

и правда - никакой дуракоустойчивости :)

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

мне одно непонятно во всех этих тестах: gc вообще и копирующий gc в особенности невозможно прикрутить без применения бубна к с++.

по сути, для запуска gc в Сишных программах надо

1а)гарантировать, что мы не находимся внутри какой-либо функции, имеющей локальные переменные-ссылки.

1б)или переписать компилятор, потому что в С переменная запросто может лежать в регистре(или в stack frame перед вызовом функции в хер знает какой последовательности).

2)для каждого класса и структуры реализовать метод collect который будет обходить ссылки внутри класса

3)для них же завести переменную-пометку о том, что объект уже спасён и куда он спасён, и сколько байт он весит.

4)аллокацию вести зонами чтоб не беспокоиться о том, куда перемещать спасаемый объект.

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

с бубном, тем не менее, можно. да и language-wide GC ведь совсем не обязателен - всегда можно выделить единократно область (разделяемой) памяти и посадить на неё свой heap manager со сборкой мусора (если в этом есть необходимость). интересный вопрос - когда эта необходимость действительно есть?

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

C - это удобный ассемблер, если кто забыл. там думать надо, как выделять данные, как управлять ими. вообще, проектировать программу, а не бросаться на клавиатуру с криками «developers! developers!»

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

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

там думать надо, как выделять данные, как управлять ими

вот я и хочу, чтобы вы подумали и высказали своё мнение. желательно, аргументированное - петросянства в треде уже и так достаточно

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

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

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

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

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

> Java есть принудительный вызов/запрет вызова GC?

в D точно есть.

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

$500 в кассу ЛОР %)

где кнопка donate?

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

от общего к частному — это дедукция

индукция, дедукция, абдукция и их суперпозиции :)

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

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

sanuda
()
Ответ на: комментарий от ky-san

Дуальное понятие рекурсии - корекурсия.

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

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

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

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

> содержательность

а что ту обсуждать? кому не хочется вручную управлять временем жизни объектов (и позволяют требования к ПО), тот предпочитает GC.

мне, например, это не интересно, не интересно знать кучу видов *_ptr, где и как каждый из них можно/нужно использовать, кого ставить владельцем объекта и т.п.

korvin_ ★★★★★
()

> как автоматизируете работу с памятью

Есть интересная модель управления в Qt, но, наверное, все о ней знают.

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

с удовольствием, кстати, обсудил бы оные. встречал на практике только в JHC

Ещё есть MLKit, papers на тему там же.

quasimoto ★★★★
()

Использую С++ just for fun, но если нужно что-то, что дойдет до продакшна, то естественно только Java. А там просто, обычный прикладной софт - обычный планировщик, графика - -Xincgc.

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

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

vertexua ★★★★★
()
Ответ на: комментарий от ky-san

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

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

Похоже, что здесь трудно вести беседу в контексте чего-нибудь. Можно писать только общими фразами. От этого общение становится плоским.

dave ★★★★★
()

Я не фанат GC, но по работе приходится иметь с ними дело, и чем дальше - тем больше.

Сейчас имею дело с dalvik. Дефолтовое поведение довольно убого. Иногда пару десятков объектов чистятся за ~200ms Настройками еще не баловался.

Знатоки, а скажите ка мне, почему есть только две крайности:

- GC

- ручное управление

Почему бы не сделать промежуточный вариант, когда по умолчанию память чистит GC, но программист может вызвать освобождение памяти конкретного объекта явно?

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

Промежуточная схема в какой-то мере давно реализована в Аде. Там что-то такое есть.

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

Да и хрен его знает, что происходит при освобождении памяти в C++/CLI. У них тоже может быть гибридная схема, товарищ.

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

> Почему бы не сделать промежуточный вариант, когда по умолчанию память чистит GC, но программист может вызвать освобождение памяти конкретного объекта явно?

если не ошибаюсь, в C# возможно вручную «удалять» объект. но, имхо, удобней было б, если бы компилятор мог однозначно решить, какие объекты выделять на стеке, а кике в куче и соответственно объекты на стеке автоматически удалялись бы при выходе из области видимости, ну а остальные управлялись бы GC

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

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

Это и есть region inference в комплекте с garbage collection. В треде есть минимум 2 ссылки на статьи по теме :)

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

> Это и есть region inference в комплекте с garbage collection. В треде есть минимум 2 ссылки на статьи по теме :)

а, ну хорошо, что это не просто мой бред оказался, но мне это не интересно, «full-GC» устраивает =)

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

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

А escape analysis разве не для этого как раз нужен?

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

> у кого-нибудь есть доступ к этой и этой статьям? кто-нибудь их читал?

кстати да, стоит прочесть

небольшой оффтопик: а в диком виде на торрентах или в осле существуют полные сборки ACM-овских статей? ведь она вроде как их делает и продает, а значит...

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

Гибридного нет, там сбоку просто прилеплен отдельный синтаксис на фичи из .NET. Они никак не интегрированы в язык.

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

>если не ошибаюсь, в C# возможно вручную «удалять» объект.

Если не ошибаюсь, «удалять» объект нельзя. Можно сборщик мусора попросить удалить все ненужные объекты.

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

> Опять ты? Я так понял, ты книгу так и не посмотрел. В контексте одного параграфа из уже названной здесь главы моя фраза про частное и общее будет вполне понятна. Именно этот контекст я и имел в виду.

Ты думаешь, что все знают на изусть это параграф их этой главы в этой книжке? Смех, да и только.

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

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

Ты посмотри кому я писал то сообщение, чудо.

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