From e52ccf66c08096c94259f0206661db3e5769b09a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Hillerstr=C3=B6m?= Date: Fri, 13 Dec 2019 17:52:51 +0000 Subject: [PATCH] Progress. --- macros.tex | 5 +++++ thesis.bib | 10 ++++++++++ thesis.tex | 48 ++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 55 insertions(+), 8 deletions(-) diff --git a/macros.tex b/macros.tex index 4bbcc23..f0bd912 100644 --- a/macros.tex +++ b/macros.tex @@ -2,6 +2,7 @@ %% Calculi names. %% \newcommand{\Links}{Links\xspace} +\newcommand{\CoreLinks}{\ensuremath{\mathsf{CoreLinks}}\xspace} \newcommand{\BCalc}{\ensuremath{\lambda_{\mathsf{b}}}\xspace} \newcommand{\BCalcRec}{\ensuremath{\lambda_{\mathsf{b}+\mathsf{rec}}}\xspace} @@ -74,3 +75,7 @@ \newcommand{\hops}{H^{\mathrm{ops}}} %\newcommand{\hex}{H^{\mathrm{ex}}} \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}} \ No newline at end of file diff --git a/thesis.bib b/thesis.bib index 4d16e06..b9188b1 100644 --- a/thesis.bib +++ b/thesis.bib @@ -726,3 +726,13 @@ pages = {29:1--29:29}, 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}, +} \ No newline at end of file diff --git a/thesis.tex b/thesis.tex index 6661cdc..1ba918d 100644 --- a/thesis.tex +++ b/thesis.tex @@ -187,20 +187,52 @@ callcc, J, catchcont, etc. \chapter{A ML-flavoured programming 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 -effect handlers. This calculus distils the `functional' essence of the -ML-flavoured multi-tier web-programming language -\Links~\cite{CooperLWY06}. As such $\BCalc$ may be regarded as a -faithful model of a prototypical and practical functional programming -language. +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 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 discard the query sublanguage altogether, +and instead focus entirely on the interaction with computational +effects. \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} \chapter{Unary handlers} -\label{ch:deep-handlers} +\label{ch:unary-handlers} \section{Deep handlers} \subsection{Syntax and static semantics}