2011-04-30 10 views
11

Voy a crear una DSL interna para JVM. Y veo que Scala y Groovy son los mejores candidatos para esta tarea. Descubrí que Groovy Script es menos detallado, utiliza BigDecimal de forma predeterminada, mientras que Scala tiene un buen sistema de inferencia de tipo. ¿Cuáles son otras diferencias entre estos lenguajes en el contexto de DSL interno?Groovy vs Scala para DSL interno

EDIT: Por último, me recogió maravilloso y después de un año de desarrollo del DSL que parece ser la elección correcta: Puedo beneficiarse de la inferencia de tipos y tipos estáticos en Groovy 2.0 y seguir utilizando los tipos dinámicos cuando sea necesario, métodos/los manejadores de despacho de propiedades funcionan muy bien, ASTTransforation me permitió cambiar la semántica del lenguaje, el plugin groovy para eclipse e IDEA tiene soporte para DSLs de Groovy, y la sintaxis de DSL es más concisa de lo que sería en Scala. Aunque todavía hay margen de mejora ya que algunas características dinámicas no siempre funcionaron como esperaba.

+7

Groovy y Scala son cosas muy diferentes: más allá de la inferencia tipográfica, Scala en realidad tiene tipos, mientras que Groovy es un lenguaje de scripting dinámico. Probablemente sea de gran ayuda saber cuál es la aplicación y los objetivos para su DSL. En general, sin embargo, diría que use Scala sobre Groovy para casi cualquier aplicación de gran tamaño. – Janx

+4

Puede ver [entrevista con Debasish Ghosh] (http://www.infoq.com/interviews/ghosh-dsls). Puede ser útil para ti También puede estar interesado en su libro [DSL en acción] (http://www.manning.com/ghosh/). – tenshi

+0

@Easy gracias, fue bastante útil – Nutel

Respuesta

5

No tengo experiencia con DSL en Scala, pero puedo decir que la naturaleza dinámica de Groovy a través del protocolo de objeto meta lo hace adecuado para DSL. Encontré this series para ser útil al examinar DSL en Groovy. Probablemente también quiera echar un vistazo al Martin Fowler's page, que incluye un enlace a su libro sobre el tema.

3

Se ha añadido un lote de Groovy DSL goodness en 1.8.

Groovy es un buen lugar para comenzar.

Eche un vistazo a Gradle. Esa es una herramienta de compilación escrita en Groovy y el lenguaje de compilación es un DSL.

5

He estado trabajando en una DSL para probar en Scala. Creo que terminarías escribiendo más código de interpretación en Scala (conversiones de tipo, etc.), pero una vez que lo tienes, no hay ninguna razón para que tu DSL sea más o menos detallada. La recompensa es que (una vez que los IDEs se pongan al día) tendrá que completar el código para ayudar a escribir en su DSL de Scala.

La coincidencia de patrón Scala es también una gran victoria al escribir el código de interpretación.

+1

¿De verdad, un voto negativo al azar 18 meses después de esta respuesta? WTF está sucediendo en este lugar? –

+0

Y otro. SO solía ser un buen lugar –

+0

¿Por qué eligió un DSL 'interno' más' externo' ('analizadores de analizador')? [Preguntar por curiosidad, no desacuerdo] –