Award

Unifying Theories of Generic Programming

Description: The world is increasingly dependent on robust, reliable software that meets its specification. At the same time, software has to be delivered at an increasingly faster rate. As a consequence, the software industry, especially in Europe and the UK, is facing a growing tension between productivity and reliability. Generic programming aims at relieving this tension. The vision of this project is to develop a unifying theory of generic programming that will inform the design of future programming languages. Our goal is to produce a body of work that is in the same vein as the seminal work on Unifying Theories of Programming by Hoare and He: we consider the outcome of this project to be a unified foundation for generic programming that brings together the advantages of previous work into a coherent whole. From the perspective of increasing programmer productivity, the importance of understanding and applying generic programming has never been so critical. Software engineers are constantly faced with the challenge of adapting to changing specifications and designs, while ensuring that the ensuing refactoring maintains the correctness of the algorithms they have crafted. Our approach to solving this problem - generic programming - exploits the inherent structure that exists in data, where this structure can be used to automatically produce efficient and flexible algorithms that can be adapted to suit different needs. Furthermore, generic programs ensure that the structure of the data itself plays a central role in maintaining the correctness of these algorithms. The functional programming language Haskell offers rudimentary support for generic programming in the form of the deriving mechanism. Instead of manually coding, for example, equality for a datatype, the Haskell programmer attaches a simple hint to the datatype declaration which instructs the compiler to auto-generate equality and inequality for the datatype. Simple, convenient and robust. If the datatype is changed at a later point in time, equality and inequality are modified accordingly behind the scenes, supporting software evolution and easing software maintenance. Haskell's support for generic programming is only partial, as the deriving mechanism is limited to a few predefined classes. In particular, one cannot define new derivable classes. This is exactly what generic programming supports. Informally, a derivable or generic function is defined by induction on the structure of types. The generic programmer provides code for a few type constructs, the rest is taken care of automatically. The generic program can then be instantiated many times at different types. The last two decades have witnessed a number of approaches to generic programming differing in convenience, expressiveness and efficiency. We can roughly distinguish two main approaches: algebraic and type-theoretic ones. Both come with their various strengths and weaknesses. This project seeks to generalise and unify the two approaches, combining their individual strengths. It will do so using methods from a branch of mathematics called Category Theory. Furthermore, the project will explore novel approaches for the specification of generic programs, provide the infrastructure for reasoning about generic programs, and demonstrate that GP has far-reaching and important applications in practice.
Amount: £574,900
Funding type: research
Start date: 2012-02-01
End date: 2015-07-30
Subfield: Software
Funded outputs count: 45
Funder award ID: EP/J010995/1
OpenAlex ID: G7992805444
2019 · Jeremy Gibbons
2018 · Jeremy Gibbons, Fritz Henglein, et al. · Proceedings of the ACM on Programming Languages · 17
2016 · Jeremy Gibbons · ACM SIGPLAN Notices · 1
2016 · Jeremy Gibbons · 7
2016 · Maciej Piróg, Jeremy Gibbons · Electronic Proceedings in Theoretical Computer Science · 1
2016 · Ralf Hinze, Dan Marsden · Journal of Logical and Algebraic Methods in Programming · 14
2016 · RALF HINZE, NICOLAS WU · Journal of Functional Programming · 5
2016 · Jeremy Gibbons · Lecture notes in computer science · 14
2016 · Ralf Hinze, Dan Marsden · Lecture notes in computer science · 2
2015 · Jeremy Gibbons · Journal of Logical and Algebraic Methods in Programming · 8
2015 · Michael D. Adams, Andrew Farmer, et al. · Science of Computer Programming · 4
2015 · Ralf Hinze, Nicolas Wu, et al. · ACM SIGPLAN Notices · 5
2015 · Pirog, Maciej, Wu, Nicolas, et al. · DROPS (Schloss Dagstuhl – Leibniz Center for Informatics) · 6
2015 · José Pedro Magalhães, Andres Löh · Lecture notes in computer science · 2
2015 · Jeremy Gibbons · Lecture notes in computer science · 22
2014 · Ralf Hinze, Nicolas Wu, et al. · ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL) · 17
2014 · Maciej Piróg, Jeremy Gibbons · Electronic Notes in Theoretical Computer Science · 37
2014 · Tom Schrijvers, Nicolas Wu, et al. · International Symposium on Principles and Practice of Declarative Programming (PPDP) · 18
2014 · Nicolas Wu, Tom Schrijvers, et al. · ACM SIGPLAN Notices · 8
2014 · Nicolas Wu, Tom Schrijvers, et al. · International Symposium on Haskell · 86
2014 · José Pedro Magalhães, Hendrik Vincent Koops · 3
2014 · Jeremy Gibbons, Nicolas Wu · ACM SIGPLAN International Conference on Functional Programming (ICFP) · 83
2014 · Jeremy Gibbons, Nicolas Wu · ACM SIGPLAN Notices · 16
2014 · Michael D. Adams, Andrew Farmer, et al. · ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation (PEPM) · 12
2014 · Jeremy Gibbons · Oxford University Research Archive (ORA) (University of Oxford)
Year
Topic