28

我想知道是否存在非特定语言的REPL 。我花了很多时间研究 REPL(主要用于 Clojure、Scala 和 Haskell),而捆绑的那些都或多或少地让我感到沮丧。看起来 REPL 的工作非常通用,因为它们:

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

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

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

而且更乐观

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

这存在吗?

4

3 回答 3

33

Bash 对此一无所知C-r:它使用 readline 来执行此操作,以及向上箭头的历史记录。听起来您正在寻找的 REPL 是 readline?只需使用 rlwrap 为您想要类似 REPL 的行为的命令添加前缀(如果没有,请安装它 - 这很棒),您应该很高兴。

$ rlwrap java -jar clojure.jar
于 2011-04-12T18:12:00.777 回答
5

Scala 2.9 REPL 将支持 CTRL-R 反向搜索。nightly builds 已经有了。上下文感知选项卡完成已经有一段时间了(尽管可以改进)。

当使用 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 支持可能更有意义。

于 2011-04-13T03:37:37.580 回答
2

虽然严格来说不是 REPL,但山高提供了一个笔记本式外壳,可以使用JSR-223绑定评估任何语言的表达式。这个快速增长的列表包括 Javascript、Scheme、Python、Ruby、Clojure、Groovy 和 Prolog 等语言。

山高的灵感,Mathematica笔记本前端,原则上可以评估任何语言的表达式,尽管要做到这一点需要一些工作

于 2011-04-14T05:12:03.877 回答