Team mimosa

Overall Objectives
Scientific Foundations
Application Domains
New Results
Contracts and Grants with Industry
Other Grants and Activities

Section: Software

Functional programming

Participants : Damien Ciabrini, St├ęphane Epardaud, Erick Gallesio, Bernard Serpette [ Project Oasis ] , Manuel Serrano.

The Bigloo compiler

The programming environment for the Bigloo compiler [9] is available on the INRIA Web site at the following URL: . The distribution contains an optimizing compiler that delivers native code, JVM bytecode, and .NET CLR bytecode. It contains a debugger, a profiler, and various Bigloo development tools. The distribution also contains several user libraries that enable the implementation of realistic applications.

Bigloo was initially designed for implementing compact stand-alone applications under Unix. Nowadays, it runs harmoniously under Linux and MacOSX. The effort initiated in 2002 for porting to Microsoft Windows is pursued by external contributors. In addition to the native back-ends, the Bigloo JVM back-end has enabled a new set of applications: Web services, Web browser plug-ins, cross platform development, etc. The new Bigloo .NET CLR back-end that is fully operational since release 2.6e enables a smooth integration of Bigloo programs under the Microsoft .NET environment.

The main effort of 2005 has been to re-implement the runtime system for supporting preemptive concurrent programming. That is, the new Bigloo library is now thread-safe and its standard distribution comes with two multi-threading library. A library for programming with Fair Threads and a library for programming with Posix-like threads. The first library offers security because it makes explicit locking and explicit mutual exclusion useless. The second library offers performance because it takes benefit from parallel architectures.

We have distributed one major releases of Bigloo during 2005, the version 2.7a.


Every programmer is frequently faced with the problem of debugging programs. Paradoxically, debuggers are hardly used in practice and have not evolved that much in the last decades. We believe these tools can be made more attractive by following some rules. Debuggers must be easily accessible from the programming environment. When using them, the performance slowndown must keep reasonable. At last, they have to match the specificities of the language of debugged programs.

These ideas have driven the design and implementation of Bugloo , a source level debugger for Scheme programs compiled into JVM bytecode. It focuses on providing debugging support for the Scheme language specificities, such as the automatic memory management, high order functions, multi-threading, or the runtime code interpreter. The JVM is an appealing platform because it provides facilities to make debuggers, and helps us to meet the requirements previously exposed.


Skribe is a functional programming language designed for authoring documents, such as Web pages or technical reports. It is built on top of the Scheme programming language. Its concrete syntax is simple and looks familiar to anyone used to markup languages. Authoring a document with Skribe is as simple as with HTML or LaTeX. It is even possible to use it without noticing that it is a programming language because of the conciseness of its original syntax: the ratio markup/text is smaller than with the other markup systems we have tested.

Executing a Skribe program with a Skribe evaluator produces a target document. It can be HTML files for Web browsers, a LaTeXfile for high-quality printed documents, or a set of info pages for on-line documentation.

Building purely static texts, that is texts avoiding any kind of computation, is generally not sufficient for elaborated documents. Frequently one needs to automatically produce parts of the text. This ranges from very simple operations such as inserting the date of the document's last update or the number of its last revision, to operations that work on the document itself. For instance, one may wish to embed inside a text some statistics about the document, such as the number of words, paragraphs or sections it contains. Skribe is highly suitable for these computations. A program is made of static texts (that is, constants in the programming jargon) and various functions that dynamically compute (when the Skribe program runs) new texts. These functions are defined in the Scheme programming language. The Skribe syntax enables a smooth harmony between the static and dynamic components of a program.

Skribe is the continuation of the project formerly known as Scribe . Skribe can be downloaded at .

Skribe is used by the Mimosa project for authoring its Web page and... this document. Hence, we do not depend on any external tools for providing a LaTeXand a XML version of our activity report.


The ULM Scheme implementation is an embedding of the ULM primitives in the Scheme language. This implementation provides a compiler and a virtual machine to execute ULM/Scheme programs. The current version has preliminary support for a mixin object model, reactive event loops, and native procedure calls with virtual machine reentry. The current version is available at .


Logo Inria