Home | Research | Software | Teaching | Contact

During my PhD, I worked on CPC, an experimental dialect of the C language, designed to write concurrent programs. A CPC program is compiled into plain C through a series of source-to-source transformations.

My work has been to prove the correctness of the transformations performed by the CPC translator, and reimplement it from scratch in OCaml (based on an former prototype written in Common Lisp by Juliusz Chroboczek). I also performed a series of benchmarks and I am involved in the development of Hekate, a BitTorrent seeder written in CPC.

CPC has been used to compile coroutines in the QEMU emulator during Google Summer of Code 2013. Read more about the experiment.

More information about the CPC translator, including source code, is available on the dedicated page. A long paper about CPC, describing both theoretical and experimental aspects, has been published in HOSC; it contains everything you might wish know, and probably a little bit more. Even more details are available in my PhD dissertation. Some more benchmarking results are available in a technical report.

Gabriel Kerneis, Charlie Shepherd, Stefan Hajnoczi. QEMU/CPC: Static Analysis and CPS Conversion for Safe, Portable, and Efficient Coroutines. PEPM'14, San Diego, CA, USA, January 20-21, 2014.
Also available in html and epub format.

Gabriel Kerneis. Continuation-Passing C: Program Transformation for Compiling Concurrency in an Imperative Language. PhD thesis. Laboratoire PPS, Université Paris Diderot (2012).

Gabriel Kerneis, Juliusz Chroboczek. Continuation-Passing C, compiling threads to events through continuations. Higher-Order and Symbolic Computation 24(3): 239-279 (2011). doi:10.1007/s10990-012-9084-5.

Gabriel Kerneis, Juliusz Chroboczek. Lambda-lifting and CPS conversion in an imperative language. Technical report, Université Paris Diderot (2012). hal-00669849.

Gabriel Kerneis, Juliusz Chroboczek. CPC: programming with a massive number of lightweight threads. PLACES'11 (2011). hal-00563369.

Matthieu Boutier, Gabriel Kerneis. Generating events with style. Unpublished draft (2012). arXiv:1210.4263

Gabriel Kerneis. CPC, compiling threads to events efficiently. ACACES'10, poster session (2010).
A0 poster (5,1 MB).

Gabriel Kerneis, Juliusz Chroboczek. Are events fast?. Technical report, Université Paris Diderot (2009). hal-00434374.
Experimental setup: how to benchmark a web server.

Gabriel Kerneis. CPC, des threads coopératifs par passage de continuation. M.Sc. thesis (2008).

I also supervised Matthieu Boutier, who worked as an undergraduate student on an alternative version of CPC where local variables are saved in environments rather than lambda-lifted. You might be interested in our article presenting the results and Matthieu's thesis (in French).

Matthieu Boutier. Sauvegarde de variables locales en CPC. Undergraduate thesis (2011).