Wali is the last generation of a series of platforms: Vaucanson (2003--2012), Vaucanson2 (2012--2014), and Vaucanson-R (2014--2017);
it is written in parallel with VCSN which results from a fork from the same Vaucanson2.
We have used this long experience to set up the methods and concepts necessary to achieve our main goals: efficiency, genericity, and accessibility.
Wali is written in C++ and is organised into three layers: the `static', the `dynamic', and the `interface' layers.
The core of the platform is the static level, which provides the data structures and a library of algorithms.
The type of a weighted automaton is determined by the type of weights and the type of labels.
Every algorithm is implemented via template functions working on template classes, and is compiled for the type of automata that are used.
Efficiency is partly based upon this generic programming which is anyway essential when dealing with weighted automata.
The dynamic level allows both the call of functions of the static level and genuine C++ programming with the use of a kind of `universal' type of automata.
This type is an abstraction of template (static) types of automata; it gives access to a complete template-free API for weighted automata.
A remarkable feature of the dynamic level is the `on request' compilation of modules (data structures and algorithms) from the static level.
Even written at the dynamic level, programs are compiled and not interpreted at execution time.
The interface level offers two kinds of access to the lower layers:
- a command-line interface which allows the call to most of the algorithms of the static level;
- a Python interface to both the dynamic and the static levels.
From April 2011 to September 2014, Vaucanson2 project has been supported by contract ANR 2010 INTB 0203.
Wali project is supported by the Department Computer Science and Networking of Telecom ParisTech.