14h30 – 18h00
IRCAM - Salle Stravinsky
Entrée libre dans la mesure des places disponibles
Cette séance, organisée à l'initiative des équipes Parkas (Ecole Normale Supérieure, département d'informatique) et Représentations Musicales (IRCAM/UMR STMS/INRIA), aura pour but de présenter un panorama des travaux et outils actuels dans le domaines des langages synchrones et leur utilisation dans la conception de systèmes réactifs, notamment dans le domaine musical.
Les langages synchrones ont été conçus pour programmer des systèmes temps-réels critiques et ont eu des succès majeurs dans ce domaine. Leur pouvoir expressif a été volontairement réduit pour garantir des propriétés essentielles: exécution en temps et mémoire bornée, absence de blocage à l'exécution, déterminisme.
Plusieurs travaux dont le modèle réactif de Frédéric Boussinot et le langage Lucid Synchrone ont cependant montré que le parallélisme synchrone ne se limite pas au cadre des systèmes temps-réels. Il peut être utile pour programmer des applications tels que des interfaces graphiques ou des jeux vidéo.
Dans cet exposé, je présenterai le langage ReactiveML qui a servi par exemple à la modélisation de réseaux ad hoc. Ce langage est une extension du langage généraliste OCaml avec des primitives synchrones. Il mélange ainsi l'expressivité des langages fonctionnels (polymorphisme, ordre supérieur, etc.) avec le modèle concurrent et déterministe du synchrone.
Les langages synchrones permettent de programmer des systèmes réactifs embarqués à la fois très complexes et très sûrs, et on en trouve des exemples d'utilisation très significatifs dans l'avionique, le transport terrestre ou l'énergie.
Ils sont fondés sur le modèle du "parallélisme synchrone" qui introduit une notion de temps discret global dans les programmes et donne la possibilité d’écrire des programmes parallèles déterministes. Le compilateur d’un langage synchrone garantit des propriété de sûreté importantes pour le logiciel critique: déterminisme, absence de blocage (deadlock), génération de code séquentiel s’exécutant en temps et mémoire bornés, etc. En somme, les langages synchrones permettent de programmer dans un langage de haut niveau, le code final embarqué étant produit directement par compilation.
Dans cet exposé, je montrerai comment et pourquoi étendre un langage synchrone existant pour programmer des systèmes hybrides combinant des signaux mixtes continus et discrets. Le résultat est un langage qui permet de programmer, dans un source unique, le controleur discret et son environnement physique continu. La combinaison de signaux mixtes
soulève des questions nouvelles de sémantique, de typage et de compilation. Je montrerai les solutions que nous avons proposées et les illustrerai, à l'aide d'un prototype en cours de développement, et qui étend Lucid Synchrone avec des équations différentielles ordinaires (ODEs).
FAUST est un langage de programmation synchrone spécialement conçu pour facilement développer des applications de synthèse et de traitement du signal audio numérique. Basé sur une approche fonctionnelle de la programmation, centré sur la notion de composition de fonctions, FAUST propose une notation concise, de haut niveau, permettant de décrire des applications ou des plugins audio souvent en quelques lignes de code seulement.
Le compilateur FAUST se charge ensuite de traduire automatiquement ces descriptions en programmes C++ optimisés. Il offre des fonctionnalités avancées telle que la parallélisation automatique (OpenMP ou Work-Stealing) et la génération automatique d'une documentation mathématique décrivant précisément, à des fins de préservation à long terme, tous les calculs mis en oeuvre par un programme.
Grâce au concept d'architecture, un même programme FAUST peut être déployé sans modifications sur de nombreuses plateformes audio : Max/MSP, Puredata, VST, Csound, Supercollider, Jack, CoreAudio, etc. FAUST dispose de son propre IDE, FaustWorks, qui facilite grandement l'utilisation du langage et accélère le cycle de développement. Un compilateur en ligne est également disponible. Il permet aux utilisateurs de produire aisément leurs propres applications audio ou plugins (aussi bien pour Linux, Mac et Windows) sans avoir aucun outil à installer.
A travers une analyse de plusieurs langages de programmation dédiés à la création musicale (composition et performance), cet exposé abordera les différentes stratégies adoptées par ces langages, en particulier au niveau de la syntaxe et de la sémantiques du langage, des politiques d’ordonnancement, de la modélisation du temps musical, des applications visées (traitement audio, live-coding, accompagnement automatique…), et de leurs relations aux les langages synchrones.