Use The Source

Welcome to the UseTheSource blog. This blog collects stories for all projects, like research paper summaries, experience reports on applications, and quick howto's.

Rascal 0.9.x release notes

In this post we report on the Rascal release 0.9.0, which includes all changes since the 0.7.x releases. We have not written release notes for the 0.8.x series (the details are included here). We expect a number of patch releases for 0.9.x, which we report on by updating this post (at its end) when necessary until we move on to 0.10.x.

What is ValLang?

Vallang ( is a highly integrated and mostly-closed collection of mutually recursive fundamental data-types on the Java Virtual Machine:

Navigating the WordPress Plugin Landscape

Helping PHP developers using Rascal-based code analysis.

Performance Modeling of Maximal Sharing - Experience Report

This paper won a Best Paper award at ICPE 2016 in Delft.

Empirical analysis of the relationship between CC and SLOC

Check out these two related articles on the empirical relation between the CC and SLOC source code metrics.

Optimizing Hash Tries

Hash-tries are the data-structure under Rascal’s sets, maps and relations. These papers explain how they work and how we make them lean and fast on the JVM. Others have blogged about these results as well. The code can be found in the Capsule project.

From imperative programming to functional programming

Rascal features immutable data, but at the same time a number of language constructs which are a lot like “traditional” structured imperative programming: while, if, etc. Without going into the full power of these constructs in Rascal (featuring lexically scoped backtracking, for example) in this post we go into how in the same language we can program imperatively and functionally at the same time.

Rascal 0.7.x release notes

In this post we report on the Rascal release 0.7.0. We expect a number of patch releases as well, which we report on by updating this post (at its end) when necessary. The Rascal release includes the following main components:

A DSL in 36 lines of code

One of the goals of Rascal is to allow the definition of Domain-Specific Languages. In this small post we give a flavor of how you can use Rascal to define the syntax of a DSL, a simple semantic check and how to compile the DSL to Java.

From functions to term rewriting and back in Rascal

Here’s a nifty design element from Rascal that I personally like: functions are actually rewrite rules. The bottom line here is that pattern matching drives dynamic dispatch which results in openly extensible meta programs.