Browse Source

Related work for CPS

master
Daniel Hillerström 5 years ago
parent
commit
669b708a79
  1. 32
      thesis.bib
  2. 87
      thesis.tex

32
thesis.bib

@ -51,6 +51,16 @@
year = {2017} year = {2017}
} }
# Delimited control in OCaml
@article{Kiselyov12,
author = {Oleg Kiselyov},
title = {Delimited control in OCaml, abstractly and concretely},
journal = {Theor. Comput. Sci.},
volume = {435},
pages = {56--76},
year = {2012}
}
# Segmented stacks # Segmented stacks
@inproceedings{HiebDB90, @inproceedings{HiebDB90,
author = {Robert Hieb and author = {Robert Hieb and
@ -319,6 +329,16 @@
year = {2020} year = {2020}
} }
@inproceedings{XieL20,
author = {Ningning Xie and
Daan Leijen},
title = {Effect handlers in Haskell, evidently},
booktitle = {Haskell@ICFP},
pages = {95--108},
publisher = {{ACM}},
year = {2020}
}
@phdthesis{Geron19, @phdthesis{Geron19,
author = {Bram Geron}, author = {Bram Geron},
title = {Defined Algebraic Operations}, title = {Defined Algebraic Operations},
@ -347,6 +367,18 @@
} }
# Effekt # Effekt
@article{BrachthauserSO20,
author = {Jonathan Immanuel Brachth{\"{a}}user and
Philipp Schuster and
Klaus Ostermann},
title = {Effekt: Capability-passing style for type- and effect-safe, extensible
effect handlers in Scala},
journal = {J. Funct. Program.},
volume = {30},
pages = {e8},
year = {2020}
}
@article{BrachthauserSO18, @article{BrachthauserSO18,
author = {Jonathan Immanuel Brachth{\"{a}}user and author = {Jonathan Immanuel Brachth{\"{a}}user and
Philipp Schuster and Philipp Schuster and

87
thesis.tex

@ -9817,18 +9817,17 @@ forwards every operation, and the pure continuation $\rid$ is an
identity clause. Thus every operation and the return value will identity clause. Thus every operation and the return value will
effectively be handled by the next handler. effectively be handled by the next handler.
% %
Unfortunately, inserting such dummy handlers lead to memory
leaks.
Unfortunately, insertion of such identity handlers lead to memory
leaks~\cite{Kiselyov12,HillerstromL18}.
% %
\dhil{Give the counting example}
% \dhil{Give the counting example}
% %
The use of dummy handlers is symptomatic for the need of a more
general notion of resumptions. Upon resumption invocation the dangling
pure continuation should be composed with the current pure
The use of identity handlers is symptomatic for the need of a more
general notion of resumptions. During resumption invocation the
dangling pure continuation should be composed with the current pure
continuation which suggests the need for a shallow variation of the continuation which suggests the need for a shallow variation of the
resumption construction primitive $\Res$ that behaves along the
following lines.
resumption construction primitive $\Res$.
% %
\[ \[
\bl \bl
@ -9981,7 +9980,10 @@ macro-expressible in terms of the existing constructs.
I choose here to treat them as primitives in order to keep the I choose here to treat them as primitives in order to keep the
presentation relatively concise. presentation relatively concise.
\dhil{Remark that a `generalised continuation' is a defunctionalised continuation.}
Essentially, a generalised continuation amounts to a sort of
\emph{defunctionalised} continuation, where $\kapp$ acts as an
interpreter for the continuation
structure~\cite{Reynolds98a,DanvyN01}.
\subsection{Dynamic terms: the target calculus revisited} \subsection{Dynamic terms: the target calculus revisited}
\label{sec:target-calculus-revisited} \label{sec:target-calculus-revisited}
@ -10606,8 +10608,67 @@ time an effect continuation frame is deconstructed.
\section{Related work} \section{Related work}
\label{sec:cps-related-work} \label{sec:cps-related-work}
\paragraph{Plotkin's colon translation}
\paragraph{CPS transforms for effect handlers}
%
The one-pass higher-order CPS translation for deep, shallow, and
parameterised handlers draws on insights from the literature on CPS
translations for delimited control operators such as shift and
reset~\citep{DanvyF90,DanvyF92,DanvyN03,MaterzokB12}.
%
% \citet{DybvigJS07} develop a lean monadic framework for implementing
% multi-prompt delimited continuations.
% \paragraph{CPS translations for handlers}
%
Other CPS translations for handlers use a monadic approach. For
example, \citet{Leijen17} implements deep and parameterised handlers
in Koka~\citep{Leijen14} by translating them into a free monad
primitive in the runtime. \citeauthor{Leijen17} uses a selective CPS
translation to lift code into the monad. The selective aspect is
important in practice to avoid overhead in code that does not use
effect handlers.
%
Scala Effekt~\citep{BrachthauserS17,BrachthauserSO20} provides an
implementation of effect handlers as a library for the Scala
programming language. The implementation is based closely on the
monadic delimited control framework of \citet{DybvigJS07}.
%
A variation of the Scala Effekt library is used to implement effect
handlers as an interface for programming with delimited continuations
in Java~\citep{BrachthauserSO18}. The implementation of delimited
continuations depend on special byte code instructions, inserted via a
selective type-driven CPS translation.
The Effekt language (which is distinct from the Effekt library)
implements handlers by a translation into capability-passing style,
which may more informatively be dubbed \emph{handler-passing style} as
handlers are passed downwards to the invocation sites of their
respective operations~\cite{SchusterBO20,BrachthauserSO20b}. The
translation into capability-passing style is realised by way of a
effect-type directed iterated CPS transform, which introduces a
continuation argument per handler in scope~\cite{SchusterBO20}. The
idea of iterated CPS is due to \citet{DanvyF90}, who used it to give
develop a CPS transform for shift and reset.
%
\citet{XieBHSL20} has devised an \emph{evidence-passing translation}
for deep effect handlers. The basic idea is similar to
capability-passing style as evidence for handlers are passed downwards
to their operations in shape of a vector containing the handlers in
scope through computations.
There are clear connections between the CPS translations presented in
this chapter and the continuation monad implementation of
\citet{KammarLO13}. Whereas \citeauthor{KammarLO13} present a
practical Haskell implementation depending on sophisticated features
such as type classes, which to some degree obscures the essential
structure, here we have focused on a foundational formal treatment.
%
\citeauthor{KammarLO13} obtain impressive performance results by
taking advantage of the second class nature of type classes in Haskell
coupled with the aggressive fusion optimisations GHC
performs~\citep{WuS15}.
\paragraph{Plotkin's colon translation}
%
The original method for proving the correctness of a CPS The original method for proving the correctness of a CPS
translation is by way of a simulation result. Simulation states that translation is by way of a simulation result. Simulation states that
every reduction sequence in a given source program is mimicked by its every reduction sequence in a given source program is mimicked by its
@ -10633,7 +10694,7 @@ The colon translation captures precisely the intuition that drives CPS
transforms, namely, that if in the source $M \reducesto^\ast \Return\;V$ transforms, namely, that if in the source $M \reducesto^\ast \Return\;V$
then in the image $\cps{M}\,k \reducesto^\ast k\,\cps{V}$. then in the image $\cps{M}\,k \reducesto^\ast k\,\cps{V}$.
\dhil{Check whether the first pass marks administrative redexes}
%\dhil{Check whether the first pass marks administrative redexes}
% CPS The colon translation captures the % CPS The colon translation captures the
@ -10667,9 +10728,9 @@ then in the image $\cps{M}\,k \reducesto^\ast k\,\cps{V}$.
% translation that contracts all administrative redexes at translation % translation that contracts all administrative redexes at translation
% time. % time.
\paragraph{Iterated CPS transform}
% \paragraph{Partial evaluation}
\paragraph{Partial evaluation}
\paragraph{Selective CPS transforms}
\chapter{Abstract machine semantics} \chapter{Abstract machine semantics}
\label{ch:abstract-machine} \label{ch:abstract-machine}

Loading…
Cancel
Save