IMP: The IDE Meta-Tooling Platform
Building a state-of-the-art Eclipse IDE for a new programming
language is a difficult undertaking.
Although much of this work is inevitable and requires an in-depth
understanding of the language structure and semantics, a significant
portion embodies common themes and code
structures, and requires extensive knowledge of Eclipse API's, which
represent a great opportunity for code and knowledge reuse in the form
of a meta-tooling framework for IDE development.
IMP is an ongoing project, begun at IBM Watson Research, to develop
such meta-tooling for Eclipse.
The goal of the project is to ease the development of
commercial-quality IDE support for new
programming languages, including the following features:
- generation and management of parsers, AST's, and semantic
analysis
- syntax highlighting, outline view population, package
explorer-like navigation,
content assistance, project natures and builders, error markers
- refactoring support (not only "Move" and "Rename", but
type- and code-related refactorings requiring non-trivial analysis,
e.g. "Extract
Method" and "Infer Type Arguments")
- static program analysis (pointer analysis, type analysis,
etc.) in support of the above
- execution and debugging support
We accomplish this by a mixture of language service-creation wizards,
class libraries to
encapsulate common language-processing infrastructure, and code
skeletons to get the language
service-implementer started. Moreover, the IMP framework has been
engineered to support the
incremental specification and implementation of language services for
languages that derive from
an existing base language, as for example our X10 concurrent
programming language does from
Java. In this way, IDE's built using IMP are themselves extensible.
IMP has been driven in part from the need to produce
full-featured IDE's for several language
research activities at IBM Research, including:
- the X10 language, a Java-derived language for highly
concurrent programs
- the XJ language, which integrates XML access, literal
documents and schema types into Java
- the LPG grammar specification language
IMP is also in part self-hosting:
we are using IMP to create and support DSLs (domain-specific languages)
for various aspects of IDE development, for example:
- the PrefSpecs language and IDE for specifying information about
preferences and preference pages in IMP IDEs
- the Box language and IDE for specifying information about text formatting
in IMP IDEs
IMP also supports the use of LPG for the definition of languages for which IDEs
are to be built.
The LPG, PrefSpecs, and Box IDEs are included in the IMP release;
the X10 IDE is available (with other X10 software) from
http://x10.sourceforge.net/x10home.shtml.
IMP News
IMP is now fully available through Eclipse.org. That includes
The latest IMP release is targeted to work with Eclipse versions 3.2, 3.3, and 3.4 up to M5. Please let us know if you have any
problems, especially with the later versions of Eclipse.