Slime выбрасывает «Переменная глубина привязки превышает max-specpdl-size» в моем репозитории Clojure - PullRequest
3 голосов
/ 14 декабря 2011

Мой репозиторий clojure начал выдавать ошибку «Переменная глубина привязки превышает max-specpdl-size», и меня выбросили в отладчик.

В настоящее время я получаю доступ к слизи с помощью clojure-jack-in и выполняю сокращение для набора данных разумного размера. Небольшое прибегание к гуглу заставляет меня поверить, что ошибка в том, что я генерирую слишком много временных переменных, а именно:

Опция пользователя: max-specpdl-size

Эта переменная определяет ограничение общего числа привязок локальных переменных и очисток для защиты от намотки (см. Очистка от нелокальных выходов), которые разрешены до того, как Emacs выдаст ошибку (с данными "Глубина привязки переменной превышает max-specpdl-size «).

Этот предел с соответствующей ошибкой при его превышении является одним из способов, с помощью которых Lisp избегает бесконечной рекурсии для плохо определенной функции. max-lisp-eval-глубина обеспечивает еще одно ограничение на глубину вложенности. См. Eval.

Значением по умолчанию является 1000. Вход в отладчик Lisp увеличивает значение, если осталось мало места, чтобы убедиться, что у самого отладчика есть место для выполнения. найдено здесь .

У меня мало опыта в отладке clojure-swank / slime, поэтому я надеюсь, что кто-то может помочь.

EDIT: Я использую clojure-mode 1.11.4 с emacs 24 и clojure 1.3.0, я не установил swank-clojure, я использую тот, который поставляется в комплекте с clojure-mode через clojure-jack-in, как я объяснил ранее.

1 Ответ

0 голосов
/ 11 октября 2015

На всякий случай, если кто-то ищет возможный ответ на этот вопрос ....

Эта ошибка, как указано, часто означает проблему, но не всегда. Вы можете на законных основаниях превысить значение глубины по умолчанию в ситуациях, когда у вас большие структуры данных или когда вы используете некоторые функции emacs, такие как defadvice, что может привести к глубоким привязкам и т. Д. удвоить его), но в этом случае это, вероятно, ошибка.

Одна из проблем с swank-clojure заключается в том, что он тесно связан со старой версией слизи. Это означает, что улучшения и исправления ошибок в слизи недоступны. Именно из-за этого тесного связывания сообщество coljure перешло от использования слизи к использованию сидра, и я настоятельно рекомендую переключиться на использование сидра, а не слизи и swank-clojure.

...