Когда происходит утечка памяти lexical-let в Emacs Lisp?

Я читал о лексической утечке памяти, например здесь: Есть ли проблемы с lexical-let или другими cl-макросами ??? - Список пользователей текстового редактора GNU Emacs - ArchiveOrange

Он говорит:

«Обратите внимание, что переменные, связанные с lexical-let, никогда не освобождаются, даже если они никогда не используются. Попробуйте

 (цикл для i от 1 до 100000 collect (lexical-let ((x i)) '()))

и наблюдайте, как он пожирает память ».

Но я думаю, что этот код пожирает память только потому, что список, составленный циклом, растет. Итак, я написал несколько кодов elisp, чтобы проверить, когда это происходит, но я не смог найти пример утечки.

Вот так со временем увеличивается объем памяти, когда я выполняю приведенный ниже код.

lambda-in-let.el

(require 'cl)

(defvar num-loop-1 30)
(defvar num-loop-2 100000)

(loop for i from 1 to num-loop-1 do
      (loop for j from 1 to num-loop-2 collect
            (lexical-let ((x `(,i ,j))) (lambda () x))))

Похоже, утечки нет.

См. Другие примеры здесь: https://gist.github.com/1703325

ДОБАВЛЕНО: Так первый пример пожирает память. Как я уже сказал, я думаю, что это артефакт.

lambda-in-let.el

12
задан Community 8 February 2017 в 14:34
поделиться