1
0
mirror of https://github.com/dhil/phd-dissertation synced 2026-03-13 02:58:26 +00:00

Compare commits

...

3 Commits

Author SHA1 Message Date
3d6179970e Update 2019-12-13 18:02:02 +00:00
1429a0b940 Update README 2019-12-13 17:54:33 +00:00
e52ccf66c0 Progress. 2019-12-13 17:52:51 +00:00
4 changed files with 59 additions and 9 deletions

View File

@@ -1,3 +1,6 @@
# phd-dissertation # PhD dissertation on foundations for programming and implementing effect handlers
To build the dissertation you need the [Informatics thesis LaTeX
class](https://github.com/dhil/inf-thesis-latex-cls).
Don't hold your breath... This thing isn't due for a while... Don't hold your breath... This thing isn't due for a while...

View File

@@ -2,6 +2,7 @@
%% Calculi names. %% Calculi names.
%% %%
\newcommand{\Links}{Links\xspace} \newcommand{\Links}{Links\xspace}
\newcommand{\CoreLinks}{\ensuremath{\mathsf{CoreLinks}}\xspace}
\newcommand{\BCalc}{\ensuremath{\lambda_{\mathsf{b}}}\xspace} \newcommand{\BCalc}{\ensuremath{\lambda_{\mathsf{b}}}\xspace}
\newcommand{\BCalcRec}{\ensuremath{\lambda_{\mathsf{b}+\mathsf{rec}}}\xspace} \newcommand{\BCalcRec}{\ensuremath{\lambda_{\mathsf{b}+\mathsf{rec}}}\xspace}
@@ -74,3 +75,7 @@
\newcommand{\hops}{H^{\mathrm{ops}}} \newcommand{\hops}{H^{\mathrm{ops}}}
%\newcommand{\hex}{H^{\mathrm{ex}}} %\newcommand{\hex}{H^{\mathrm{ex}}}
\newcommand{\hell}{H^{\ell}} \newcommand{\hell}{H^{\ell}}
\newcommand{\alertbox}[2]{{\par\noindent\small\color{red} \framebox{\parbox{\dimexpr\linewidth-2\fboxsep-2\fboxrule}{\textbf{#1:} #2}}}}
\newcommand{\todo}[1]{\alertbox{TODO}{#1}}
\newcommand{\dhil}[1]{\alertbox{Daniel}{#1}}

View File

@@ -726,3 +726,13 @@
pages = {29:1--29:29}, pages = {29:1--29:29},
year = {2017} year = {2017}
} }
# SML
@book{MilnerTHM97,
author = {Robin Milner and Mads Tofte and Robert Harper and David Macqueen},
title = {The Definition of {Standard} {ML}},
year = {1997},
isbn = {0262631814},
publisher = {MIT Press},
address = {Cambridge, MA, USA},
}

View File

@@ -187,20 +187,52 @@ callcc, J, catchcont, etc.
\chapter{A ML-flavoured programming language} \chapter{A ML-flavoured programming language}
\label{ch:base-language} \label{ch:base-language}
In this chapter we introduce a core calculus, $\BCalc$, which we shall In this chapter we introduce a core calculus, \BCalc{}, which we shall
later use as the basis for exploration of design considerations for later use as the basis for exploration of design considerations for
effect handlers. This calculus distils the `functional' essence of the effect handlers. This calculus is based on \CoreLinks{} by
ML-flavoured multi-tier web-programming language \citet{LindleyC12}, which distils the essence of the functional
\Links~\cite{CooperLWY06}. As such $\BCalc$ may be regarded as a multi-tier web-programming language
faithful model of a prototypical and practical functional programming \Links{}~\cite{CooperLWY06}. \Links{} belongs to the
language. ML-family~\cite{MilnerTHM97} of programming languages as it features
typical characteristics of ML languages such as a static type system
supporting parametric polymorphism and type inference, 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.
\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
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.
\section{Syntax and static semantics} \section{Syntax and static semantics}
\section{Type inference} \label{sec:syntax-base-language}
\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.}
\section{Dynamic semantics} \section{Dynamic semantics}
\chapter{Unary handlers} \chapter{Unary handlers}
\label{ch:deep-handlers} \label{ch:unary-handlers}
\section{Deep handlers} \section{Deep handlers}
\subsection{Syntax and static semantics} \subsection{Syntax and static semantics}