2010-04-08 18 views
43

He usado Eclipse Xtext en varios proyectos. Me encantó la facilidad de definir una gramática sobre un modelo Ecore (meta) y dejar que todo se generara para ti, incluido el impresionante editor de plugins de Eclipse, pero me sentí bastante incómodo con el subyacente EMF framework con todo cableado en campos estáticos.¿Cuáles son las principales diferencias entre Jetbrains 'MPS y Eclipse Xtext?

Últimamente me encontré con Jetbrains 'MPS (Meta Programming System). Está basado en una filosofía completamente diferente. Mientras que Xtext es para crear DSL basadas en texto que generan un analizador para usted (y crear instancias de esos EObjects), en el lenguaje creado por MPS uno edita directamente la estructura del modelo subyacente. Hasta ahora lo entiendo.

Alguien tiene experiencia con ambas herramientas DSL para señalar las principales diferencias en términos de trabajar con ellos, casos de uso previstos y audiencia, complejidad, curva de aprendizaje (para ser honesto, para empezar a usar Xtext uno debe saber bastante sobre las tripas de EMF), generación de código, etc.

Respuesta

49

Xtext es un enfoque tradicional basado en el analizador que funciona con archivos de texto normales. Esos pueden ser enviados por correo, almacenados y comparados con cualquier sistema de control de versiones e incluso modificados fuera del editor usando su herramienta de línea de comando favorita. Se integra firmemente en Eclipse EMF y funciona bastante bien con un montón de herramientas que puedes encontrar en el ecosistema Eclipse. Recientemente, evolucionó (y todavía lo está haciendo) en un tipo de "kit de herramientas de desarrollo de lenguaje de programación" donde le permite soportar todo tipo de herramientas adicionales.

MPS en el otro lado funciona con un editor basado en proyecciones que simplemente "parece" texto mientras trabaja en el entorno. El formato de almacenamiento subyacente es específico de la herramienta (léase: inutilizable sin programas especiales) y no analiza los archivos de texto sin formato. Esto ofrece algunas grandes ventajas, como la incorporación de idiomas arbitrarios (por ejemplo, Regex dentro de SQL dentro de Java). El toolchain permite la generación en forma de modelo para modelar transformaciones que, como el editor, se sienten inusuales al principio pero también son poderosas.

Ambas herramientas de alguna manera te están bloqueando en su mundo (MPS/Eclipse). Aunque podría ejecutar ambos en un modo sin cabeza, no se puede iniciar fácilmente el editor de Xtext dentro de otro IDE. Lo mismo es cierto para MPS. Yo diría que Xtext es "más abierto", ya que funciona con archivos de texto comunes por un lado y funciona bien con herramientas establecidas (EMF y Eclipse en general) por otro lado.

¿Responde a esta pregunta? Trataré de darle respuestas más precisas si tiene preguntas más detalladas.

+0

Gracias, Heiko, ahora tengo una idea mejor :) Obtuve el material basado en texto basado en la proyección v y sus consecuencias en el control de versiones, diff, etc. Lo que me gustaría saber más es las diferencias en el "uso típico" de las herramientas y en sus cadenas de herramientas. Con Xtext, obtengo un código Java de lotta generado a partir del modelo Ecore subyacente que puedo usar de forma instantánea en cualquier programa Java. Lo que me asustó al leer el tutorial oficial de MPS fue el material de la plantilla de generación de código que se llevó una buena parte. ¿Puedo atravesar de algún modo el modelo creado a partir de lo que escribo en mi idioma ... fácilmente como con EMF? –

+2

En realidad, las personas detrás de Xtext están haciendo un gran esfuerzo para hacer posible el uso de lenguajes Xtext en otros entornos además de Eclipse, por ejemplo editores web mediante el proyecto Orion, y soporte para IntelliJ IDEA. Puede leer más sobre esto en https://eclipse.org/Xtext/news.html –

+2

Todo esto es cierto, sin embargo, MPS admite el almacenamiento personalizado. Si bien de forma predeterminada guarda el archivo en su propio formato (basado en XML), puede proporcionar una serialización/desinstalación personalizada. –

16

La idea principal de MPS no es utilizar un editor de proyección en lugar de uno basado en texto. Es la comparabilidad del lenguaje. Por ejemplo, puede extender Java con tuplas, y otra persona podría extender Java con llamadas a métodos asíncronos. En herramientas basadas en texto (como XText), es imposible garantizar que dos extensiones funcionen bien juntas, ya que la gramática resultante puede ser ambigua. MPS lo hace posible. Simplemente agrega lenguaje a su proyecto como si agregara bibliotecas.

14

En mi opinión, MPS de Jetbrain es más fácil de aprender al principio. No necesita trabajar con archivos de configuración como Workflow-Files en xtext.

Una diferencia principal es que en MPS edita el modelo directamente y este modelo se le muestra en una vista de sintaxis/editor. En xtext edita la sintaxis y el modelo se genera/analiza.

En mi opinión, MPS es más poderoso. Puede combinar idiomas mucho más fácilmente y ampliarlos. Una gran ventaja de los editores de proyección es que puede ocultar información o mostrar información adicional recuperada del modelo. También puede usar diferentes vistas como tablas o gráficos (que vienen en MPS 2.1).

El control de versiones se puede hacer con MPS. Hay una herramienta merge/diff que funciona en el árbol-modelo.

Cuestiones relacionadas