IMP: The IDE Meta-Tooling Platform

IDEs for the rest of us

IMP News

New! 16 December 2009: Runtime support and IMP-based IDEs for ANTLR and JavaCC are on the way! Stay tuned!

New! 28 October 2009: Slides from the IMP talk at OOPSLA 2009 are available on the Documentation page.

New! 22 October 2009: A new software engineering course at the University of Amsterdam is using the Rascal analysis language (built on the IMP PDB) and its IMP-based IDE. Some day, we hope to distribute Rascal with IMP.

New! 25 March 2009: IMP Tutorial slides from EclipseCon 2009 are available on the Documentation page.

Motivation

Isn't it a shame that so many languages still don't enjoy full-featured IDE support?

Building a new programming language that needs an IDE?

Can't afford to spend months learning the Eclipse APIs to implement an IDE from scratch?

Tried to extend or re-purpose an existing Eclipse IDE but gave up in frustration?

If you answered yes to any of the above, you're not alone, but there's good news:

IMP is here to help!

IMP is intended to radically simplify and speed the IDE development process.

Design Goals

  • IMP lets you use any kind of parser you want.

    Want to use ANTLR, JavaCC, LPG, SDF, or a hand-rolled parser? Go ahead!

    Want to use top-down, bottom-up, or even scannerless parsing techniques? No problem!

  • IMP lets you focus on your language, not Eclipse componentry.

    IMP interfaces keep you focused on the stuff you know best: your language, and your models. Almost all of the complexities of Eclipse are hidden from you.

  • IMP lets you use any kind of model you want.

    IMP doesn't force you to use EMF, or its own ASTs (abstract syntax trees). Languages vary so much in structure and semantics that this just doesn't make sense.

    Already have a compiler front-end? Don't reinvent the wheel! Use it!

  • IMP lets you implement the IDE features you want when you want them.

    You won't get frustrated because IMP forces you to implement features in a particular order, or makes you implement everything before you get to see your IDE in action! You can be up and running in minutes or hours, not weeks!

  • IMP doesn't care what kind of language you have.

    Is your language object-oriented? functional? declarative? a DSL? No problem!

    IMP-based IDEs already exist for a wide variety of languages like Java, grammar specifications, COBOL, stream processing, and DSLs. IMP is being used for languages from tiny DSLs to full-featured general-purpose programming languages.

  • IMP IDEs are feature-rich.

    We support syntax highlighting, outlines, quick outlines, source code folding, content assist, hover help, editor annotations, incremental building, you name it.

Now, building a state-of-the-art Eclipse IDE for a new programming language is difficult, no question about it, and a lot of this work is inevitable. It requires a deep understanding of the language's structure and semantics.

Still, a significant portion of IDE development embodies common themes and code structures, and requires extensive knowledge of Eclipse API's, that have nothing to do with your language, and thus represent a great opportunity for code and knowledge reuse in the form of a runtime and meta-tooling framework.

IMP is an ongoing project, begun at IBM Watson Research, to develop this kind of support for Eclipse.

Features

IMP's goal is to ease the development of commercial-quality IDEs, including the following features:
  • generation and management of parsers and Abstract Syntax Trees (ASTs)
  • semantic analysis to provide information that enables IDE functionality
  • full editor support, including: syntax highlighting, outline views (quick and standalone), package explorer-like navigation, hyperlinking to declarations, source code folding, hover help, and content assist
  • build support: project natures, incremental builders, project search paths, error markers, and dependency tracking
  • refactoring support
  • indexed search support (in progress)
  • static program analysis (pointer analysis, type analysis, etc.) to enable complex refactorings
  • execution and debugging support

IMP Components

IMP provides:
  • a set of language service-creation wizards,
  • a run-time framework to encapsulate common language-processing infrastructure,
  • code skeletons to get the IDE developer started on each task, and
  • DSLs for easily implementing certain IDE services.
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 is (partially) Self-hosting:

We've used IMP to create DSLs (domain-specific languages) that assist in various aspects of IDE development, for example:

  • the PrefSpecs language for specifying language-specific preference settings, along with a compiler that automatically generates preference pages for the user interface
  • the Box language for specifying information about text formatting in IMP IDEs
  • the Presentation Specification language and IDE for declaratively specifying IDE presentation characteristics such as token coloring, outlining, and source folding.
  • the LPG grammar specification language for creating parsers and lexers (see the LPG project home page)

The LPG, PrefSpecs, and Box IDEs are included in the IMP release.

The X10 IDE is available, along with the X10 compiler, runtime and examples, from http://x10-lang.org/.

The latest IMP release is targeted to work with Eclipse versions 3.2, 3.3, 3.4, and 3.5.

Note: The Java-hosted support, however, depends on the JDT, which made a breaking API change (they fixed a typo in the name of the method JavaCore.setComplianceOptions()) at Eclipse 3.3 (or was it 3.4?), which broke backward compatibility for that feature. If you don't need this feature, then IMP should work with earlier Eclipse versions.

Please let us know if you have any problems, especially with more recent versions of Eclipse.

Incubation
Incubation