2011-04-30 71 views
11

我將爲JVM創建一個內部DSL。我發現Scala和Groovy是這項任務的最佳人選。我發現Groovy腳本不太詳細,默認情況下使用BigDecimal,而Scala具有良好的類型推斷系統。這些語言在內部DSL環境中還有什麼其他差異?Groovy vs Scala的內部DSL

編輯:最後我挑的Groovy和DSL的發展一年後它似乎是正確的選擇:我可以從類型推斷和靜態類型在Groovy 2.0中獲益,仍然需要,方法時,使用動態類型/ properties dispatch handlers work great,ASTTransforation允許我改變語言語義,eclipse的groovy插件和IDEA對Groovy DSL提供了開箱即用的支持,並且DSL語法比在Scala中更加簡潔。雖然仍有一些改進的餘地,但一些動態功能並不總能按我的預期工作。

+7

Groovy和Scala是完全不同的東西 - 除了類型推理之外,Scala實際上有類型,而Groovy是一種動態腳本語言。這可能會幫助您瞭解DSL的應用和目標。一般來說,儘管如此,我會說幾乎所有的大型應用程序都使用Scala而不是Groovy。 – Janx 2011-04-30 04:10:51

+4

你可以看[採訪Debasish Ghosh](http://www.infoq.com/interviews/ghosh-dsls)。它可以對你有所幫助。您也可能對他的書[DSLs in Action]感興趣(http://www.manning.com/ghosh/)。 – tenshi 2011-04-30 14:12:50

+0

@簡單的感謝,這是相當有幫助 – Nutel 2011-05-01 18:22:20

回答

5

我對Scala中的DSL沒有經驗,但我可以說Groovy通過元對象協議的動態特性使其非常適合DSL。我發現this series在Groovy中檢查DSL時很有用。您可能還想看看Martin Fowler's page,其中包含有關該主題的書的鏈接。

3

很多Groovy DSL goodness被添加到1.8中。

Groovy是一個很好的開始。

看看Gradle。這是用Groovy編寫的構建工具,構建語言是DSL。

5

我一直在研究DSL測試斯卡拉。我認爲你最終會在Scala中編寫更多的解釋代碼(類型轉換等),但是一旦你有沒有理由說你的DSL應該或多或少是冗長的。回報是(一旦IDE趕上),你將有代碼完成來幫助你寫Scala DSL。

斯卡拉模式匹配在編寫解釋代碼方面也是一個巨大的勝利。

+1

真的,這個答案後18個月隨機downvote? WTF在這個地方繼續? – 2012-12-10 12:23:17

+0

另一個。 SO曾經是一個不錯的地方 – 2013-08-18 20:48:49

+0

你爲什麼選擇一個內部的DSL over'external'('parser combinators')? [出於好奇而不是分歧] – 2014-01-14 01:39:32