LINUX.ORG.RU

[@] GC


1

2

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

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

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

★★★★★

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

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

gizzka ★★
()

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

aptyp ★★★★
()

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

vurdalak ★★★★★
()

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

Да, для себя

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

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

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

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

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

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

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

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

Нет

yoghurt ★★★★★
()

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

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

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

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

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

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

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

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

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

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

tailgunner ★★★★★
()

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

tensai_cirno ★★★★★
()

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

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

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. А там, где ресурсы/требования не позволяют задействовать автоматическую или полуавтоматическую сборку мусора, правит балом Си/Си++ с ручным управлением памятью.

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

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

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

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

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

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

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

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

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

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

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

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

anonymous
()

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

Apple-ch ★★
()

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

CL, Scheme(Racket), Haskell, Go.

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

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

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

archimag ★★★
()
Ответ на: комментарий от gnu-eabi

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

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

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

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

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

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

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

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

korvin_ ★★★★★
()

{auto,shared}_ptr

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

nanoo_linux
()

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

Да, конечно.

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

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

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

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

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

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

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

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

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

> На правах баяна и вброса: http://flyingfrogblog.blogspot.com/2011/01/boosts-sharedptr-up-to-10-slower-t...

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

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

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

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

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

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

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

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

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

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