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.

Download

Creating an Eclipse-based IDE for the D programming language