dsl eclipse-emf xtext mps

dsl - ¿Cuáles son las principales diferencias entre Jetbrains ''MPS y Eclipse Xtext?



eclipse-emf (3)

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.

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ía bastante incómodo con el marco EMF subyacente con todo integrado en campos estáticos.

Últimamente encontré el MPS de Jetbrains (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 ha experimentado 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.


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.


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 lenguajes 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 te están encerrando de alguna manera 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 esto a tu pregunta? Trataré de darle respuestas más precisas si tiene preguntas más detalladas.