Slime бросает переменную, глубина привязки превышает max-specpdl-size в моей реплике Clojure

Мой clojure repl начал выдавать ошибку «Глубина привязки переменной превышает максимальный размер спецификации», и меня бросили в отладчик.

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

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

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

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

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

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

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


person toofarsideways    schedule 14.12.2011    source источник
comment
Я ожидаю, что где-то возникнет проблема при анализе вывода вашего оператора REPL. Какие версии clojure-mode, swank-clojure, emacs, clojure вы используете? Обо всех ли вы знаете? Можете ли вы надежно воспроизвести проблему на SLIME REPL? Какое выражение clojure вы пытаетесь оценить?   -  person Joost Diepenmaat    schedule 14.12.2011
comment
С какой версией swank-clojure это работает? Я знаю, вы говорите, что не устанавливали его, но для работы clojure-jack-in у вас должна быть основная часть вещей.   -  person Tavis Rudd    schedule 28.01.2012
comment
Что касается плагинов, которые я использую, я не знаю, как заставить swank сказать, какая это версия, у меня установлены swank-clojure 1.3.2 и 1.3.3-SNAPSHOT.   -  person toofarsideways    schedule 28.01.2012
comment
Ввод случайных, синтаксически неправильных символов вызывает эту ошибку на моем компьютере. Таким образом, удаление ложных токенов (если они есть) может решить проблему.   -  person deprecated    schedule 05.04.2012


Ответы (1)


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

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

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

person Tim X    schedule 11.10.2015