Журнал Системный Администратор, Февраль 2006

Журнал Системный Администратор

Февраль 2006

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке


Замыкания в Perl

Алексей Мичурин

Замыкания являются одной из тех особенностей Perl, которые редко встретишь в других языках программирования. Да и программисты на Perl зачастую не вдаются в такие дебри. Напрасно. Вы можете не иметь прав и автомобиля, не желать стоять в пробках, но правила дорожного движения должен знать каждый. Точно так же, даже если вы не используете замыканий, знать о них весьма полезно.

Суть замыканий

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

Почему же память освобождается не сразу после исчезновения переменной? Чтобы ответить на этот вопрос, надо сказать пару слов о системе сборки мусора, которой оснащён Perl. Он автоматически освобождает фрагменты памяти, на которые нет ссылок. Переменная может исчезнуть, но ссылка может остаться, тогда Perl не освободит память до тех пор, пока не исчезнет последняя ссылка.

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

Perl устроен иначе. В нём не может существовать неправильной ссылки, но за это приходится платить неосвобождённой памятью.

Оставшая часть статьи доступна только подписчикам. Если вы желаете продолжить чтение этой статьи, то вам необходимо подписаться на эту статью или весь номер.

Подписаться на весь номер

Зарегистриванные пользователи, пожалуйста следуйте по этой ссылке