如何停止对大型REPL结果的评估,以避免使用Swank Clojure时Slime变慢?

14
每当我评估一个需要在repl中打印大型数据结构的大值时,slime就会变得非常缓慢。随后在repl中键入任何内容都会显示延迟,并且所有clojure代码的进一步评估也会变得缓慢。唯一有效的方法似乎是重新启动repl,但这似乎不是解决方案。
一个简单的大型数据结构示例是读取文件然后将其打印出来(即使这可能是一个相当小的文件)。
这似乎在Win7和Ubuntu中都发生。
如果有任何关于如何停止这种情况以及为什么会发生的想法,将不胜感激!

有趣的是,我在Windows上使用ClojureBlox时观察到了相同的行为,并且一直在期待一种在执行时中断的方法。这里是重现代码:https://gist.github.com/1454300 - 处理《低俗小说》的剧本。 - noahlz
2个回答

8
当我遇到这个问题时(这经常发生),我只需清除repl缓冲区。您可以使用C-c M-o或在“REPL”菜单项下使用“Clear Buffer”来完成此操作。这不会重新启动repl,并且命令历史记录等内容也不受影响。

它能够运行的原因是这不是一个repl问题,而是Emacs缓冲区大小的问题。Emacs处理过大的缓冲区时表现并不理想。 - vedang
在你提到这个问题后,我进行了检查,你是对的,一种更少的历史记录清除技巧是C-c C-o,它只会刷新最后一个条目... 我会再等一段时间来看看是否有人真正有好的理由或解决方法。我无法想象“Emacs无法处理大量文本”是一个好的文本编辑器的借口... - toofarsideways
1
Emacs可以处理非常大的文件,但repl缓冲区不支持文件备份,因此像memmap这样的技术无法使用。无论如何,请考虑将“emacs”标签添加到此问题中。 - ivant
你的建议是让REPL被保存吗?这样它就会作为一个文件被备份了? - toofarsideways
1
@toofarsideways 不,我只是在指出 Emacs 可以处理“大量文本”的主要情况,即编辑大文件。 - ivant
@toofarsideways 我应该稍微详细解释一下,但我匆忙地输入了我的评论。Ivant是对的,这不是关于大文件,而是关于没有被文件支持的大缓冲区。 - vedang

3

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