# The Improved GP 2 Compiler

arXiv: https://arxiv.org/abs/2010.03993 · HTML: https://mlsanity.com/paper/2010.03993/

## Key facts

- Cited by 2 papers in the map (data through 14 Oct 2026).
- First posted on arXiv 6 Oct 2020.

## Built on by (most cited first, 2 of 2)

- [Towards Exploratory Reformulation of Constraint Models](https://mlsanity.com/paper/2311.11868/) (2023)
- [Automating Reformulation of Essence Specifications via Graph Rewriting](https://mlsanity.com/paper/2411.09576/) (2024)

## Abstract (arXiv)

GP 2 is a rule-based programming language based on graph transformation rules which aims to facilitate program analysis and verification. Writing efficient programs in such a language is challenging because graph matching is expensive. GP 2 addresses this problem by providing rooted rules which, under mild conditions, can be matched in constant time. Recently, we implemented a number of changes to Bak's GP 2-to-C compiler in order to speed up graph programs. One key improvement is a new data structure for dynamic arrays called BigArray. This is an array of pointers to arrays of entries, successively doubling in size. To demonstrate the speed-up achievable with the new implementation, we present a reduction program for recognising binary DAGs which previously ran in quadratic time but now runs in linear time when compiled with the new compiler.
