Langages synchrones
Vendredi 3 février 2012
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.
Programme
- 14h30-15h15 : Louis Mandel – ReactiveML et aspects dynamiques dans les langages synchrones
- 15h15-16h00 : Yann Orlarey – FAUST : programmation synchrone et fonctionnelle pour le traitement du signal
- 16h15-17h00 : Marc Pouzet – Combiner du temps discret et du temps continu dans un langage synchrone
- 17h00-17h45 : Karim Barkati et José Echeveste – Aspects synchrones dans les langages de programmation appliqués à la composition et à la performance musicales
Résumés des interventions
ReactiveML et aspects dynamiques dans les langages synchrones
Louis Mandel (Ecole Normale Supérieure / LRI / Université Paris Sud)
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.
Combiner du temps discret et du temps continu dans un langage synchrone
Marc Pouzet (Ecole Normale Supérieure / Université Pierre et Marie Curie)
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 : programmation synchrone et fonctionnelle pour le traitement du signal
Yann Orlarey (Grame)
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.
Aspects synchrones dans les langages de programmation appliqués à la composition et à la performance musicales
Karim Barkati et José Echeveste (IRCAM)
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.
References
ReaciveML
- L. Mandel, M. Pouzet, ReactiveML, a Reactive Extension to ML, Principles and Practice of Declarative Programming (PPDP), 2005. [ extended version ]
- L. Mandel, Conception, Sémantique et Implantation de ReactiveML : un langage à la ML pour la programmation réactive, Thèse de doctorat de l'Université Pierre et Marie Curie (Paris 6), 2006.
- L. Mandel, M. Pouzet, ReactiveML : un langage fonctionnel pour la programmation réactive, Technique et Science Informatiques (TSI), 2007.
- L. Mandel, F. Plateau, Interactive Programming of Reactive Systems, Model-driven High-level Programming of Embedded Systems, 2008.
Faust
- Online compiler, documentation, exemples…: http://faust.grame.fr/
- Publications : http://faust.grame.fr/index.php/documentation/papers
Data-flow/automates et extensions hybrides pour les langages synchrones
- Extension d'un langage synchrone avec des automates hierarchiques:
J.-L. Colaço, B. Pagano, M. Pouzet, A Conservative Extension of Synchronous Data-flow with State Machines, International Conference on Embedded Software (EMSOFT), 2005. - Semantique des systemes hybrides reposant sur l'analyse non-standard:
A. Benvenistea, T. Bourkea, B. Caillauda, M. Pouzet, Non-Standard Semantics of Hybrid Systems Modelers, Journal of Computer and System Sciences, 2011. - Typage et compilation d'un langage synchrone hybride:
A. Benveniste, T. Bourke, B. Caillaud, M. Pouzet, Divide and Recycle: Types and Compilation for a Hybrid Synchronous Language, ACM SIGPLAN/SIGBED Conference on Languages, Compilers, Tools and Theory for Embedded Systems (LCTES), 2011.
A. Benveniste, T. Bourke, B. Caillaud, M. Pouzet, A Hybrid Synchronous Language with Hierarchical Automata, International Conference on Embedded Software (EMSOFT), 2011.