My PhD dissertation at the University of Edinburgh, Scotland https://www.dhil.net/research/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

371 lines
12 KiB

8 years ago
%% 12pt font size, PhD thesis, LFCS, print twosided, new chapters on right page
6 years ago
\documentclass[12pt,phd,lfcs,twoside,openright,logo,leftchapter,normalheadings]{infthesis}
8 years ago
\shieldtype{0}
%% Packages
\usepackage[utf8]{inputenc} % Enable UTF-8 typing
\usepackage[british]{babel} % British English
\usepackage[breaklinks]{hyperref} % Interactive PDF
\usepackage{url}
\usepackage[sort&compress,square,numbers]{natbib} % Bibliography
8 years ago
\usepackage{breakurl}
\usepackage{amsmath} % Mathematics library
\usepackage{amssymb} % Provides math fonts
\usepackage{amsthm} % Provides \newtheorem, \theoremstyle, etc.
\usepackage{mathtools}
\usepackage{pkgs/mathpartir} % Inference rules
\usepackage{stmaryrd} % semantic brackets
\usepackage{array}
\usepackage{float} % Float control
\usepackage{caption,subcaption} % Sub figures support
\DeclareCaptionFormat{underlinedfigure}{#1#2#3\hrulefill}
\captionsetup[figure]{format=underlinedfigure}
8 years ago
\usepackage[T1]{fontenc} % Fixes font issues
%\usepackage{lmodern}
\usepackage[activate=true,
final,
tracking=true,
kerning=true,
spacing=true,
factor=1100,
stretch=10,
shrink=10]{microtype}
8 years ago
\usepackage{enumerate} % Customise enumerate-environments
\usepackage{xcolor} % Colours
6 years ago
\usepackage{xspace} % Smart spacing in commands.
8 years ago
\usepackage{tikz}
\usetikzlibrary{fit,calc,trees,positioning,arrows,chains,shapes.geometric,%
decorations.pathreplacing,decorations.pathmorphing,shapes,%
matrix,shapes.symbols,intersections}
6 years ago
\SetProtrusion{encoding={*},family={bch},series={*},size={6,7}}
{1={ ,750},2={ ,500},3={ ,500},4={ ,500},5={ ,500},
6={ ,500},7={ ,600},8={ ,500},9={ ,500},0={ ,500}}
\SetExtraKerning[unit=space]
{encoding={*}, family={bch}, series={*}, size={footnotesize,small,normalsize}}
{\textendash={400,400}, % en-dash, add more space around it
"28={ ,150}, % left bracket, add space from right
"29={150, }, % right bracket, add space from left
\textquotedblleft={ ,150}, % left quotation mark, space from right
\textquotedblright={150, }} % right quotation mark, space from left
6 years ago
%%
%% Load macros.
%%
\input{macros}
6 years ago
8 years ago
%% Information about the title, etc.
% \title{Higher-Order Theories of Handlers for Algebraic Effects}
% \title{Handlers for Algebraic Effects: Applications, Compilation, and Expressiveness}
% \title{Applications, Compilation, and Expressiveness for Effect Handlers}
% \title{Handling Computational Effects}
6 years ago
% \title{Programming Computable Effectful Functions}
% \title{Handling Effectful Computations}
\title{Foundations for Programming and Implementing Effect Handlers}
8 years ago
\author{Daniel Hillerström}
%% If the year of submission is not the current year, uncomment this line and
8 years ago
%% specify it here:
\submityear{2020}
%% Specify the abstract here.
\abstract{%
An abstract\dots
}
%% Now we start with the actual document.
\begin{document}
\raggedbottom
%% First, the preliminary pages
\begin{preliminary}
%% This creates the title page
\maketitle
%% Acknowledgements
\begin{acknowledgements}
List of people to thank
\begin{itemize}
\item Sam Lindley
\item John Longley
\item Christophe Dubach
\item KC Sivaramakrishnan
\item Stephen Dolan
\item Anil Madhavapeddy
\item Gemma Gordon
\item Leo White
\item Andreas Rossberg
\item Robert Atkey
\item Jeremy Yallop
\item Simon Fowler
\item Craig McLaughlin
\item Garrett Morris
\item James McKinna
\item Brian Campbell
\item Paul Piho
\item Amna Shahab
\item Gordon Plotkin
\item Ohad Kammar
\item School of Informatics (funding)
\item Google (Kevin Millikin, Dmitry Stefantsov)
\item Microsoft Research (Daan Leijen)
8 years ago
\end{itemize}
\end{acknowledgements}
%% Next we need to have the declaration.
% \standarddeclaration
\begin{declaration}
I declare that this thesis was composed by myself, that the work
contained herein is my own except where explicitly stated otherwise
in the text, and that this work has not been submitted for any other
degree or professional qualification except as specified.
\end{declaration}
8 years ago
%% Finally, a dedication (this is optional -- uncomment the following line if
%% you want one).
% \dedication{To my mummy.}
\dedication{\emph{To be or to do}}
8 years ago
% \begin{preface}
% A preface will possibly appear here\dots
% \end{preface}
%% Create the table of contents
\setcounter{secnumdepth}{2} % Numbering on sections and subsections
\setcounter{tocdepth}{1} % Show chapters, sections and subsections in TOC
%\singlespace
\tableofcontents
%\doublespace
%% If you want a list of figures or tables, uncomment the appropriate line(s)
% \listoffigures
% \listoftables
\end{preliminary}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Main content %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% Introduction
%%
\chapter{Introduction}
\label{ch:introduction}
An enthralling introduction\dots
%
Motivation: 1) compiler perspective: unifying control abstraction,
lean runtime, desugaring of async/await, generators/iterators, 2)
giving control to programmers, safer microkernels, everything as a
library.
8 years ago
\section{Thesis outline}
Thesis outline\dots
\section{Typographical conventions}
Explain conventions\dots
\part{Background}
\label{p:background}
6 years ago
\chapter{The state of effectful programming}
\label{ch:related-work}
6 years ago
\section{Type and effect systems}
\section{Monadic programming}
\chapter{Continuations}
\label{ch:continuations}
6 years ago
\section{Zoo of control operators}
Describe how effect handlers fit amongst shift/reset, prompt/control,
callcc, J, catchcont, etc.
6 years ago
\section{Implementation strategies}
\part{Design}
6 years ago
\chapter{A ML-flavoured programming language}
\label{ch:base-language}
6 years ago
In this chapter we introduce a core calculus, \BCalc{}, which we shall
6 years ago
later use as the basis for exploration of design considerations for
6 years ago
effect handlers. This calculus is based on \CoreLinks{} by
\citet{LindleyC12}, which distils the essence of the functional
multi-tier web-programming language
\Links{}~\cite{CooperLWY06}. \Links{} belongs to the
ML-family~\cite{MilnerTHM97} of programming languages as it features
typical characteristics of ML languages such as a static type system
supporting parametric polymorphism with type inference support (in
fact Links supports first-class polymorphism), and its evaluation
semantics is strict. However, \Links{} differentiates itself from the
rest of the ML-family by making crucial use of \emph{row polymorphism}
to support extensible records, variants, and tracking of computational
effects. Thus \Links{} has a rather strong emphasis on structural
types rather than nominal types.
6 years ago
\CoreLinks{} captures all of these properties of \Links{}. Our
calculus \BCalc{} differs in several aspects from \CoreLinks{}. For
example, the underlying formalism of \CoreLinks{} is call-by-value,
whilst the formalism of \BCalc{} is \emph{fine-grain
call-by-value}~\cite{LevyPT03}, which shares similarities with
A-normal form (ANF)~\cite{FlanaganSDF93} as it syntactically
distinguishes between value and computation terms by mandating every
intermediate computation being named. However unlike ANF, fine-grain
call-by-value remains closed under $\beta$-reduction. The reason for
choosing fine-grain call-by-value as our formalism is entirely due to
convenience. As we shall see in Chapter~\ref{ch:unary-handlers}
fine-grain call-by-value is a convenient formalism for working with
continuations. Another point of difference between \CoreLinks{} and
\BCalc{} is that the former models the integrated database query
6 years ago
sublanguage of \Links{}. We do not consider the query sublanguage at
all, and instead our focus is entirely on modelling the interaction
and programming with computational effects.
6 years ago
\section{Syntax and static semantics}
6 years ago
\label{sec:syntax-base-language}
Typically the presentation of a programming language begins with its
syntax. If the language is typed there are two possible starting
points: Either one presents the term syntax first, or alternatively,
the type syntax first. Although the choice may seem rather benign
there is, however, a philosophical distinction to be drawn between
them. Terms are, on their own, entirely meaningless, whilst types
provide, on their own, an initial approximation of the semantics of
terms. This is particularly true in an intrinsic typed system perhaps
less so in an extrinsic typed system. In an intrinsic system types
must necessarily be precursory to terms, as terms ultimately depend on
the types. Following this argument leaves us with no choice but to
first present the type syntax of \BCalc{} and subsequently its term
syntax.
\subsection{Types, kinds, and their environments}
\label{sec:base-language-types}
Figure~\ref{fig:base-language-types} depicts the syntax for types of
\BCalc{}.
\begin{figure}
\begin{syntax}
\slab{Value types} &A,B &::= & A \to C
\mid \alpha
\mid \forall \alpha^K.C
\mid \Record{R}
\mid [R]\\
\slab{Computation types}
&C,D &::= & A \eff E \\
\slab{Effect types} &E &::= & \{R\}\\
\slab{Row types} &R &::= & \ell : P;R \mid \rho \mid \cdot \\
\slab{Presence types} &P &::= & \Pre{A} \mid \Abs \mid \theta\\
%\slab{Labels} &\ell & & \\
\slab{Handler types} &F &::= & C \Rightarrow D \\
\slab{Types} &T &::= & A \mid C \mid E \mid R \mid P \mid F \\
\slab{Kinds} &K &::= & \Type \mid \Row_\mathcal{L} \mid \Presence
\mid \Comp \mid \Effect \mid \Handler \\
\slab{Label sets} &\mathcal{L} &::=& \emptyset \mid \{\ell\} \uplus \mathcal{L}\\
%\slab{Type variables} &\alpha, \rho, \theta& \\
\slab{Type environments} &\Gamma &::=& \cdot \mid \Gamma, x:A \\
\slab{Kind environments} &\Delta &::=& \cdot \mid \Delta, \alpha:K
\end{syntax}
\caption{Syntax of types in \BCalc{}}\label{fig:base-language-types}
\end{figure}
\subsection{Terms}
\label{sec:base-language-terms}
\section{Dynamic semantics}
6 years ago
\section{Type and effect inference}
\dhil{While I would like to detail the type and effect inference, it
may not be worth the effort. The reason I would like to do this goes
back to 2016 when Richard Eisenberg asked me about how we do effect
inference in Links.}
6 years ago
\chapter{Unary handlers}
6 years ago
\label{ch:unary-handlers}
6 years ago
\section{Deep handlers}
\subsection{Syntax and static semantics}
\subsection{Effect inference}
6 years ago
\subsection{Dynamic semantics}
6 years ago
\section{Parameterised handlers}
6 years ago
\section{Shallow handlers}
\label{ch:shallow-handlers}
6 years ago
\subsection{Syntax and static semantics}
\subsection{Dynamic semantics}
6 years ago
\chapter{N-ary handlers}
\label{ch:multi-handlers}
% \section{Syntax and Static Semantics}
% \section{Dynamic Semantics}
6 years ago
\section{Unifying deep and shallow handlers}
\part{Implementation}
6 years ago
\chapter{Continuation passing styles}
\chapter{Abstract machine semantics}
\part{Expressiveness}
6 years ago
\chapter{Computability, complexity, and expressivness}
\label{ch:expressiveness}
6 years ago
\section{Notions of expressiveness}
Felleisen's macro-expressiveness, Longley's type-respecting
expressiveness, Kammar's typability-preserving expressiveness.
6 years ago
\section{Interdefinability of deep and shallow Handlers}
\section{Encoding parameterised handlers}
6 years ago
\chapter{The asymptotic power of control}
\label{ch:handlers-efficiency}
Describe the methodology\dots
6 years ago
\section{Generic search}
\section{Calculi}
\subsection{Base calculus}
\subsection{Handler calculus}
6 years ago
\section{A practical model of computation}
\subsection{Syntax}
\subsection{Semantics}
\subsection{Realisability}
6 years ago
\section{Points, predicates, and their models}
\section{Efficient generic search with effect handlers}
\subsection{Space complexity}
6 years ago
\section{Best-case complexity of generic search without control}
\subsection{No shortcuts}
\subsection{No sharing}
6 years ago
\chapter{Robustness of the asymptotic power of control}
\section{Mutable state}
\section{Exception handling}
\section{Effect system}
\part{Conclusions}
\chapter{Conclusions}
8 years ago
\label{ch:conclusions}
Some profound conclusions\dots
\chapter{Future Work}
\label{ch:future-work}
8 years ago
%%
%% Appendices
%%
% \appendix
%% If you want the bibliography single-spaced (which is allowed), uncomment
%% the next line.
%\nocite{*}
\singlespace
%\nocite{*}
8 years ago
%\printbibliography[heading=bibintoc]
\bibliographystyle{plainnat}
8 years ago
\bibliography{\jobname}
%% ... that's all, folks!
\end{document}