рекурсивная ссылка в Perl - PullRequest
4 голосов
/ 23 июня 2011
$a=\$a;

Книга, которую я читаю, говорит в этом случае $a НИКОГДА не будет бесплатной, мой вопрос: почему интерпретатор Perl не исправляет это во время компиляции? Когда он обнаруживает, что указывает на себя, не увеличивайте refcount.

Почему Perl этого не делает?

1 Ответ

6 голосов
/ 23 июня 2011

Некоторые сборщики мусора имеют цикл обнаружения;Perl, по причинам производительности и историческим причинам, этого не делает.Если вам нужна ссылка, которая не влияет на счетчик ссылок, вы можете использовать Scalar::Util::weaken для получения слабой ссылки, что устраняет необходимость в обнаружении циклов в большинстве ситуаций, когда вам нужно полагаться на него.В интерпретаторе должно быть встроено обнаружение циклов, чтобы автоматически определяло, является ли \$a слабой или сильной ссылкой, поэтому вам просто нужно сделать это явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...