Georg Neis
Max Planck Society
Network
Latest external collaboration on country level. Dive into details by clicking on the dots.
Publication
Featured researches published by Georg Neis.
international conference on functional programming | 2015
Georg Neis; Chung-Kil Hur; Jan-Oliver Kaiser; Craig McLaughlin; Derek Dreyer; Viktor Vafeiadis
Compiler verification is essential for the construction of fully verified software, but most prior work (such as CompCert) has focused on verifying whole-program compilers. To support separate compilation and to enable linking of results from different verified compilers, it is important to develop a compositional notion of compiler correctness that is modular (preserved under linking), transitive (supports multi-pass compilation), and flexible (applicable to compilers that use different intermediate languages or employ non-standard program transformations). In this paper, building on prior work of Hur et al., we develop a novel approach to compositional compiler verification based on parametric inter-language simulations (PILS). PILS are modular: they enable compiler verification in a manner that supports separate compilation. PILS are transitive: we use them to verify Pilsner, a simple (but non-trivial) multi-pass optimizing compiler (programmed in Coq) from an ML-like source language S to an assembly-like target language T, going through a CPS-based intermediate language. Pilsner is the first multi-pass compiler for a higher-order imperative language to be compositionally verified. Lastly, PILS are flexible: we use them to additionally verify (1) Zwickel, a direct non-optimizing compiler for S, and (2) a hand-coded self-modifying T module, proven correct w.r.t. an S-level specification. The output of Zwickel and the self-modifying T module can then be safely linked together with the output of Pilsner. All together, this has been a significant undertaking, involving several person-years of work and over 55,000 lines of Coq.
conference on object-oriented programming systems, languages, and applications | 2011
Matthew A. Hammer; Georg Neis; Yan Chen; Umut A. Acar
Self-adjusting computation offers a language-based approach to writing programs that automatically respond to dynamically changing data. Recent work made significant progress in developing sound semantics and associated implementations of self-adjusting computation for high-level, functional languages. These techniques, however, do not address issues that arise for low-level languages, i.e., stack-based imperative languages that lack strong type systems and automatic memory management. In this paper, we describe techniques for self-adjusting computation which are suitable for low-level languages. Necessarily, we take a different approach than previous work: instead of starting with a high-level language with additional primitives to support self-adjusting computation, we start with a low-level intermediate language, whose semantics is given by a stack-based abstract machine. We prove that this semantics is sound: it always updates computations in a way that is consistent with full reevaluation. We give a compiler and runtime system for the intermediate language used by our abstract machine. We present an empirical evaluation that shows that our approach is efficient in practice, and performs favorably compared to prior proposals.
symposium on principles of programming languages | 2013
Chung-Kil Hur; Georg Neis; Derek Dreyer; Viktor Vafeiadis
symposium on principles of programming languages | 2012
Chung-Kil Hur; Derek Dreyer; Georg Neis; Viktor Vafeiadis
symposium on principles of programming languages | 2010
Derek Dreyer; Georg Neis; Andreas Rossberg; Lars Birkedal
Journal of Functional Programming | 2012
Derek Dreyer; Georg Neis; Lars Birkedal
Journal of Functional Programming | 2011
Georg Neis; Derek Dreyer; Andreas Rossberg
Archive | 2014
Chung-Kil Hur; Georg Neis; Derek Dreyer; Victor Vafeiadis
Archive | 2012
Chung-Kil Hur; Georg Neis; Derek Dreyer; Viktor Vafeiadis