Abstract: | We present the call-by-push-value (CBPV) calculus, which decomposes the typed call-by-value (CBV) and typed call-by-name (CBN)
paradigms into fine-grain primitives. On the operational side, we give big-step semantics and a stack machine for CBPV, which
leads to a straightforward push/pop reading of CBPV programs. On the denotational side, we model CBPV using cpos and, more
generally, using algebras for a strong monad. For storage, we present an O’Hearn-style “behaviour semantics’’ that does not
use a monad.
We present the translations from CBN and CBV to CBPV. All these translations straightforwardly preserve denotational semantics.
We also study their operational properties: simulation and full abstraction.
We give an equational theory for CBPV, and show it equivalent to a categorical semantics using monads and algebras. We use
this theory to formally compare CBPV to Filinski’s variant of the monadic metalanguage, as well as to Marz’s language SFPL,
both of which have essentially the same type structure as CBPV. We also discuss less formally the differences between the
CBPV and monadic frameworks. |