A JetBrains lançou recentemente a versão beta do seu novo produto, o Meta Programming System (MPS). O produto tem como uma das principais features, o auxílio no desenvolvimento de linguagens de programação e criação de linguagens de Programação, bem como auxiliá-los na criação de DSL´s(Domain Specific Languages).
O MPS provê ao desenvolvedor um ambiente para criação de novas linguagens, possibilitando também a extensão linguagens existentes. Os artefatos são organizados dentro de uma Abstract Syntax Tree (AST) de forma hierárquica, tendo propriedades, referencias, e total descrição de código. As linguagens são descritas em alto nível e o MPS gera um código compilável em outras linguagens, tais como Java, XML, HTML e JavaScript. Para criar uma nova linguagem utilizando o MPS é necessário entender a linguagem base. O produto vem acompanhado uma gama de extensões para ajudar no trabalho com strings, collections, date, regular expressions, etc. Ao criar uma nova linguagem, o desenvolvedor define suas regras para a codificação podendo também especificar os elementos type-system da linguagem. Isto permite o MPS verificar o código em tempo de desenvolvimento, diminuindo a possibilidade de erros.
A programação orientada a linguagens(LOP) é um novo paradigma de programação onde desenvolvedores podem criar linguagens especializadas da mesma forma em que programariam em uma linguagem convencional, usando-as tanto na criação de um novo software quanto na extensão de linguagens.Martin Fowler postou recentemente em seu blogque o melhor caminho para desenvolver diante deste paradigma é utilizando uma IDE. Ele também opinasobre o MPS como plataforma de desenvolvimento.
O MPS é altamente recomendado na criação de DSL's, nele você pode construir editores de código customizados e definir regras para qualquer linguagem. Os experts em domínio não acostumados com as linguagens de programação podem trabalhar a frente do MPS desenvolvendo a partir de DSL's criadas.
O software é grátis e a maior parte do código fonte está próximo de ser aberto a comunidade, sendo distribuído pela licença Apache 2.0. O projeto MPS teve início em 2003 como apenas um projeto de pesquisa, porém, sempre utilizado por seus desenvolvedores no desenvolvimento de novos produtos. O time da JetBrains espera estar liberando uma versão Beta 2 no decorrer do próximo mês e uma versão 1.0 ainda no primeiro quadrimestre de 2009. A Jetbrains também planeja lançar a versão 8.0 de sua IDE, IntelliJ IDEA e a versão 4.0 de sua ferramenta de colaboração chamada TeamCity por volta de novembro. No site da JetBrains você encontra informações sobre como o MPS funciona, a última versão Beta para download, tutoriais, e informações atualizadas sobre a ferramenta em seu blog.
A InfoQ esteve recentemente com Konstantin Solomatov, core developer do projeto, conversando sobre as atuais features e o que vem pela frente, questionando também sobre quais as diferenças entre as ferramentas de modelagem e geração de código Eclipse Modeling Framework (EMF) e openArchitectureWare (oAW).
O MPS é baseado em conceitos similares aos do EMF e oAW. Ambas são tecnologias que permitem a criação de meta-models,todos possuem um editor próprio, auto complete, geração de código, etc.Os Modelos EMF são editados graficamente, onde você cria um diagrama representando as entidades. Há domínios onde isso se encaixa facilmente, modelos de Entidade x Relacionamento por exemplo. Entretanto, acreditamos que essa não seja a melhor forma de construir software.
A parte mais interessante no oAW é o xText framework, o qual permite a criação de DSLs, as quais são facilmente encaixadas nos modelos EMF. Porém, isto também traz consigo algumas limitações. Supondo que você deseja linguagens diferentes em um único arquivo, você deverá ter certeza que a gramática utilizada não cause confusão, em outras palavras há somente um caminho para interpretar. Isto é impossível tratando-se de linguagens baseadas em texto. Por exemplo, duas empresas diferentes querem criar uma linguagem específica para facilitar o trabalho com valores monetários em Java. Ambos adicionam uma nova camada para tratar o mesmo problema. Agora considere um código que utilize as duas implementações, quando parsear um código como este contendo uma informação específica, vamos considerar uma classe chamada Money, o sistema não saberá qual das linguagens utilizarem, a primeira ou a segunda.
O MPS salva os modelos como árvores de sintaxe abstratas, permitindo editá-los diretamente. No MPS, o código é apresentado como texto, e em vários aspectos se comporta como text. Mas desde que nunca convertemos o código para texto e vice-versa, não precisaremos nos preocupar com as ambigüidades da gramática.
Se não me engano, o MPS permite a composição de gramáticas de linguagem. Poderíamos comparar esta feature com ferramentas como Oslo ou OMeta?
Uma vez que o MPS não é baseado em texto, isso significa que ele não utiliza este tipo de gramática. O desenvolvedor define a linguagem estruturando os elementos em uma abstract syntax tree, tornando-se uma gramática abstrata. Uma vez não tendo uma gramática baseada em texto, não há problemas de compatibilidades com outras linguagens. Comparado com Oslo e Ometa, ambos possuem uma gramática baseada em texto, possui vários problemas similares ao xText.
Comparando com Oslo and Ometa, os quais permitem apenas a definição de parsers para linguagens, o MPS provê features adicionais,como um editor, possibilita a definição de regras, a definição do type-system da linguagem e a geração de código.
Quais seriam o produtos os desenvolvedores pela JetBrains utilizando o MPS para modelagem e desenvolvimento ?
Um deles é o Issue Tracker utilizado no desenvolvimento do JetBrains, também conhecido como "Charisma",lançado durante a Q1 2009. Este foi completamente escrito em MPS. O Charisma vem sido utilizado como Issue Tracker de alguns produtos, tais como o MPS, TeamCity e outros. Enquanto desenvolvíamos o Charisma, desenvolvemos um completo ambiente para desenvolvimento web baseado em J2EE, o qual trabalha em conjunto com o MPS.
O que aguardar para o futuro do MPS ?
Nosso principal objetivo é conseguir coletar através da versão Beta do MPS a opinião dos usuários, e a partir disso planejar o roadmap do produto. Nós temos planos para a versão 1.0, porém, não há tantas mudanças ou novas features antes do lançamento. Iremos planejar um roadmap mais longo devido estarmos lançando o MPS 1.0 durante a Q1 2009. Nessa versão você pode esperar suporte a debug e algumas outras linguagens, por exemplo, uma linguagem para construção de interfaces gráficas.