0.4CYMay 25
What is 'undone computer science'?Chantal Enguehard, Guillaume Munch-Maccagnoni, Alberto Naibo
The concept of 'undone science' emerged in the 2010s in research in social sciences at the intersection of studies on social movements and of science and technology studies. It refers to research questions that are neglected, ignored, or left unfunded, even though they deserve to be explored. The aim of this special issue is to apply this concept to computer science, by examining whether the way this discipline is structured (including its sociological, economic, and political dimensions), as well as the paradigms that shape it, make it possible to identify epistemological and ethical questions that are crucial for its development and conception.
9.2PLApr 21
Linear effects, exceptions, and resource safety: a Curry-Howard correspondence for destructorsSidney Congard, Guillaume Munch-Maccagnoni, Rémi Douence
We analyse the problem of combining linearity, effects, and exceptions, in abstract models of programming languages, as the issue of providing some kind of strength for a monad $T(- \oplus E)$ in a linear setting. We consider in particular for $T$ the allocation monad, which we introduce to model and study resource-safety properties. We apply these results to a series of two linear effectful calculi for which we establish their resource-safety properties. The first calculus is a linear (optionally ordered) call-by-push-value language with two allocation effects $\mathbf{new}$ and $\mathbf{delete}$. The resource-safety properties follow from the linear and ordered character of the typing rules. We then integrate exceptions with linearity and effects by adjoining default destruction actions to types, as inspired by C++/Rust destructors. We see destructors as objects $δ: A\rightarrow TI$ in the slice category over $TI$. This construction gives rise to a second calculus, the resource call-by-push-value, featuring exceptions and destructors, and whose weakening and exchange rules perform side-effects. It is therefore affine at the level of types but ordered at the level of derivations. As in C++ and Rust, a ``move'' operation -- the side-effecting exchange rule -- is necessary for releasing resources in random order, as opposed to LIFO order.