mirror of
https://github.com/dhil/phd-dissertation
synced 2026-03-13 02:58:26 +00:00
Compare commits
2 Commits
48ed305a8e
...
99b42ee7f1
| Author | SHA1 | Date | |
|---|---|---|---|
| 99b42ee7f1 | |||
| 0a13628c16 |
141
thesis.bib
141
thesis.bib
@@ -4,7 +4,7 @@
|
|||||||
@MastersThesis{Hillerstrom15,
|
@MastersThesis{Hillerstrom15,
|
||||||
author = {Daniel Hillerström},
|
author = {Daniel Hillerström},
|
||||||
title = {Handlers for Algebraic Effects in {Links}},
|
title = {Handlers for Algebraic Effects in {Links}},
|
||||||
school = {School of Informatics, the University of Edinburgh},
|
school = {School of Informatics, The University of Edinburgh},
|
||||||
address = {Scotland},
|
address = {Scotland},
|
||||||
month = aug,
|
month = aug,
|
||||||
year = 2015
|
year = 2015
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
@MastersThesis{Hillerstrom16,
|
@MastersThesis{Hillerstrom16,
|
||||||
author = {Daniel Hillerström},
|
author = {Daniel Hillerström},
|
||||||
title = {Compilation of Effect Handlers and their Applications in Concurrency},
|
title = {Compilation of Effect Handlers and their Applications in Concurrency},
|
||||||
school = {School of Informatics, the University of Edinburgh},
|
school = {School of Informatics, The University of Edinburgh},
|
||||||
address = {Scotland},
|
address = {Scotland},
|
||||||
optmonth = aug,
|
optmonth = aug,
|
||||||
year = 2016,
|
year = 2016,
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
|
|
||||||
# Links compiler + Multicore OCaml
|
# Links compiler + Multicore OCaml
|
||||||
@Misc{HillerstromLS16,
|
@Misc{HillerstromLS16,
|
||||||
author = {Daniel Hillerström and Sam Lindley and KC Sivaramakrishnan},
|
author = {Daniel Hillerström and Sam Lindley and {KC} Sivaramakrishnan},
|
||||||
title = {Compiling {Links} Effect Handlers to the {OCaml} Backend},
|
title = {Compiling {Links} Effect Handlers to the {OCaml} Backend},
|
||||||
year = {2016},
|
year = {2016},
|
||||||
optmonth = sep,
|
optmonth = sep,
|
||||||
@@ -81,6 +81,25 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Core references on handlers
|
# Core references on handlers
|
||||||
|
@phdthesis{Pretnar10,
|
||||||
|
author = {Matija Pretnar},
|
||||||
|
title = {Logic and handling of algebraic effects},
|
||||||
|
school = {The University of Edinburgh, {UK}},
|
||||||
|
year = {2010}
|
||||||
|
}
|
||||||
|
|
||||||
|
@inproceedings{PlotkinP09,
|
||||||
|
author = {Gordon D. Plotkin and
|
||||||
|
Matija Pretnar},
|
||||||
|
title = {Handlers of Algebraic Effects},
|
||||||
|
booktitle = {{ESOP}},
|
||||||
|
series = {Lecture Notes in Computer Science},
|
||||||
|
volume = {5502},
|
||||||
|
pages = {80--94},
|
||||||
|
publisher = {Springer},
|
||||||
|
year = {2009}
|
||||||
|
}
|
||||||
|
|
||||||
@article{PlotkinP13,
|
@article{PlotkinP13,
|
||||||
author = {Gordon D. Plotkin and
|
author = {Gordon D. Plotkin and
|
||||||
Matija Pretnar},
|
Matija Pretnar},
|
||||||
@@ -191,6 +210,49 @@
|
|||||||
year = {2019}
|
year = {2019}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@article{HillerstromLL20,
|
||||||
|
author = {Daniel Hillerstr{\"{o}}m and
|
||||||
|
Sam Lindley and
|
||||||
|
John Longley},
|
||||||
|
title = {Effects for Efficiency: Asymptotic Speedup with First-Class Control},
|
||||||
|
journal = {Proc. {ACM} Program. Lang.},
|
||||||
|
volume = {4},
|
||||||
|
number = {{ICFP}},
|
||||||
|
pages = {100:1--100:29},
|
||||||
|
year = {2020}
|
||||||
|
}
|
||||||
|
|
||||||
|
@phdthesis{McLaughlin20,
|
||||||
|
author = {Craig McLaughlin},
|
||||||
|
title = {Relational Reasoning for Effects and Handlers},
|
||||||
|
school = {The University of Edinburgh, {UK}},
|
||||||
|
year = {2020}
|
||||||
|
}
|
||||||
|
|
||||||
|
@phdthesis{Fowler19,
|
||||||
|
author = {Simon Fowler},
|
||||||
|
title = {Typed concurrent functional programming with channels, actors and sessions},
|
||||||
|
school = {The University of Edinburgh, {UK}},
|
||||||
|
year = {2019}
|
||||||
|
}
|
||||||
|
|
||||||
|
@phdthesis{Kammar14,
|
||||||
|
author = {Ohad Kammar},
|
||||||
|
title = {Algebraic theory of type-and-effect systems},
|
||||||
|
school = {The University of Edinburgh, {UK}},
|
||||||
|
year = {2014}
|
||||||
|
}
|
||||||
|
|
||||||
|
@inproceedings{KammarP12,
|
||||||
|
author = {Ohad Kammar and
|
||||||
|
Gordon D. Plotkin},
|
||||||
|
title = {Algebraic foundations for effect-dependent optimisations},
|
||||||
|
booktitle = {{POPL}},
|
||||||
|
pages = {349--360},
|
||||||
|
publisher = {{ACM}},
|
||||||
|
year = {2012}
|
||||||
|
}
|
||||||
|
|
||||||
# Eff
|
# Eff
|
||||||
@article{BauerP15,
|
@article{BauerP15,
|
||||||
author = {Andrej Bauer and
|
author = {Andrej Bauer and
|
||||||
@@ -615,7 +677,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Misc{KiselyovS16,
|
@Misc{KiselyovS16,
|
||||||
author = {Oleg Kiselyov and KC Sivaramakrishnan},
|
author = {Oleg Kiselyov and {KC} Sivaramakrishnan},
|
||||||
title = {Eff directly in {OCaml}},
|
title = {Eff directly in {OCaml}},
|
||||||
year = {2016},
|
year = {2016},
|
||||||
optmonth = sep,
|
optmonth = sep,
|
||||||
@@ -681,12 +743,12 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
% CPS for effect handlers
|
# CPS for effect handlers
|
||||||
@inproceedings{HillerstromLAS17,
|
@inproceedings{HillerstromLAS17,
|
||||||
author = {Daniel Hillerstr{\"{o}}m and
|
author = {Daniel Hillerstr{\"{o}}m and
|
||||||
Sam Lindley and
|
Sam Lindley and
|
||||||
Robert Atkey and
|
Robert Atkey and
|
||||||
K. C. Sivaramakrishnan},
|
{KC} Sivaramakrishnan},
|
||||||
title = {Continuation Passing Style for Effect Handlers},
|
title = {Continuation Passing Style for Effect Handlers},
|
||||||
booktitle = {{FSCD}},
|
booktitle = {{FSCD}},
|
||||||
series = {LIPIcs},
|
series = {LIPIcs},
|
||||||
@@ -696,7 +758,30 @@
|
|||||||
year = {2017}
|
year = {2017}
|
||||||
}
|
}
|
||||||
|
|
||||||
% CEK
|
@inproceedings{HillerstromL18,
|
||||||
|
author = {Daniel Hillerstr{\"{o}}m and
|
||||||
|
Sam Lindley},
|
||||||
|
title = {Shallow Effect Handlers},
|
||||||
|
booktitle = {{APLAS}},
|
||||||
|
series = {Lecture Notes in Computer Science},
|
||||||
|
volume = {11275},
|
||||||
|
pages = {415--435},
|
||||||
|
publisher = {Springer},
|
||||||
|
year = {2018}
|
||||||
|
}
|
||||||
|
|
||||||
|
@article{HillerstromLA20,
|
||||||
|
author = {Daniel Hillerstr{\"{o}}m and
|
||||||
|
Sam Lindley and
|
||||||
|
Robert Atkey},
|
||||||
|
title = {Effect handlers via generalised continuations},
|
||||||
|
journal = {J. Funct. Program.},
|
||||||
|
volume = {30},
|
||||||
|
pages = {e5},
|
||||||
|
year = {2020}
|
||||||
|
}
|
||||||
|
|
||||||
|
# CEK
|
||||||
@InProceedings{FelleisenF86,
|
@InProceedings{FelleisenF86,
|
||||||
title={Control Operators, the {SECD}-machine, and the $\lambda$-Calculus},
|
title={Control Operators, the {SECD}-machine, and the $\lambda$-Calculus},
|
||||||
author={Felleisen, Matthias and Friedman, Daniel P.},
|
author={Felleisen, Matthias and Friedman, Daniel P.},
|
||||||
@@ -721,7 +806,7 @@
|
|||||||
year = {2018}
|
year = {2018}
|
||||||
}
|
}
|
||||||
|
|
||||||
% explicit effect subtyping
|
# explicit effect subtyping
|
||||||
@inproceedings{SalehKPS18,
|
@inproceedings{SalehKPS18,
|
||||||
author = {Amr Hany Saleh and
|
author = {Amr Hany Saleh and
|
||||||
Georgios Karachalias and
|
Georgios Karachalias and
|
||||||
@@ -1029,3 +1114,43 @@
|
|||||||
publisher = {Free Software Foundation},
|
publisher = {Free Software Foundation},
|
||||||
address = {Boston, MA, USA}
|
address = {Boston, MA, USA}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Expressiveness
|
||||||
|
@inproceedings{CartwrightF92,
|
||||||
|
author = {Robert Cartwright and
|
||||||
|
Matthias Felleisen},
|
||||||
|
title = {Observable Sequentiality and Full Abstraction},
|
||||||
|
booktitle = {{POPL}},
|
||||||
|
pages = {328--342},
|
||||||
|
publisher = {{ACM} Press},
|
||||||
|
year = {1992}
|
||||||
|
}
|
||||||
|
|
||||||
|
@book{LongleyN15,
|
||||||
|
author = {John Longley and
|
||||||
|
Dag Normann},
|
||||||
|
title = {Higher-Order Computability},
|
||||||
|
series = {Theory and Applications of Computability},
|
||||||
|
publisher = {Springer},
|
||||||
|
year = {2015}
|
||||||
|
}
|
||||||
|
|
||||||
|
@inproceedings{Longley08,
|
||||||
|
author = {John Longley},
|
||||||
|
title = {Interpreting Localized Computational Effects Using Operators of Higher
|
||||||
|
Type},
|
||||||
|
booktitle = {CiE},
|
||||||
|
series = {Lecture Notes in Computer Science},
|
||||||
|
volume = {5028},
|
||||||
|
pages = {389--402},
|
||||||
|
publisher = {Springer},
|
||||||
|
year = {2008}
|
||||||
|
}
|
||||||
|
|
||||||
|
@misc{LongleyW08,
|
||||||
|
author = {John Longley and Nicholas Wolverson},
|
||||||
|
title = {Eriskay: a programming language based on game semantics},
|
||||||
|
month = apr,
|
||||||
|
year = 2008,
|
||||||
|
howpublished = {Presented at {GaLoP III}}
|
||||||
|
}
|
||||||
57
thesis.tex
57
thesis.tex
@@ -8,6 +8,8 @@
|
|||||||
\usepackage[breaklinks]{hyperref} % Interactive PDF
|
\usepackage[breaklinks]{hyperref} % Interactive PDF
|
||||||
\usepackage{url}
|
\usepackage{url}
|
||||||
\usepackage[sort&compress,square,numbers]{natbib} % Bibliography
|
\usepackage[sort&compress,square,numbers]{natbib} % Bibliography
|
||||||
|
\usepackage{bibentry} % Print bibliography entries inline.
|
||||||
|
\nobibliography* % use the bibliographic data from the standard BibTeX setup.
|
||||||
\usepackage{breakurl}
|
\usepackage{breakurl}
|
||||||
\usepackage{amsmath} % Mathematics library
|
\usepackage{amsmath} % Mathematics library
|
||||||
\usepackage{amssymb} % Provides math fonts
|
\usepackage{amssymb} % Provides math fonts
|
||||||
@@ -181,6 +183,19 @@
|
|||||||
contained herein is my own except where explicitly stated otherwise
|
contained herein is my own except where explicitly stated otherwise
|
||||||
in the text, and that this work has not been submitted for any other
|
in the text, and that this work has not been submitted for any other
|
||||||
degree or professional qualification except as specified.
|
degree or professional qualification except as specified.
|
||||||
|
|
||||||
|
The following previously published work of mine features prominently
|
||||||
|
within this dissertation. Each chapter details the relevant
|
||||||
|
relations to my previous work.
|
||||||
|
%
|
||||||
|
\begin{itemize}
|
||||||
|
\item \bibentry{HillerstromL16}
|
||||||
|
\item \bibentry{HillerstromLAS17}
|
||||||
|
\item \bibentry{HillerstromL18}
|
||||||
|
\item \bibentry{HillerstromLA20}
|
||||||
|
\item \bibentry{HillerstromLL20}
|
||||||
|
\end{itemize}
|
||||||
|
%
|
||||||
\end{declaration}
|
\end{declaration}
|
||||||
|
|
||||||
%% Finally, a dedication (this is optional -- uncomment the following line if
|
%% Finally, a dedication (this is optional -- uncomment the following line if
|
||||||
@@ -222,6 +237,13 @@ library.
|
|||||||
|
|
||||||
\section{Why first-class control matters}
|
\section{Why first-class control matters}
|
||||||
|
|
||||||
|
\subsection{Flavours of control}
|
||||||
|
\paragraph{Undelimited control}
|
||||||
|
\paragraph{Delimited control}
|
||||||
|
\paragraph{Composable control}
|
||||||
|
|
||||||
|
\subsection{Why effect handlers}
|
||||||
|
|
||||||
\section{Thesis outline}
|
\section{Thesis outline}
|
||||||
Thesis outline\dots
|
Thesis outline\dots
|
||||||
|
|
||||||
@@ -1995,7 +2017,7 @@ getting stuck on an unhandled operation.
|
|||||||
$\typ{\Gamma}{M' : C}$.
|
$\typ{\Gamma}{M' : C}$.
|
||||||
\end{theorem}
|
\end{theorem}
|
||||||
|
|
||||||
\section{Deep handlers in action: \OSname}
|
\section{\OSname{} in 50 lines of code or less}
|
||||||
\label{sec:deep-handlers-in-action}
|
\label{sec:deep-handlers-in-action}
|
||||||
|
|
||||||
A systems software engineering reading of effect handlers may be to
|
A systems software engineering reading of effect handlers may be to
|
||||||
@@ -2435,7 +2457,7 @@ process, whilst its clone is referred to as the child process.
|
|||||||
Following an invocation of fork, the parent process is provided with a
|
Following an invocation of fork, the parent process is provided with a
|
||||||
nonzero identifier for the child process and the child process is
|
nonzero identifier for the child process and the child process is
|
||||||
provided with the zero identifier. This enables processes to determine
|
provided with the zero identifier. This enables processes to determine
|
||||||
their respective roles in the parent-child relationship, e.g.
|
their respective role in the parent-child relationship, e.g.
|
||||||
%
|
%
|
||||||
\[
|
\[
|
||||||
\bl
|
\bl
|
||||||
@@ -2447,7 +2469,9 @@ their respective roles in the parent-child relationship, e.g.
|
|||||||
\]
|
\]
|
||||||
%
|
%
|
||||||
In our system, we can model fork as an effectful operation, that
|
In our system, we can model fork as an effectful operation, that
|
||||||
returns a boolean to indicate the process role.
|
returns a boolean to indicate the process role; by convention we will
|
||||||
|
interpret the return value $\True$ to mean that the process assumes
|
||||||
|
the role of parent.
|
||||||
%
|
%
|
||||||
\[
|
\[
|
||||||
\bl
|
\bl
|
||||||
@@ -2456,20 +2480,18 @@ returns a boolean to indicate the process role.
|
|||||||
\el
|
\el
|
||||||
\]
|
\]
|
||||||
%
|
%
|
||||||
By convention we will interpret the return value $\True$ to mean that
|
|
||||||
the process is a parent.
|
|
||||||
%
|
|
||||||
In \UNIX{} the parent process \emph{continues} execution after the
|
In \UNIX{} the parent process \emph{continues} execution after the
|
||||||
fork point, and the child process \emph{begins} its execution after
|
fork point, and the child process \emph{begins} its execution after
|
||||||
the fork point.
|
the fork point.
|
||||||
%
|
%
|
||||||
Thus, operationally, we may understand fork as returning twice. We can
|
Thus, operationally, we may understand fork as returning twice to its
|
||||||
implement this behaviour by invoking the resumption arising from an
|
invocation site. We can implement this behaviour by invoking the
|
||||||
invocation of $\Fork$ twice: first with $\True$ to continue the parent
|
resumption arising from an invocation of $\Fork$ twice: first with
|
||||||
process, and subsequently with $\False$ to continue the child process
|
$\True$ to continue the parent process, and subsequently with $\False$
|
||||||
(or the other way around if we feel inclined).
|
to start the child process (or the other way around if we feel
|
||||||
|
inclined).
|
||||||
%
|
%
|
||||||
The following handler realises this behaviour.
|
The following handler implements this behaviour.
|
||||||
%
|
%
|
||||||
\[
|
\[
|
||||||
\bl
|
\bl
|
||||||
@@ -2961,17 +2983,12 @@ The following handler realises this behaviour.
|
|||||||
bar
|
bar
|
||||||
\end{example}
|
\end{example}
|
||||||
|
|
||||||
\section{Flavours of control}
|
% \chapter{N-ary handlers}
|
||||||
\subsection{Undelimited control}
|
% \label{ch:multi-handlers}
|
||||||
\subsection{Delimited control}
|
|
||||||
\subsection{Composable control}
|
|
||||||
|
|
||||||
\chapter{N-ary handlers}
|
|
||||||
\label{ch:multi-handlers}
|
|
||||||
|
|
||||||
% \section{Syntax and Static Semantics}
|
% \section{Syntax and Static Semantics}
|
||||||
% \section{Dynamic Semantics}
|
% \section{Dynamic Semantics}
|
||||||
\section{Unifying deep and shallow handlers}
|
% \section{Unifying deep and shallow handlers}
|
||||||
|
|
||||||
\part{Implementation}
|
\part{Implementation}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user