Creating an Eclipse-based IDE for the D programming language http://www.dsource.org/projects/descent/wiki/Mmrnmhrm Motivação O que é a linguagem D? • Linguagem recente, desenhada para substituir o C++. • Linguagem da familia do C, estaticamente tipificada, compilada, com meta-programação. Porquê uma IDE para D? • A toolchain e bibliotecas são tão importantes como a linguagem em si, e havia lacunas neste aspecto. Porquê uma IDE baseada em Eclipse? • Eclipse Platform – uma framework extensiva para a criação de IDEs. • Interface e comportamento uniforme. • Possibilidade de integração entre linguagens. Uma IDE para D Objectivos iniciais: • • • • • • • • • • Editor de código D. Gestão de projecto. Project Builder. Open Definition. Find References. Code Completion. Code Templates. Vistas de Outline e Type Hierarchy. Formatação de código. Refactoring simples (refactor-rename). Construir algo usável e reaproveitável. Abordagem Analisar o estado da arte. Estudar o JDT. Leitura da documentação, artigos. Leitura do código. Elementos principais: Parser para a linguagem. Integração com Eclipse. Análise de ferramentas e código existentes. Não havia muito que pudesse ser usado. Desenvolver parser. Desenvolvimento inicial Initicialmente desenvolvido um parser ANTLR mas depois foi adoptado o parser DMD/Descent. Funcionalidade semântica (find-definition) é iniciado a partir deste. Protótipo inicial de find-definition realizado Funciona apenas para um conjunto pequeno da linguagem. Mas mostra como poderá ser implementado na sua totalidade. Próximo passo: Eclipse Integração com o Eclipse Protótipo completo: • • • • • • Editor com syntax highlighting. Editor outline. Comandos UI para find-definition. Syntax Highlighting configurável. D project nature e project wizard. D project model e UI. Eclipse Platform é de facto bastante poderosa e extensiva. Mas ao preço de uma curva de aprendizagem bastante elevada, particularmente para uma IDE. Funcionalidade semântica. Find-Definition • Definitions and References. • Scope lookup. • DMD AST inadequada -> conversão da AST. Code Completion. Versão modificada da funcionalidade anterior. Unit testing para a funcionalidade semântica. Completar detalhes, actualizar parser. Lançada a primeira versão pública da IDE. Funcionalidade Avançada Funcionalidades avançadas da IDE: • • • • É então que surge o DLTK. • • • DOM AST. Model caching. Model indexing. Refactoring. Model caching & indexing. Java-like project model. Muito código UI comum. Projecto convertido para DLTK, com resultados bastante bons. Creating an Eclipse-based IDE for the D programming language DEMONSTRAÇÃO... Conclusões Eclipse bastante extensivel e poderoso. • • Requer bastante esforço em aprendizagem. Mas compensa face ao desenvolvimento de raiz. Componentes essenciais da IDE: parser, AST, motor semântico. Vários aspectos a ter em conta para a implementação do core da IDE. Em desenvolvimento novos projectos para dar ainda mais funcionalidade à Eclipse Platform (DLTK, IMP). Trabalho futuro Integração com futuras versões do DLTK. Actualizar para os novos desenvolvimentos da linguagem D. Integração com o Descent. Melhorar o motor de análise semântica. Melhoramentos no parser (error recovery). Desenvolver refactoring.