LINUX.ORG.RU
 
jtootf

[@] GC


0

3

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

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

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


[#]  

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

Ты чего так внезапно растолстел?

** ()
[#]  

> знаете ли современные алгоритмы сборки мусора

Вот как-то этой темой совсем не интересовался, а было бы полезно знать, поэтому ссылки в студию, пожалуйста :)

** ()
[#] Ответ на: комментарий от ott 23.03.2011 19:40:54  

Cпасибо, буду смотреть

** ()
[#]  
aptyp

ммм.да нет вроде, в с++ либо ручками дин.массивы, либо, следуя инструкции faq lite заменяю их на vector<type> :-)

** ()
[#] Ответ на: комментарий от archimag 23.03.2011 19:22:20  
jtootf
>>-----Цитата---->>

Ты чего так внезапно растолстел?

<<-----Цитата----<<

что не так?

***** ()
[#]  

Использую что есть, т.е. g_object_ref и g_object_unref.

()
[#]  

Использую жабу, к GC уже привык. Больше ничего не знаю.

*** ()
[#]  

А остались люди, которые не пользуются языками с GC?

***** ()
[#]  
yoghurt

>используете ли языки с GC

Да, для себя

>какими их преимуществами при этом пользуетесь?

Удобство, свобода и простота => выразительность. Могу спокойно писать

tags := (aString tokenize: ',') collect: [:e | e trimSeparators asLowercase]
где круглые скобочки аллоцируют одно, квадратные - 2N раз другое, а всё вместе - третье, и не париться.

>если не используете, то как автоматизируете работу с памятью (и автоматизируете ли)?

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

>знаете ли современные алгоритмы сборки мусора

Подсчет ссылок, mark & sweep?

>оцениваете ли их производительность при выборе механизмов работы с памятью?

Нет

***** ()
[#] Ответ на: комментарий от tailgunner 23.03.2011 19:53:38  

Да остались. Не все могут решать на чем писать.

()
[#] Ответ на: комментарий от zombiegrinder_6000 23.03.2011 19:57:08  

И ты пишешь ровно на одном языке (Си, насколько я понимаю)?

***** ()
[#] Ответ на: комментарий от tailgunner 23.03.2011 19:53:38  
OldFatMan

Я. Довольно-таки много приходится на С писать.

# ()
[#]  

Собственно auto_ptr<> и shared_ptr<> с вариациями уже давно решили этот вопрос в C++, чтобы это не было возможным называть "проблемой".

anonymous ()
[#] Ответ на: комментарий от anonymous 23.03.2011 20:07:58  
jtootf
>>-----Цитата---->>

Собственно auto_ptr<> и shared_ptr<> с вариациями уже давно решили этот вопрос в C++, чтобы это не было возможным называть "проблемой"

<<-----Цитата----<<

tradeoff при использовании умных указателей не смущает? сравнение с современными механизмами GC выполнялось?

***** ()
[#] Ответ на: комментарий от tailgunner 23.03.2011 19:53:38  
geekless

> А остались люди, которые не пользуются языками с GC?

Да: периодически вылезают из протекших криокамер.

** ()
[#] Ответ на: комментарий от OldFatMan 23.03.2011 20:04:46  

> Довольно-таки много приходится на С писать.

Мне тоже, но я использую и Питон. Мне казалось, что похожее двуязычие достаточно распространено, а все остальные пишут для .Net и JVM :)

***** ()
[#] Ответ на: комментарий от tailgunner 23.03.2011 20:16:00  
OldFatMan

Скорее всего - так оно и есть.

Правда, у меня вместо Питона всякие лиспы, тикли и прочая "экзотика".

# ()
[#]  

Пописываю немного, а преждевременной оптимизацией не занимаюсь. Стараюсь следить, чтобы нигде ссылок не оставалось. Вот и всё.

***** ()
[#]  
geekless

> преимуществами

Можно быдлокодить в таком духе и не задумываться о управлении памятью:

puts `bash -i -c 'bind -p ; bind -s' | egrep -v '(^#)|self-insert|do-uppercase-version|do-lowercase-version|digit-argument' `.lines.reduce(Hash[]) { |h, line|
	dummy, key, action = line.match(/"(.*?)"\s*:\s*(.*)/).to_a
	if key && action
		h[action] = [] unless h.has_key?(action)
		h[action] << key
	end
	h
}.map {|action, keys| keys.join(', ') + "\t" + action}

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

Моя ИМХА такова, что где-то допустимо использовать сборщик мусора или массовый подсчёт ссылок, то там можно использовать и высокоуровневый язык типа Руби или, прости господи, CL. А там, где ресурсы/требования не позволяют задействовать автоматическую или полуавтоматическую сборку мусора, правит балом Си/Си++ с ручным управлением памятью.

** ()
[#] Ответ на: комментарий от tailgunner 23.03.2011 20:22:32  
OldFatMan

Ох, спалился, ё... :)

Теперь отмазываться придётся: я не гуру, я только мелочи встраиваемые пишу, всякую фигню... :)

# ()
[#] Ответ на: комментарий от geekless 23.03.2011 20:24:25  

> там, где ресурсы/требования не позволяют задействовать автоматическую или полуавтоматическую сборку мусора, правит балом Си/Си++ с ручным управлением памятью.

Вообще, есть еще всякие прикольные техники вроде region inference.

***** ()
[#] Ответ на: комментарий от OldFatMan 23.03.2011 20:27:18  

> я только мелочи встраиваемые пишу,

На Лиспе со сборкой мусора?

***** ()
[#] Ответ на: комментарий от tailgunner 23.03.2011 20:32:03  
OldFatMan

Ну да - если совсем точно - на Guile.

Но не думай, что подловил - больше всё-таки приходится на чистом С, без сборки мусора.

# ()
[#] Ответ на: комментарий от anonymous 23.03.2011 20:07:58  

с чем последний раз столкнулся по пути к выходу из функции выделяется память если дошли до конца функции удалять ее НЕ НАДО если где то по пути выпрыгнули все надо удалить теперь о shared/scoped/array/ptr может я не увидел но как сделать dismiss в конце функции для этих умных указателей я так и ненащел в итоге заюзал LOKI_ON_BLOCK_EXIT

 
ptr = alloc();
ScopeGuard ptrGuard = MakeGuard(dealloc, ptr);
/* много return' ... */ 
ptrGuard.Dismiss();
как вы решаете эту проблему с бустовскиими умными указателями ?

anonymous ()
[#] Ответ на: комментарий от jtootf 23.03.2011 19:48:21  

> что не так?

То, что современные языки без GC это только С и C++.

** ()
[#] Ответ на: комментарий от tailgunner 23.03.2011 20:22:32  
korvin_

archimag и mv давно умерли?

кстати, почему не archimagE?

** ()
[#]  

В основном пишу на языках, где есть сборщик мусора. Как именно он работает, понятия не имею :) Хотя следовало бы… Некогда читал про устройство дотнетовского GC, кое-что помню, на этом мои знания заканчиваются (( При разработке без GC пользуюсь инструкциями из этого документа.

()
[#]  
korvin_

> используете ли языки с GC

CL, Scheme(Racket), Haskell, Go.

не профессионально, скорее для забав и/или примеров. Не вижу смысла ковыряться в памяти для прикладного программирования. да и для системного иногда (Inferno) можно использовать языки с GC, имхо

** ()
[#] Ответ на: комментарий от korvin_ 23.03.2011 20:50:00  

mv, к сожалению, ушел, а archimag занимается вебелью - мне это неинтересно.

***** ()
[#] Ответ на: комментарий от tailgunner 23.03.2011 20:54:46  

Просто ради любопытства, чем "вебель" отличается от всего остального в плане разработки? или ещё в каком плане?

** ()
[#] Ответ на: комментарий от tailgunner 23.03.2011 19:53:38  

>А остались люди, которые не пользуются языками с GC?

Ты не повершиь, не осилил яву и шарп. Пишу только на C/C++.

()
[#] Ответ на: комментарий от gnu-eabi 23.03.2011 21:09:17  
korvin_

> Ты не повершиь, не осилил яву и шарп. Пишу только на C/C++.

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

** ()
[#] Ответ на: комментарий от korvin_ 23.03.2011 21:15:07  

Даже не пытался. Не знаю, зачем она мне.

()
[#] Ответ на: комментарий от korvin_ 23.03.2011 21:15:07  

> не знаю как шарп, но как можно было яву не осилить?

Я несколько раз пытался это сделать, но каждый раз меня неудержимо клонило в сон и в итоге так и хожу безграмотным (

** ()
[#] Ответ на: комментарий от archimag 23.03.2011 21:31:18  
korvin_

> Я несколько раз пытался это сделать, но каждый раз меня неудержимо клонило в сон и в итоге так и хожу безграмотным (

ява скучна, да. но осиливать там особо не чего

** ()
[#]  
nanoo_linux

{auto,shared}_ptr

на яве не пишу, шарп не знаю, лисп не осилил.

# ()
[#] Ответ на: комментарий от korvin_ 23.03.2011 20:53:16  

На Go что-нибудь юзабельное написал? :-)

***** ()
[#]  
sanuda

> используете ли языки с GC, и какими их преимуществами при этом пользуетесь?

Да, конечно.

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

<love5an-mode> ftp://ftp.cs.utexas.edu/pub/garbage/bigsurv.ps </love5an-mode>

Про сборку мусора вообще читал только вот это (если не считать тонны идиотских статей в инфернетах). Ну и конечно же внимательно читал статьи про GC в тех инструментах, которыми пользуюсь. Чтобы хоть примерно представлять, что происходит за кулисами.

()
[#] Ответ на: комментарий от sanuda 23.03.2011 22:10:25  
sanuda

Ах, да, преимущества... Не надо подчищать память руками? Сильно меньше утечек? Не надо опасаться фрагментации кучи? Даже не знаю, чего бы еще скопетанить.

()
[#] Ответ на: комментарий от korvin_ 23.03.2011 20:50:00  

> mv давно умерли?

Ему не понравился произвол модераторов и неспособность их адекватно оценить свои же действия (и действия других модераторов).

anonymous ()
[#] Ответ на: комментарий от aho 23.03.2011 22:25:11  
sanuda

Ну так возьми поправку и проверь.

()
[#] Ответ на: комментарий от aho 23.03.2011 22:25:11  
sanuda

Кстати, последний коммент там: "Even with this, thread unsafe reference counting with smart pointers is still 4× slower than OCaml."

()
[#] Ответ на: комментарий от sanuda 23.03.2011 22:25:53  
aho

> Ну так возьми поправку и проверь

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

()
[#] Ответ на: комментарий от aho 23.03.2011 22:25:11  

> в комментах же написали где он ошибся, он написал, что стало лучше - но ни точных цифр, ни нового кода не показал, фтопку такие бенчмарки

В коментах написали, как *ускорить* решение на С++. Это не ошибки, это оптимизации. И в каждом апдейте есть результаты замеров скорости.

anonymous ()