Pergunta

Eu tenho usado Eclipse xText em vários projetos. Adorei a facilidade de definir uma gramática sobre um modelo Ecore (Meta) e deixando tudo gerado para você, incluindo incrível editor de plug -in do Eclipse, mas fiquei bastante desconfortável com o subjacente Estrutura EMF com tudo com fio em campos estáticos.

Ultimamente eu me deparei com jetbrains ' MPS (Sistema de Meta Programação). É baseado em filosofia completamente diferente. Enquanto o XText é para criar DSLs baseados em texto, gerando um analisador para você (e instanciando esses eoBjects), na linguagem criada por MPS One Edita diretamente subjacente à estrutura do modelo. Até agora eu entendi.

Tem alguém experimentado com as duas ferramentas DSL para apontar as principais diferenças em termos de trabalho com eles, casos de uso pretendido e público, complexidade, curva de aprendizado (para ser honesto, para começar a usar o Xtext One deve saber bastante sobre as entranhas da EMF) , geração de código etc?

Foi útil?

Solução

O XText é uma abordagem tradicional baseada em analisador que funciona com arquivos textuais comuns. Eles podem ser enviados por correio, armazenados e comparados com qualquer sistema de controle de versão e até modificado fora do editor usando sua ferramenta de linha de comando favorita. Ele se integra firmemente ao Eclipse EMF e funciona muito bem com várias ferramentas que você pode encontrar no eclipse ecossistema. Recentemente, ele evoluiu (e está fazendo isso ainda) para algum tipo de "kit de ferramentas de desenvolvimento de linguagem de programação", onde permite suportar todo tipo de ferramenta adicional.

Os parlamentares do outro lado trabalham com um editor baseado em projeção que apenas "parece" um texto enquanto você trabalha no ambiente. O formato de armazenamento subjacente é específico da ferramenta (leia-se: inutilizável sem programas especiais) e não analisa arquivos de texto simples. Isso oferece ótimas vantagens, como a incorporação de Langauges arbitrários (por exemplo, Regex dentro do SQL dentro do Java). A cadeia de ferramentas permite a geração na forma de modelo para modelar transformações que - como o editor - se sentem incomum no início, mas também são poderosas.

Ambas as ferramentas estão de alguma forma bloqueando você no mundo deles (MPS/Eclipse). Mesmo que você possa executar os dois em um modo sem cabeça, não se pode iniciar facilmente o XText Editor dentro de outro IDE. O mesmo vale para os deputados. Eu argumentaria que o XText é "mais aberto", pois funciona com arquivos de texto comuns, por um lado, e joga bem com ferramentas estabelecidas (EMF e Eclipse em geral), por outro lado.

Isso responde sua pergunta? Vou tentar fornecer respostas mais precisas se você tiver perguntas mais detalhadas.

Outras dicas

A idéia principal de parlamentares não está usando um editor projecionado em vez de um texto baseado em um texto. É a compasabilidade da linguagem. Por exemplo, você pode estender o Java com tuplas, e outra pessoa pode estender o Java com chamadas de método assíncronas. Nas ferramentas baseadas em texto (como o XText), é impossível garantir que duas extensões funcionem bem juntas, pois a gramática resultante pode ser ambígua. Os parlamentares tornam isso possível. Você apenas adiciona linguagem ao seu projeto, como adicionar bibliotecas.

Na minha opinião, os deputados do JetBrain são mais fáceis de aprender a princípio. Você não precisa trabalhar com arquivos de configuração, como os arquivos de fluxo de trabalho no XText.

A principal diferença é que, no MPS, você edita o modelo diretamente e este modelo é mostrado a você em uma visualização de sintaxe/editor. No xText, você edita a sintaxe e o modelo é gerado/analisado.

Na minha opinião, os parlamentares são mais poderosos. Você pode combinar idiomas muito mais fácil e estendê -los. Uma grande vantagem dos editores projecionais é que você pode ocultar informações ou mostrar informações adicionais recuperadas do modelo. Você também pode usar vistas diferentes, como tabelas ou gráficos (chegando no MPS 2.1).

O controle da versão pode ser feito com MPS. Há uma ferramenta de mesclagem/diff que funciona no modelo de árvore.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top