Building White-Box Abstractions by Program Refinement
Abstractions make building complex systems possible. Many facilities provided by a modern programming language are directly designed to build a certain style of abstraction. Abstractions also aim to
enhance code reusability, thus enhancing programmer productivity and effectiveness.
Real-world software systems can grow to have a complicated hierarchy of abstractions. Often, the hierarchy grows unnecessarily deep, because the programmers have envisioned the most generic use cases for a piece of code to make it reusable. Sometimes, the abstractions used in the program are not the appropriate ones, and it would be
simpler for the higher level client to circumvent such abstractions. Another problem is the impedance mismatch between different pieces of code or libraries coming from different projects that are not designed to work together. Interoperability between such libraries are often hindered by abstractions, by design, in the name of hiding implementation details and encapsulation. These problems necessitate forms of abstraction that are easy to manipulate if needed.
In this paper, we describe a powerful mechanism to create white-box abstractions, that encourage flatter hierarchies of abstraction and ease of manipulation and customization when necessary: program refinement.
In so doing, we rely on the basic principle that writing directly in the host programming language is as least restrictive as one can get in terms of expressiveness, and allow the programmer to reuse and customize existing code snippets to address their specific needs.
Wed 2 Nov
|15:40 - 16:05|
|16:05 - 16:30|
|16:30 - 16:55|
Heather MillerEcole Polytechnique Federale de Lausanne, Philipp HallerKTH Royal Institute of Technology, Normen Müller, Jocelyn BoullierEPFL, Jorge Vicente-CanteroEPFLDOI
|16:55 - 17:20|