|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Valentin Nechayev 2:5020/400 06 Jun 2005 22:39:44 To : Andrey Sapozhnikov Subject : Re: garbage collector -------------------------------------------------------------------------------- >>> Andrey Sapozhnikov wrote: AS> Так вот, если опустить опусы про Lua и про то, где обратные AS> ссылки не ведутся - давайте поговорим о том, где они ведутся. AS> А ведутся они (внимание сюда, сейчас из шляпы появится кролик!) - AS> в Перле. Есть такая структура данных в языке Перл которая AS> называется weak reference, изнутри она видна как SV с AS> флажками SVf_ROK и SVprv_WEAKREF. Так вот она хранит список AS> всех, кто ссылается на объект. Hо поскольку я не знаком, AS> с технологией сбоки мусора, то будем считать, что данной AS> структуры не бывает. И Перла тоже, наверное... Hамеренно не используя другие источники... Вы в предыдущем письме писали: === cut === AS> Да и SV (и его AS> наследники - AV, HV, GV,...) не хранят список ссылок на себя, а лишь AS> счетчик. Ссылка появляется - она увеличивает счетчик в переменной на AS> которую ссылается, ссылка дохнет - уменьшается счетчик. Как счетчик AS> доходит до нуля - объект становится кандидатом на зачистку. === end cut === Из этого чётко и однозначно следует, что для типичного применения никаких обратных ссылок не ведётся. То, что в случае weak reference что-то ведётся - случай значительно более частный. >> Суммируя, чтобы такое работало кто-то должен написать полный >> сборщик мусора. В этом нет ничего невозможного, есть лишь текущая >> ненужность для типичных применений :) AS> А вот теперь поговорим о том, что же делать с внешними библиотеками. AS> Перл вовсю использует libc, не говоря уже разновсяческих AS> libssl, libzlib, libMagick, libjpeg и тысяче других. И все они AS> знать не знают ни о Перле и о замечательных технологиях сборки AS> мусора которые можно внедрить. И вот, эти глупые несчастные AS> библиотеки просят память у глупой libc через глупый вызов malloc, AS> и libc по глупости своей им кусочек памяти отдает. В конце. Потому AS> как в начале все занято нашим умным сборщиком мусора. И с тех пор AS> мы не вправе сдвинуть границу сегмента данных назад, потому AS> как глупые объекты глупых библиотек не догадываются о том, что AS> мы умеем перемещать всех и вся... И что с того? Сборкой мусора можно собрать перловые объекты, которых в типичной программе значительно больше, чем занятого другими библиотеками. И ничто не мешает кроме стандартного malloc (или даже своей замены стандартного malloc) использовать собственную арену, на которой и производить выделение памяти для своих данных. Слава богу, платформы без mmap() или её полного аналога сейчас вымерли. -netch- --- ifmail v.2.15dev5.3 * Origin: Dark side of coredump (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/22383cb6b248b.html, оценка из 5, голосов 10
|