Parkas Team Software
The PARKAS group runs and contributes to several software projects.
|| First-order synchronous dataflow language
|| The GNU Compiler Collection
| Hybrid Synchrone
|| Synchronous dataflow + 1st order ODEs
|| Integer Set Library, state-of-the-art Presburger Arithmetic library
|| Programming language for large synchronous digital circuits
| Lucid Synchrone
|| Higher-order synchronous dataflow language
|| A n-synchronous language experiment
|| An Ocaml interface to the Sundials CVODE solver
|| Reactive programming in ML
The language Decades aims to provide a simple, efficient and stable version of Lustre, that facilitates research and experimentation. Some extensions have already been made, most notably automata. It's currently used to experiment with linear typing for arrays and also to introduce a concept of asynchronous parallel computations. The compiler developed in our team generates C, java and VHDL code.
GCC: The GNU Compiler Collection
: GPLv3+ and LGPLv3+
The GNU Compiler Collection includes front ends for C, C++,
Objective-C, Fortran, Java, Ada, and Go, as well as libraries for
these languages (libstdc++, libgcj,...). GCC was originally written as
the compiler for the GNU operating system. The GNU system was
developed to be 100% free software, free in the sense that it respects
the user's freedom.
PARKAS contributes to the polyhedral compilation framework (Graphite)
and distributes an experimental branch for a stream-programming
extension of OpenMP, borrowing key design elements to synchronous
Hybrid Synchrone is an experimental language for simulating hybrid systems. It is a first-order synchronous language without clocks that has been augmented with first-order Ordinary Differential Equations (ODEs) that can be reset. Hybrid programs are compiled into the discrete subset and executed by an external numerical solver; currently the Sundials
CVODE solver via an OCaml Interface
isl: Integer Set Library
isl is a library for manipulating sets and relations of integer points bounded by linear constraints. Supported operations on sets include intersection, union, set difference, emptiness check, convex hull, (integer) affine hull, integer projection, and computing the lexicographic minimum using parametric integer programming. It also includes an ILP solver based on generalized basis reduction.
Lucid Synchrone is an experimental language for the implementation of reactive systems. It is based on the synchronous model of time as provided by Lustre combined with some features from ML languages. The main characteristics of the language are the following:
- It is a strongly typed, higher-order functional language managing infinite sequences or streams as primitive values. These streams are used for representing input and output signals of reactive systems and are combined through the use of synchronous data-flow primitives à la Lustre.
- The language is founded on several type systems (e.g., type and clock inference, causality and initialization analysis) which statically guarantee safety properties on the generated code.
- Programs are compiled into sequential imperative code.
- The language is built above Objective Caml used as the host language. Combinatorial values are imported from Objective Caml and programs are compiled into Objective Caml code. A simple module system is provided for importing values from the host language or from other synchronous modules.
Lucy-n is a language to program in the n-synchronous model. The
language is similar to Lustre with a buffer construct. The Lucy-n
compiler ensures that programs can be executed in bounded memory and
automatically computes buffer sizes. Hence this language allows to
program Kahn networks with bounded FIFOs.
This library provides an Ocaml interface to Sundials
), though only the CVODE solver with serial nvectors is currently supported
. The structure and naming conventions largely follow the original libraries, both for ease of reading the existing documentation and for converting existing source code, but several changes have been made for programming convenience, namely:
- solver sessions are configured through algebraic data types rather than through multiple function calls,
- error conditions are signalled by exceptions rather than return codes (including in user-supplied callback routines),
- closures (partial applications of higher-order functions) are used to share user data between callback routines, and,
- explicit free commands are not necessary nor provided since Ocaml is a garbage-collected language.
Compiler licence: Q Public Licence 1.0
Library licence: GNU Library General Public Licence 2.0
ReactiveML is a programming language dedicated to the implementation of interactive systems as found in graphical user interfaces, video games or simulation problems. ReactiveML is based on the synchronous reactive model of Boussinot embedded in an ML language (here Objective Caml). The synchronous reactive model provides synchronous parallel composition and dynamic features like the dynamic creation of processes. In ReactiveML, the reactive model is integrated at the language level (not as a library) which leads to safer and more natural programming.