一个REPL绑定他们所有?

时间:2011-04-12 17:51:51

标签: language-agnostic scala haskell clojure read-eval-print-loop

我想知道是否有REPL不是特定于语言的。我花了很多时间浸泡在REPL中(主要用于Clojure,Scala和Haskell),捆绑的那些都或多或少地让我感到沮丧。似乎REPL的工作非常通用:

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

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

  • Linux命令行应用程序
  • 通过向上箭头可以访问的无限历史记录
  • 能够在重新运行之前编辑以前的命令
  • ctrl-r用于历史搜索like bash has
  • 一个REPL中的多个会话,因此我可以轻松地在它们之间切换

更乐观

  • 语法突出显示,上下文感知代码完成

这是否存在?

3 个答案:

答案 0 :(得分:31)

Bash对C-r一无所知:它使用了readline,它使用了readline,以及向上箭头历史记录。听起来你正在寻找的REPL是readline吗?只需在rlwrap中输入你想要类似REPL的行为的命令(如果你没有它就安装它 - 它很棒),你应该好好去。

$ rlwrap java -jar clojure.jar

答案 1 :(得分:5)

Scala 2.9 REPL将具有CTRL-R反向搜索支持。夜间建筑已经有了。一段时间内已经有了情境感知标签完成(尽管可以改进)。

将scala与rlwrap一起使用时,请使用 -Xnojline 标记:

rlwrap scala -Xnojline

这可以防止jline干扰rlwrap。然后rlwrap可以自由地使用readline来实现光标运动和历史记录,但这是在解释器看到该行之前,你将不会有语言感知完成

我希望Scala REPL能够得到改进。

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

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

答案 2 :(得分:2)

虽然严格来说不是REPL,Seco提供了一个笔记本风格的shell,可以使用JSR-223绑定来评估任何语言的表达式。这个rapidly growing list包括Javascript,Scheme,Python,Ruby,Clojure,Groovy和Prolog等语言。

Seco的灵感,即Mathematica笔记本前端,原则上可以用任何语言评估表达式,尽管some work需要这样做才能实现。