OPTIMIX is an optimizer generator. It can be used to generate program analyses
and transformations. Its input language is based on DATALOG and graph rewriting.
Especially two new classes of graph rewrite systems are used: edge addition
rewrite systems (EARS) and stratified
graph rewrite systems (stratified
GRS).
OPTIMIX can be used in the context of the CoSy compiler framework, with
the Cocktail toolbox, in a standalone mode, or in Java embedded mode. For
more information, contact the
author or the company that sells CoSy (ACE).
Optimix can eat and produce Java. OPTIMIX graph rewrite systems are
embedded in Java classes as methods. Java Vectors and Arrays are recognized.
Java set functors can be defined. Path expressions can abbreviate
Datalog chain rules. Set-based IN-expressions facilitate predicate specification
(in the style of graph and path expression databases). If-then syntax for
rules. Patterns in ()-brackets.
Release
2.4alpha in tar-format only (3.8 MB) Allows external functors
(external graph libraries) and external intermediate representations (external
node allocations). Foreign frontends and tools can be coupled to Optimix-generated
code.
2.2: Choice-strata, termination check for rule groups.
2.1: Differences only for CoSy mode.
2.0: Standalone (AST) mode.
Up to release 2.0, OPTIMIX has been developed in the Esprit project
COMPARE (No. 5399).
How to generate optimizers and their parts
In order to generate optimizer parts with OPTIMIX we propose the following
procedure.
Define the data model of your application in Java, Cocktail-AST, or CoSy-fSDL
i.e. define which parts of the knowledge you want to present should be
objects and which should be graphs (relations).
Write down all preconditions for a transformation, perhaps in text. Starting
from that, design of the data manipulation, i.e. formulate graph rewrite
systems that compute and transform the graphs that were defined in the
data model. Build graphs with edge addition rewrite systems (EARS), and
transform them via general graph rewrite systems (GRS).
Think about the implementation of the graphs. Which algorithms does OPTIMIX
generate for a problem and with which graph implementations do these run
fastest? Exchange graph implementations (functor calls) accordingly. Tune
graph rewrite systems by rule and procedure options to allow OPTIMIX to
do better code generation.