EN FR
EN FR


Section: Software

Rascal

Participants : Paul Klint, Jurgen Vinju [correspondent] , Tijs van der Storm, Jeroen van den Bos, Mark Hills, Bert Lisser, Atze van der Ploeg, Vadim Zaytsev, Anastasia Izmaylova, Michael Steindorfer, Ali Afroozeh.

Characterization:

A5, SO-4, SM-4, EM-4, SDL-4-up5, OC-DA-3-CD-3-MS-3-TPM-3.

WWW:

http://www.rascal-mpl.org

Objective:

Provide a completely integrated programming language parametric meta programming language for the construction of any kind of meta program for any kind of programming language: analysis, transformation, generation, visualization.

Users:

Researchers in model driven engineering, programming languages, software engineering, software analysis, as well as practitioners that need specialized tools.

Impact:

Rascal is making the mechanics of meta programming into a non-issue. We can now focus on the interesting details of the particular fact extraction, model, source analysis, domain analysis as opposed to being distracted by the engineering details. Simple things are easy in Rascal and complex things are manageable, due to the integration, the general type system and high-level programming features.

Competition:

There is a plethora of meta programming toolboxes and frameworks available, ranging from plain parser generators to fully integrated environments. Rascal is distinguished because it is a programming language rather than a specification formalism and because it completely integrates different technical domains (syntax definition, term rewriting, relational calculus). For simple tools, Rascal competes with scripting languages and for complex tools it competes context-free general parser generators, with query engines based on relational calculus and with term rewriting and strategic programming languages.

Engineering:

Rascal is about 100 kLOC of Java code, designed by a core team of three and with a team of around 8 phd students and post-docs contributing to its design, implementation and maintenance. The goal is to work towards more bootstrapping and less Java code as the project continues.

Publications:

[23] , [22] , [11] , [21] , [22]

Novelties

  • Statically typed access to external data-sources [21] . This includes access to CVS files, spreadheets, databases, etc.

  • Significant improvements to online documentation and inter-active tutor environment.

  • Full transparent support for Unicode codepoints.

  • Added language-supported quickcheck-style random testing facility (by Wietse Venema, intern), including bridge to JUnit testing framework and IDE support.

  • Revived access libraries to CVS, SVN and Git VCSs.

  • Added support for JSON export and import, towards Rascal webservices.

  • Totally re-implemented and extended debugging interface.

  • Priority and associativity mechanism for context-free grammars was completed, such that it can not be used to accidentally remove sentences from a language anymore.

  • Reimplementation of the except disambiguation filter with much higher efficiency.

  • Improved module import times.

  • Reimplemented URI encoding/decoding mechanism for correctness and portability.

  • Added semi-automated exam generation and grading feature to the Rascal tutor environment.

  • Experimented with strategies for error recovery in context-free general top-down parser.

  • Added MissGrant and SuperAwesomeFighter language workbench demonstrations.

  • Structured re-design of menus and menu options in the IDE

  • Added bindings to Apache statistics libraries

  • Created Rascalopedia, a glossary of concepts and terms that are relevant for metaprogrammers. The descriptions are aiming at under-graduate students.

  • Two previously designed programmable transformation languages for grammars in a broad sense: the unidirectional XBGF and the bidirectional ΞBGF — have been reimplemented as libraries in Rascal.

  • Improved general stability and efficiency.