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.
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.
Analysis and CPS Conversion for Safe, Portable, and Efficient
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.
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).