27

我想知道是否有一个REPL这是不是语言特定的。我花了很多时间在REPLs中(主要是Clojure,Scala和Haskell)进行操作,捆绑的操作都会使我受到或多或少的影响。这似乎是一个REPL的工作是在相当一般他们:一个REPL来绑定它们全部?

  • 阅读:取用户输入
  • 评估:将输入传递给一些运行时处理
  • 打印:打印结果到屏幕
  • 循环:等待下一次用户输入

我不明白为什么不应该有一些语言无关REPL,但我一直无法找到这样的事情。有些事情我想在我的理想REPL:

  • Linux命令行应用程序
  • 无限的历史,通过向上箭头
  • 能力之前编辑以前的命令访问重新运行
  • CTRL-R的历史搜索like bash has
  • 在一个REPL多个会话,这样我就可以在它们之间轻松切换

而更多乐观

  • 语法高亮,上下文感知代码完成

这是否存在?

+5

所有Emacs REPL模式都建立在comint模式之上,因此它们往往彼此非常相似。当然,他们支持历史和代码完成(在适当的情况下)。 – dfan 2011-04-12 17:58:46

+2

你在这里有相互矛盾的要求:你需要一个REPL,它同时不知道任何有关该语言的内容,但不知怎的,神奇地知道该语言是为了提供代码完成。 – 2011-04-12 23:03:47

+3

我没有看到这些冲突。我想要一个REPL,它向任意数量的后端提供统一的接口。语言意识的东西必须是可插拔的,就这些。 – 2011-04-13 13:59:04

回答

31

Bash并不知道C-r的任何信息:它使用readline,它和上箭头历史一样。这听起来像你正在寻找的REPL是readline?只要在你想要的命令前面加上你想要的类似REPL的行为(如果你没有它就安装它 - 这很好),你应该很好。

$ rlwrap java -jar clojure.jar 
+0

确定这适用于clj repl,但由于某种原因,在scala repl中不给我ctrl-r。看起来ghci已经使用readline,所以这很好。编辑:实际上这使得clojure repl有一个*巨大的差异 - 谢谢! – 2011-04-12 19:19:52

+0

rlwrap的+1:我开始使用它来学习clojure,它使它更有趣 – 2011-04-12 20:42:14

+0

这似乎回答ctrl-r位而不是REPL位。您只是将readline添加到已经具有repl功能的命令中。 – 2016-01-25 22:21:03

5

Scala 2.9 REPL将有CTRL-R反向搜索支持。每晚的建筑已经有了。已经有一段时间了上下文感知标签的完成(虽然可以改进)。

当使用阶与rlwrap,使用-Xnojline标志:

rlwrap scala -Xnojline 

防止的JLine从与rlwrap干扰。然后rlwrap可以自由使用readline来实现光标运动和历史记录,但是在解释器看到该行之前,您将不会有语言意识完成

我希望Scala REPL会得到改进。

  • 有一个演示编译器是2.9的一部分,我认为这是用于突出显示错误和完成的东西。
  • scala使用的jline 2。9能够利用ansi颜色利用jansi

所以我可以梦想有一天我会在Scala REPL中拥有IDE级别的功能。实际上,这需要付出很大的努力,添加这些功能肯定比提高对实例的Eclipse支持的优先级要低......除此之外,在eclipse中添加REPL支持可能更有意义。

+0

这似乎回答ctrl-r位,但不是REPL位。您只是将readline添加到已经具有repl功能的命令中。 – 2016-01-25 22:21:15

2

虽然不是严格意义上一个REPL,Seco提供了笔记本式的外壳,可以用任何语言与JSR-223绑定表达式求值。这rapidly growing list包括Javascript,Scheme,Python,Ruby,Clojure,Groovy和Prolog等语言。

山高的灵感,Mathematica笔记本前端,原则上可以评估任何语言的表达式,尽管它需要some work来实现这一点。