# Matthias Felleisen

Matthias Felleisen est un professeur d'informatique germano-américain. Il grandit en Allemagne et émigre aux États-Unis à l'âge de 21 ans. Il obtient son doctorat à l'Université de l'Indiana sous la direction de Daniel P. Friedman.

## Biographie

Après avoir été professeur pendant 14 ans au Département d'informatique de l'Université Rice, Felleisen rejoint le Khoury College of Computer Sciences de l'université du Nord-Est à Boston, Massachusetts.
Les intérêts de Felleisen incluent les langages de programmation, notamment les outils logiciels, la conception de programmes, les contrats logiciels. Dans les années 1990, Felleisen a lancé PLT et TeachScheme! (qui est devenu plus tard ProgramByDesign et donnant finalement naissance au projet Bootstrap) dans le but d'enseigner les principes de conception de programmes aux débutants et d'explorer l'utilisation de Scheme pour produire de grands systèmes. Dans le cadre de cet effort, il est l'auteur de How to Design Programs (MIT Press, 2001) avec Findler, Flatt et Krishnamurthi.
Pour sa thèse, Felleisen développe une nouvelle forme de sémantique opérationnelle pour les langages fonctionnels d'ordre supérieur avec des extensions impératives (état, contrôle). La première partie de Semantics Engineering with PLT Redex est dérivée de sa thèse. Son application la plus connue est une preuve de sûreté de type, élaborée avec son doctorant Andrew Wright.
Les délimiteurs de contrôle, la base des continuations délimitées, ont été introduits par Felleisen en 1988. Ils ont depuis été utilisés dans de nombreux domaines, notamment pour définir de nouveaux opérateurs de contrôle ; voir Queinnec pour une rétrospective.
La forme A-normale (ANF), une représentation intermédiaire des programmes dans les compilateurs fonctionnels, a été introduite par Sabry et Felleisen en 1992 comme une alternative plus simple à la sémantique par passage de continuation (CPS). Une implémentation dans le compilateur CAML a démontré son utilité pratique et popularisé l'idée.
Avec Findler, Felleisen a développé la notion de contrats d'ordre supérieur. Dans ces contrats, les programmeurs peuvent exprimer des assertions sur le comportement de fonctions, d'objets, de classes et de modules. Le travail de Felleisen sur le typage progressif était une continuation de son travail sur ces contrats; voir ci-dessous.
Dans le cadre de TeachScheme!, Felleisen, Findler, Flatt et Krishnamurthi ont conçu et mis en œuvre le langage de programmation Racket (appelé initialement PLT Scheme). L'idée était de créer un langage de programmation avec lequel il serait facile de construire rapidement des langages pédagogiques pour les étudiants novices --- un langage de programmation pour créer des langages. Flatt reste l'architecte principal de Racket.
Racket a joué un rôle clé dans le développement du typage progressif. En 2006, Felleisen et son doctorant Sam Tobin-Hochstadt ont lancé le projet Typed Racket dans le but de permettre aux développeurs de migrer le code d'un langage de programmation non typé vers la même syntaxe enrichie d'un système de types$^,$. Typed Racket a été le premier langage à implémenter pleinement l'idée de typer progressivement une base de code et reste en cours de développement actif.
Felleisen a prononcé les discours d'ouverture du Symposium technique 2011 sur l'enseignement de l'informatique, de la Conférence internationale 2010 sur la programmation fonctionnelle , de la Conférence européenne 2004 sur la programmation orientée objet et du Symposium 2001 sur les principes des langages de programmation, et de plusieurs autres conférences et ateliers sur l'informatique.
En 2006, il a été nommé fellow de l'Association for Computing Machinery. En 2009, il a reçu le prix Karl V. Karlstrom Outstanding Educator de l'ACM. En 2010, il a reçu le prix SIGCSE pour sa contribution exceptionnelle à l'enseignement de l'informatique de l'ACM. En 2012, il a reçu le ACM SIGPLAN Programming Languages Achievement Award pour sa « contribution significative et durable dans le domaine des langages de programmation », y compris une sémantique opérationnelle à petits pas pour le contrôle et l'état, les classes mixin et les modules mixin, une sémantique entièrement abstraite pour PCF séquentiel, des techniques de programmation Web, les contrats d'ordre supérieur et le typage statique pour les langages dynamiques.