为什么REPL风格的开发在Ruby中不常见?

时间:2011-02-02 20:39:41

标签: ruby clojure lisp read-eval-print-loop

看起来Lisp和Clojure程序员经常直接在REPL中开发程序。比照Clojure Development: IDE or REPL?

我的问题是,为什么这种方法在Ruby中更常见,通过irb?这只是一种文化差异,还是存在结构(语言特定)原因,为什么以LisL为中心的开发在Lisps中比使用Ruby和Python等语言更常见?

7 个答案:

答案 0 :(得分:8)

Lisp语法似乎非常适合组合REPL和源文件方法。当每个表单的文本限制都清楚时,以编程方式移动代码片段要容易得多。

答案 1 :(得分:2)

我将Emacs用于Clojure和Ruby,并且经常将我的ruby模块加载到irb中,并以与REPL相同的方式在emacs中以交互方式播放。

答案 2 :(得分:1)

我认为很多这是由于Rubyists倾向于使用的编辑。我使用vim,它没有很好的方式与REPL交互。 Textmate在同一条船上(AFAIK)。另一方面,Emacs,Dr。Racket等都有一个很好的机制来与REPL交互。我相信Lispers会倾向于使用那些类型的编辑器/环境。

答案 3 :(得分:1)

也许这些会有所帮助:

  • interactive_editor是一个IRB扩展,增加了打开vim,emacs,MacVim,nano和TextMate的功能,并可以编辑irb缓冲区。
  • irbtools包括interactive_editor以及其他一些不错的补充。
  • Utility Belt是IRB gems的另一个集合,扩展了它的功能,还包括允许编辑缓冲区的东西。

我老了,所以我通常打开一个编辑器,并在终端窗口运行;你知道,老习惯会变得很难受。我确实使用了irbtools,但是打算切换到Utility Belt来看看它的感觉。

答案 4 :(得分:0)

实际上 是我开发Ruby的方式。

通常我会编写我的代码,然后将其部分粘贴到irb中,调整它们,再粘贴它们等等。

在Lisps中是否有办法打印出你在程序中开发REPL风格的“当前状态”?我认为红宝石不可能。

答案 5 :(得分:0)

通常运行单元测试比通过Ruby等效于REPL键入内容更省力。然后,有时我必须在代码中添加一些printf调试...

答案 6 :(得分:0)

我不是Ruby开发人员。但我觉得原因是参考透明度。

大多数惯用的Clojure函数都是遵循引用透明性的纯函数。因此,我个人觉得测试独立独立单元的功能要容易得多,它们有点提供单元测试的目的。 Clojure是一种高度自以为是的语言,他认为大多数函数都是无状态的。它明确区分了副作用发生的代码,以及使用varrefsagentsatoms等其他各种替代方案维护状态,保持多数您的代码清洁,副作用免费且参考透明。

我认为任何围绕引用透明和无状态函数构建的代码都会自动使其受益于REPL,无论是Ruby还是其他任何编程语言。

虽然对于大多数实际目的而言,其他语言提供的CLI同样有用,但是Read, Eval, Print and Loop的概念在LISP中与在任何其他语言中的概念不同。任何non-homoiconic语言都没有READ阶段,它只是读取文本表示或字符串,但在LISP中,READ阶段实际上能够以任何形式{解析{1}}你扔掉它。有关它的更多详细信息,请参阅以下2个答案:

Is Lisp the only language with REPL?

How is Lisp's read-eval-print loop different than Python's?