Programming language design remains a vital area of research. In particular, domain-specific and scripting languages have received much attention lately, as have languages for high-performance and parallel computing. A critical barrier to the practical evaluation of a new language, as well as to its widespread adoption, is the availability of a full-featured integrated development environment (IDE): users are loathe to forego the accustomed navigation, visualization, and manipulation tools such environments provide.
Unfortunately, despite advances in IDE extensibility, it is still quite tedious to build robust, high-functionality IDEs for new programming languages. Although much of the work in developing a language-specific IDE is inevitable, depending upon language-specific details of structure and semantics, a significant portion of this work embodies themes and code structures that are common across IDEs for a wide range of languages. These themes represent a significant opportunity for simplifying IDE development through meta-tooling and code reuse.
SAFARI is an ongoing project at IBM Research to develop an Eclipse-based meta-tooling framework that greatly accelerates the process of generating language-specific IDEs. It exploits common themes and structures that recur in many languages and language tools. It supports the generation of language-dependent IDE services, while allowing developers to focus on the language-specific aspects of their environments rather than the surrounding IDE and GUI framework. SAFARI has been used to generate IDEs for several languages. These IDEs include such features as parser generation; editors with keyword highlighting, source folding, code completion, hyperlinking and so on; outline views, project building; and more.
Our proposed demonstration will consist of roughly two parts. In the first part, we will demonstrate two SAFARI-based IDEs for nontrivial and quite different languages. This will illustrate the level of IDE functionality SAFARI presently supports. In the second part of the demonstration, we will create a basic but useful IDE for a simple block-structured imperative language. The SAFARI development process and the ways in which SAFARI facilitates IDE development will be the focus of this portion of the demonstration.