为什么Ruby on Rails称为特定于域的语言?

pap*_*del 12 dsl ruby-on-rails

最近,当我试图解释为什么Ruby on Rails是我所在组织的实习生的特定领域语言(DSL)时,我无法清楚地表达我想要的效果.也许我不太了解这个空间来教导细微差别.将他重定向到马丁福勒的文章或谷歌排名的一个InfoQ或其他材料也没有多大帮助.

有人可以解释为什么Rails是一个具有示例/并行情况的DSL,对于那些对代码世界来说相当新的人来说,这不是巫毒的东西吗?理解意识形态也可能有助于详细阐述铁路生态系统的复杂性?

Kat*_*one 13

从技术上讲,ruby不是DSL,它只是非常干净地编写内部DSL.这个链接到Martin的Fowler的博客维基应该有助于澄清事情.

Rails被描述为DSL虽然我更准确地认为它是一个很好地利用一些DSL的框架.

编辑:Martin Fowler的DSL书的公开版介绍有一个激励性的例子,虽然它仍然针对程序员更多.

再次编辑:如果您指出ruby允许ruby代码看起来像"voodoo"示例可能很有用

port 2001

respond :resource=>"/hello" do  |request, response|
  response.body = "<message>hello</message>"
end
Run Code Online (Sandbox Code Playgroud)

这比直接调用方法更干净.实现DSL可能需要"voodoo"之类的代码(创建DSL要比使用DSL 困难得多),而且一般来说,编码相对较新的人应首先担心DSL的功能,而不是如何实现.

是什么让ruby擅长内部DSL包括(1)使用块(任何具有干净闭包的语言都具有此优势),(2)不需要括号的方法类,以及(3)能够动态修改类的能力(是什么validates).可能还有更多我没有想过的.


Ada*_*and 5

Ruby是一种可用于创建DSL的语言.Ruby on Rails可以被认为是用于创建Web应用程序的DSL(域特定语言).