Continuation-Passing C: Program Transformations for Compiling Concurrency in an Imperative Language - TEL - Thèses en ligne Accéder directement au contenu
Thèse Année : 2012

Continuation-Passing C: Program Transformations for Compiling Concurrency in an Imperative Language

Continuation-Passing C : Transformations de programmes pour compiler la concurrence dans un langage impératif

Gabriel Kerneis
  • Fonction : Auteur
  • PersonId : 927253

Résumé

Most computer programs are concurrent ones: they need to perform several tasks at the same time. Threads and events are two common techniques to implement concurrency. Events are generally more lightweight and efficient than threads, but also more difficult to use. Additionally, they are often not powerful enough; it is then necessary to write hybrid code, that uses both preemptively-scheduled threads and cooperatively-scheduled event handlers, which is even more complex. In this dissertation, we show that concurrent programs written in threaded style can be translated automatically into efficient, equivalent event-driven programs through a series of proven source-to-source transformations. We first propose Continuation-Passing C, an extension of the C programming language for writing concurrent systems that provides very lightweight, unified (cooperative and preemptive) threads. CPC programs are processed by the CPC translator to produce efficient sequentialized event-loop code, using native threads for the preemptive parts. We then define and prove the correctness of these transformations, in particular lambda lifting and CPS conversion, for an imperative language. Finally, we validate the design and implementation of CPC by comparing it to other thread librairies, and by exhibiting our Hekate BitTorrent seeder. We also justify the choice of lambda lifting by implementing eCPC, a variant of CPC using environments, and comparing its performances to CPC.
La plupart des programmes informatiques sont concurrents : ils doivent effectuer plusieurs tâches en même temps. Les threads et les événements sont deux techniques usuelles d'implémentation de la concurrence. Les événements sont généralement plus légers et efficaces que les threads, mais aussi plus difficiles à utiliser. De plus, ils sont souvent trop limités ; il est alors nécessaire d'écrire du code hybride, encore plus complexe, utilisant à la fois des threads ordonnancés préemptivement et des événements ordonnancés coopérativement. Nous montrons dans cette thèse que des programmes concurrents écrits dans un style à threads sont traduisibles automatiquement en programmes à événements équivalents et efficaces par une suite de transformations source-source prouvées. Nous proposons d'abord Continuation-Passing C, une extension du langage C pour l'écriture de systèmes concurrents qui offre des threads très légers et unifiés (coopératifs et préemptifs). Les programmes CPC sont transformés par le traducteur CPC pour produire du code à événements séquentialisé efficace, utilisant des threads natifs pour les parties préemptives. Nous définissons et prouvons ensuite la correction de ces transformations, en particulier le lambda lifting et la conversion CPS, pour un langage impératif. Enfin, nous validons la conception et l'implémentation de CPC en le comparant à d'autres bibliothèques de threads et en exhibant notre seeder BitTorrent Hekate. Nous justifions aussi notre choix du lambda lifting en implémentant eCPC, une variante de CPC utilisant les environnements, et en comparant ses performances à celles de CPC.
Fichier principal
Vignette du fichier
kerneis-phd-thesis.pdf (1.21 Mo) Télécharger le fichier
slides-kerneis.pdf (570.7 Ko) Télécharger le fichier
Format : Autre

Dates et versions

tel-00751444 , version 1 (13-11-2012)

Identifiants

  • HAL Id : tel-00751444 , version 1

Citer

Gabriel Kerneis. Continuation-Passing C: Program Transformations for Compiling Concurrency in an Imperative Language. Programming Languages [cs.PL]. Université Paris-Diderot - Paris VII, 2012. English. ⟨NNT : ⟩. ⟨tel-00751444⟩
308 Consultations
1072 Téléchargements

Partager

Gmail Facebook X LinkedIn More