在我的Clojure repl中,Slime抛出了一个“变量绑定深度超过max-specpdl-size”的错误。

3
我的Clojure REPL开始抛出“变量绑定深度超过max-specpdl-size”错误,我被扔进了调试器。
我目前通过clojure-jack-in访问slime,并在一个合理大小的数据集上执行reduce操作。一些谷歌搜索让我相信这个错误是因为我生成了太多的临时变量,具体来说是:
用户选项:max-specpdl-size 此变量定义了允许 Emacs 在发出错误(使用数据“Variable binding depth exceeds max-specpdl-size”)之前允许的局部变量绑定和解除保护清理(请参阅从非本地退出清理)的总数限制。 此限制及其关联的错误超过了无法定义函数的无限递归的一种方式。max-lisp-eval-depth提供了另一个嵌套深度的限制。请参见Eval。 默认值为1000。如果剩余空间很少,则进入Lisp调试器会增加该值,以确保调试器本身有足够的空间来执行。 在此处找到 我对调试Clojure-Swank/Slime没有太多经验,希望有人能帮忙。
编辑: 我正在使用Emacs 24和Clojure 1.3.0的Clojure-mode 1.11.4,我没有安装Swank-Clojure,我正在使用通过Clojure-jack-in捆绑在Clojure-mode中的那个。

我认为在解析您的REPL语句输出时出现了问题。您使用的clojure-mode、swank-clojure、emacs、clojure版本是什么 - 您是否已经更新了所有版本?您能否在SLIME REPL上可靠地重现该问题?您要评估的clojure表达式是什么? - Joost Diepenmaat
这是哪个版本的swank-clojure?我知道你说你没有安装它,但是为了让clojure-jack-in工作,你必须在lein方面安装它。 - Tavis Rudd
关于我正在使用的插件,我不确定如何让Swank显示它的版本。我已经安装了swank-clojure 1.3.21.3.3-SNAPSHOT两个版本。 - toofarsideways
在我的计算机上,输入随机、语法不正确的字符会触发此错误。因此,删除多余的标记(如果有的话)可能会解决这个问题。 - deprecated
1个回答

0

以防有人正在寻找这个问题的可能答案...

正如所述,此错误确实意味着存在问题,但并非总是如此。在具有大型数据结构或使用某些emacs功能(例如defadvice)导致深度绑定等情况下,您可以合法地超出默认深度设置。您可以增加深度并查看是否有帮助(例如将其加倍),但在这种情况下可能会出现错误。

swank-clojure的一个问题是它与旧版本的slime紧密耦合在一起。这意味着slime中的改进和错误修复不可用。由于这种紧密绑定,Clojure社区已经开始使用cider而不是slime和swank-clojure了。我强烈建议您转换为使用cider而不是slime和swank-clojure。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接