Introduction

Since 1993, my research activities are based, or use, the functional programming language Scheme.

From September 2003 to September 2006, I was a member of the MIMOSA team (Migration et mobilité : sémantique et applications) INRIA Sophia where I worked mainly on a functional language for Web programming.

Around the Scheme Programming Language

STk

From 1993 to 1999, I have developped the STk package which was a R4RS Scheme interpreter which can access the Tk graphical package. This package offered an efficient CLOS like object oriented system. STk knew its “hour of glory” in late September 1994, when Richard Stallman of the Free Software Foundation posted an article to comp.lang.tcl newsgroup titled Why you should not use Tcl which conducted a nearly one month long flame war ensued. Richard Stallman proposed in this article to use STk instead of Tcl.

Notes:

Skribe

Skribe is a functional text processor geared toward technical documents authoring (web pages, technical reports, API documentations, etc). Skribe syntax makes it look like a mark-up language (à la HTML), but it is actually a true programming language, provided with high level features (such as objects, higher order functions, regular and syntactic parsing, etc.).From Skribe source files it is possible to produce various targets documents (HTML pages, XML files, Postscript, or PDF files). Skribe is based on the Scheme programming language.

Skribe was a joint developement with Manuel Serrano. It is no more developed.

ScmPkg

ScmPkg is a package distribution system for Scheme.

ScmPkg is not distributed as a separated archive file. It is in fact embedded in the standard Scheme distributions which support it (for now Bigloo and STklos). Look at the ScmPkg Web page to see the packages and the documentation of the packages which are already available with this system.

STklos

The STklos project started on 1999. STklos is the successor of STk. It is completely different from its ancestor. Whereas, STk was a tree interpreter, STklos use a byte code compiler. The latter upports most of the languages features defined in R5RS. The aim of STklos implementation is to be fast as well as light thanks to its ad-hoc Virtual Machine. It can also be compiled as a library and embedded in an application.

STklos is always developed. See its web page for latest news.

Around Web Programming

During my stay at INRIA, I participated to the definition of the first versions of the HOP programming language. Hop is a higher-order language designed for programming interactive web applications. It exposes a programming model based on two computation levels. The first one is in charge of executing the logic of an application while the second one is in charge of executing the graphical user interface. The main interest of Hop is that a unique program can have some parts which are while the others are executed on the client. Furthermore, communications between client and server are easy to program.

Since, I left INRIA, HOP relies now on the JavaScript Language). It is is now called Hop.js.

Publications

Here are my main publications about the subjects listed before:

This paper presents a package management system for the Scheme programming language. It is inspired by the Comprehensive Perl Archive Network (Cpan) and various GNU/Linux distributions. It downloads, installs, and prepares source codes for execution. It manages the dependencies between packages. The main characteristic of this system is its neutrality with respect to the various Scheme implementations. It is neutral with respect to the language extensions that each Scheme implementation proposes and with respect to the execution environment of these implementations. This allows the programmer to blend, within the same program, independent components which have been developed and tested within different Scheme implementations.

Hop is a new higher-order language designed for programming interactive web applications such as web agendas, web galleries, music players, etc. It exposes a programming model based on two computation levels. The first one is in charge of executing the logic of an application while the second one is in charge of executing the graphical user interface. Hop separates the logic and the graphical user interface but it packages them together and it supports strong collaboration between the two engines. The two execution flows communicate through function calls and event loops. Both ends can initiate communications. The paper presents the main constructions of Hop. It sketches its implementation and it presents an example of a simple web application written in Hop.

Bimap is a tool for synchronizing IMAP servers. It enables two or more IMAP mirrored servers to be modified independently and later on, synchronized. Bimap is versatile so, in addition to synchronizing emails, it can be used for filtering and classifying emails. For the sake of the example, the paper shows automatic emails classification and white-listing programmed with Bimap. Bimap is implemented in Scheme. The most important parts of its implementation are presented in this paper with the intended goal to demonstrate that Scheme is suited for programming tasks that are usually devoted to scripting languages such as Perl or Python. With additional libraries, Scheme enables compact and efficient implementation of this distributed networked application because the main computations that require efficiency are executed in compiled code and only the user configurations are executed in interpreted code.

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 it looks familiar to anyone used to markup languages. Authoring a document with Skribe is as simple as with HTML or LaTeX. Because of the conciseness of its original syntax, it is even possible to use it without noticing that it is a programming language. In Skribe, the ratio “markup/text” is smaller than with the other markup systems we have tested.

This paper presents Biglook, a widget library for an extended version of the Scheme programming language. It uses classes of a Clos-like object layer to represent widgets and Scheme closures to handle graphical events. Combining functional and object-oriented programming styles yields an original application programming interface that advocates a strict separation between the implementation of the graphical interfaces and the user-associated commands, enabling compact source code. The Biglook implementation separates the Scheme programming interface and the native back-end. This permits different ports for Biglook. The current version uses GTK and Swing graphical toolkits, while the previous release used Tk.

This paper presents Scribe, a functional programming language for authoring documents. Even if it is a general purpose tool, it best suits the writing of technical documents such as web pages or technical reports, API documentations, etc. Executing Scribe programs can produce documents of various formats such as PostScript, PDF, HTML, Texinfo or Unix man pages. That is, the very same program can be used to produce documents in different formats. Scribe is a full featured programming language but it looks like a markup language à la HTML.

Ce papier présente un système graphique construit sur la boîte à outils graphique Tk et sur le langage Scheme. Tk est une “toolkit” graphique portable et très largement diffusée construite au dessus du langage Tcl. Tcl, quant à lui, est un langage de scripts, qui n’est pas adapté au développement de logiciels de taille conséquente. Afin d’améliorer le niveau de programmation de la toolkit Tk, nous avons défini le langage STklos, basé sur Scheme et offrant un système objet basé sur CLOS. Ce langage a permis de redéfinir proprement, sous la forme d’une hiérarchie de classes, tous les objets graphiques de Tk.

This paper presents a graphical package which relies on the Tk toolkit and the Scheme programming language. The Tk package is a widely used graphical toolkit built upon the Tcl scripting language. Tcl was not designed as a general purpose programming language and its usage for large-scale software development is generally not suitable. To improve the programming level of the Tk toolkit, we have defined STklos, a Scheme language with a CLOS-like object system. This alternative language has been used to embody the standard Tk widgets in a clean hierarchy of classes, which is presented here. The STklos object system implementation is based on a Meta Object Protocol; this protocol and its usage for accessing the Tk toolkit in an efficient way are also presented in this paper.

This internal report is a first version of the ISOTAS paper published in March 1996.

STk is a graphical package which rely on Tk and the Scheme programming language. Concretely, it can be seen as the Tk package where the Tcl language as been “replaced” by a Scheme interpreter. STklos is an object oriented extension of STk. Usage of this object extension facilitates code reuse and the definition of new widgets classes.

STk is a graphical package which rely on Tk and the Scheme programming language. Concretely, it can be seen as the Tk package where the Tcl language as been “replaced” by a Scheme interpreter. Programming with STk can be done at two distinct levels. First level is quite identical than programming Tk with Tcl. Second level of programming uses a full object oriented system. Those two programming levels and current implementation are described in this paper.