1
0
mirror of https://github.com/dhil/phd-dissertation synced 2026-04-28 23:16:32 +01:00

Compare commits

..

11 Commits

Author SHA1 Message Date
Daniel Hillerström
c2d79e1d06 Fix bibliography: add missing year 2025-12-18 14:08:13 +00:00
Daniel Hillerström
47410e4d14 Fix typo in -ctrl+ rule. The delimiter is part of the reified context. 2025-12-18 14:07:59 +00:00
81a4ecec0b UNIX tutorial 2024 2024-10-11 15:45:34 +02:00
cafa8b1ba2 Merge branch 'master' of github.com:dhil/phd-dissertation 2024-02-26 09:51:21 +01:00
2e61275a5b Fix typo; fix sentence structure.
This commit fixes a typo in the type signature of `init` (thanks to
Ramsay Carslaw for spotting it). This commit also structures the last
sentence of Section 2.7 to read slightly better.
2024-02-26 09:50:56 +01:00
e90ba67a4b Update timeline 2023-09-14 09:22:21 +02:00
6aee80a71b Fix typo 2023-09-14 09:14:29 +02:00
aea67c86b4 Fix typo 2023-04-12 14:55:37 +02:00
Daniel Hillerström
5ede30903f Fix typo 2023-02-14 10:59:29 +01:00
Daniel Hillerström
03b7c5b548 Fix typo. Slightly reword an awkward sentence. 2023-02-10 14:31:37 +01:00
7535fe7ecc Fix typos in handler typing rules in the appendix 2023-01-09 17:00:38 +00:00
4 changed files with 1422 additions and 25 deletions

View File

@@ -116,4 +116,5 @@ I submitted my thesis on May 30, 2021. It was examined on August 13,
2021, where I received pass with minor corrections. The revised thesis 2021, where I received pass with minor corrections. The revised thesis
was submitted on December 22, 2021. It was approved on March was submitted on December 22, 2021. It was approved on March
14, 2022. The final revision was submitted on March 23, 2022. I 14, 2022. The final revision was submitted on March 23, 2022. I
received my PhD award letter on March 24, 2022. received my PhD award letter on March 24, 2022. My graduation
ceremony took place in McEwan Hall on July 11, 2022.

1393
code/unix-tutorial.links Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2401,7 +2401,8 @@
author = {Nikolaos S. Papspyrou}, author = {Nikolaos S. Papspyrou},
title = {A resumption monad transformer and its applications in the semantics of concurrency}, title = {A resumption monad transformer and its applications in the semantics of concurrency},
booktitle = {Proceedings of the 3rd Panhellenic Logic Symposium}, booktitle = {Proceedings of the 3rd Panhellenic Logic Symposium},
address = {Anogia, Greece} address = {Anogia, Greece},
year = 2001,
} }
@inproceedings{Harrison06, @inproceedings{Harrison06,

View File

@@ -167,7 +167,7 @@
% %
Effect handlers provide a particularly structured approach to Effect handlers provide a particularly structured approach to
programming with first-class control by naming control reifying programming with first-class control by naming control reifying
operations and separating from their handling. operations and separating them from their handling.
This thesis is composed of three strands of work in which I develop This thesis is composed of three strands of work in which I develop
operational foundations for programming and implementing effect operational foundations for programming and implementing effect
@@ -5446,7 +5446,7 @@ created by the operating system.
% %
\[ \[
\bl \bl
\init : (\Unit \to \alpha \eff \varepsilon) \to \alpha \eff \{\Co;\varepsilon\}\\ \init : (\UnitType \to \UnitType \eff \varepsilon) \to \UnitType \eff \{\Co;\varepsilon\}\\
\init~main \defas \init~main \defas
\bl \bl
\Let\;pid \revto \Do\;\UFork~\Unit\;\In\\ \Let\;pid \revto \Do\;\UFork~\Unit\;\In\\
@@ -5535,10 +5535,11 @@ $\Fork : \UnitType \opto \Bool$, by $\timesharee$, which handles the
more general operation $\UFork : \UnitType \opto \Int$. In practice, more general operation $\UFork : \UnitType \opto \Int$. In practice,
we may be unable to dispense of the old interface so easily, meaning we may be unable to dispense of the old interface so easily, meaning
we have to retain support for, say, legacy reasons. As we have seen we have to retain support for, say, legacy reasons. As we have seen
previously we can an operation in terms of another operation. Thus to previously we can interpret an operation in terms of another
retain support for $\Fork$ we simply have to insert a handler under operation. Thus to retain support for $\Fork$ we simply have to insert
$\timesharee$ which interprets $\Fork$ in terms of $\UFork$. The a handler under $\timesharee$ which interprets $\Fork$ in terms of
operation case of this handler would be akin to the following. $\UFork$. The operation case of this handler would be akin to the
following.
% %
\[ \[
\OpCase{\Fork}{\Unit}{resume} \mapsto \OpCase{\Fork}{\Unit}{resume} \mapsto
@@ -5552,7 +5553,7 @@ The interpretation of $\Fork$ inspects the process identifier returned
by the $\UFork$ to determine the role of the current process in the by the $\UFork$ to determine the role of the current process in the
parent-child relationship. If the identifier is nonzero, then the parent-child relationship. If the identifier is nonzero, then the
process is a parent, hence $\Fork$ should return $\True$ to its process is a parent, hence $\Fork$ should return $\True$ to its
caller. Otherwise it should return $\False$. This preserves the caller, and otherwise it should return $\False$, thus preserving the
functionality of the legacy code. functionality of the legacy code.
\section{Related work} \section{Related work}
@@ -17244,7 +17245,7 @@ They identify four variations.
delimiter in the reified context, but discards the original delimiter in the reified context, but discards the original
instance, i.e. instance, i.e.
\[ \[
\Delim{\EC[\CC~k.M]} \reducesto M[\cont_{\EC}/k] \Delim{\EC[\CC~k.M]} \reducesto M[\cont_{\Delim{\EC}}/k]
\] \]
\item[\CCmm] The control reifier reifies the context up to, but not \item[\CCmm] The control reifier reifies the context up to, but not
including, the delimiter and subsequently discards the delimiter, i.e. including, the delimiter and subsequently discards the delimiter, i.e.
@@ -17493,14 +17494,15 @@ by \citeauthor{Landin65}'s J operator John \citeauthor{Reynolds98a}
designed the escape operator~\cite{Reynolds98a}. Influenced by escape, designed the escape operator~\cite{Reynolds98a}. Influenced by escape,
\citeauthor{SussmanS75} designed, implemented, and standardised the \citeauthor{SussmanS75} designed, implemented, and standardised the
catch operator in Scheme in 1975. A while thereafter the perhaps most catch operator in Scheme in 1975. A while thereafter the perhaps most
famous undelimited control operator appeared: callcc. It initially famous undelimited control operator appeared: callcc. It was designed
designed in 1982 and was standardised in 1985 as a core feature of in 1982 and standardised in 1985 as a core feature of
Scheme. Later another batch of control operators based on callcc Scheme. Following on from callcc a wide range of different control
appeared. A common characteristic of the early control operators is operators was designed. A common characteristic of the early control
that their capture mechanisms were abortive and their captured operators is that their capture mechanisms are abortive and their
continuations were abortive, save for one, namely, captured continuations are abortive, save for one, namely,
\citeauthor{Felleisen88}'s F operator. Later a non-abortive and \citeauthor{Felleisen88}'s F operator. Though, it is worth remarking
composable variant of callcc appeared. Moreover, every operator, that \citet{FlattYFF07} devised a non-abortive and composable variant
of callcc. Another common characteristic is that every operator,
except for \citeauthor{Landin98}'s J operator, capture the current except for \citeauthor{Landin98}'s J operator, capture the current
continuation. continuation.
@@ -17832,7 +17834,7 @@ follows.
\end{reductions} \end{reductions}
% %
Their capture rules are identical. Both operators abort the current Their capture rules are identical. Both operators abort the current
continuation upon capture. This is what set $\FelleisenF$ apart from continuation upon capture. This is what sets $\FelleisenF$ apart from
the other composable control operator $\Callcomc$. the other composable control operator $\Callcomc$.
% %
The resume rules of $\FelleisenC$ and $\FelleisenF$ show the The resume rules of $\FelleisenC$ and $\FelleisenF$ show the
@@ -19022,7 +19024,7 @@ computation $M$ with handler $H$.
\{\ell_i : A_i \opto B_i\}_i \in \Sigma \\ \{\ell_i : A_i \opto B_i\}_i \in \Sigma \\
H = \{\Return\;x \mapsto M\} \uplus \{ \OpCase{\ell_i}{p_i}{k_i} \mapsto N_i \}_i \\ H = \{\Return\;x \mapsto M\} \uplus \{ \OpCase{\ell_i}{p_i}{k_i} \mapsto N_i \}_i \\
\el}\\\\ \el}\\\\
\typ{\Gamma, x : A;\Sigma}{M : D}\\\\ \typ{\Gamma, x : C;\Sigma}{M : D}\\\\
[\typ{\Gamma,p_i : A_i, k_i : B_i \to D;\Sigma}{N_i : D}]_i [\typ{\Gamma,p_i : A_i, k_i : B_i \to D;\Sigma}{N_i : D}]_i
} }
{\typ{\Gamma;\Sigma}{H : C \Harrow D}} {\typ{\Gamma;\Sigma}{H : C \Harrow D}}
@@ -19210,7 +19212,7 @@ handler definitions are identical, however, their typing differ.
\{\ell_i : A_i \opto B_i\}_i \in \Sigma \\ \{\ell_i : A_i \opto B_i\}_i \in \Sigma \\
H = \{\Return\;x \mapsto M\} \uplus \{ \OpCase{\ell_i}{p_i}{k_i} \mapsto N_i \}_i \\ H = \{\Return\;x \mapsto M\} \uplus \{ \OpCase{\ell_i}{p_i}{k_i} \mapsto N_i \}_i \\
\el}\\\\ \el}\\\\
\typ{\Gamma, x : A;\Sigma}{M : D}\\\\ \typ{\Gamma, x : C;\Sigma}{M : D}\\\\
[\typ{\Gamma,p_i : A_i, k_i : B_i \to C;\Sigma}{N_i : D}]_i [\typ{\Gamma,p_i : A_i, k_i : B_i \to C;\Sigma}{N_i : D}]_i
} }
{\typ{\Gamma;\Sigma}{H : C \Harrow D}} {\typ{\Gamma;\Sigma}{H : C \Harrow D}}
@@ -19735,7 +19737,7 @@ overhead, although, techniques such as just-in-time compilation can be
utilised to reduce this overhead. utilised to reduce this overhead.
Continuation passing style (CPS) is a canonical implementation Continuation passing style (CPS) is a canonical implementation
strategy for continuations --- the word `continuation' even feature in strategy for continuations --- the word `continuation' even features in
its name. its name.
% %
CPS is a particular idiomatic notation for programs, where every CPS is a particular idiomatic notation for programs, where every
@@ -19769,9 +19771,9 @@ equations.
However, the first equation is derivable from the second and third However, the first equation is derivable from the second and third
equations. I first learned this from Paul{-}Andr{\'{e}} Melli{\`{e}}s equations. I first learned this from Paul{-}Andr{\'{e}} Melli{\`{e}}s
during Shonan Seminar No.103 \emph{Semantics of Effects, Resources, during Shonan Seminar No.103 \emph{Semantics of Effects, Resources,
and Applications}. I have been unable to find a proof of this fact and Applications}. I have been unable to find a proof of this fact in
in the literature, though, \citeauthor{Mellies14} does have published the literature, though, \citeauthor{Mellies14} does have a published
paper, which only states the three necessary paper, which states only the three necessary
equations~\cite{Mellies14}. equations~\cite{Mellies14}.
% %
Therefore I include a proof of this fact here (thanks to Sam Lindley Therefore I include a proof of this fact here (thanks to Sam Lindley