1
0
mirror of https://github.com/dhil/phd-dissertation synced 2026-03-13 11:08:25 +00:00

Compare commits

..

2 Commits

Author SHA1 Message Date
b977c35d91 typo 2021-02-05 01:05:47 +00:00
e907a526e5 More related work 2021-02-05 01:04:50 +00:00

View File

@@ -7940,18 +7940,18 @@ complete is the $\init$ process.
\section{Related work} \section{Related work}
\label{sec:unix-related-work} \label{sec:unix-related-work}
\paragraph{Programming language support for handlers} \paragraph{Programming languages with handlers}
\paragraph{Effect-driven concurrency} \paragraph{Effect-driven concurrency}
In their tutorial of the Eff programming language \citet{BauerP15} In their tutorial of the Eff programming language \citet{BauerP15}
implements a simple lightweight thread scheduler. It is different from implement a simple lightweight thread scheduler. It is different from
the schedulers presented in this section as their scheduler only uses the schedulers presented in this section as their scheduler only uses
resumptions linearly. This is achieved by making the fork operation resumptions linearly. This is achieved by making the fork operation
\emph{higher-order} such that the operation is parameterised by a \emph{higher-order} such that the operation is parameterised by a
computation. The computation is run under a fresh instance of the computation. The computation is run under a fresh instance of the
handler. On one hand this approach has the benefit of making threads handler. On one hand this approach has the benefit of making threads
cheap as it is no stack copying is necessary at runtime. On the other cheap as it is no stack copying is necessary at runtime. On the other
hand it loses the guarantee that every operation is handled uniformly hand it does not guarantee that every operation is handled uniformly
(when in the setting of deep handlers) as every handler in between the (when in the setting of deep handlers) as every handler in between the
fork operation invocation site and the scheduler handler needs to be fork operation invocation site and the scheduler handler needs to be
manually reinstalled when the computation argument is manually reinstalled when the computation argument is
@@ -7991,8 +7991,20 @@ continuations can possibly be credited to
\citet{Burstall69}. \citeauthor{Burstall69} used \citet{Burstall69}. \citeauthor{Burstall69} used
\citeauthor{Landin65}'s J operator to arrange tree-based search, where \citeauthor{Landin65}'s J operator to arrange tree-based search, where
each branch would be reified as a continuation and put into a each branch would be reified as a continuation and put into a
queue. \citet{Wand80} \citet{HaynesF84} \citet{GanzFW99} queue.
\citet{HiebD90}
\citet{Wand80} implements a small multi-tasking kernel with support
for mutual exclusion and data protection using undelimited
continuations in the style of the catch operator of Scheme.
\citet{HaynesFW86} codify coroutines as library using call/cc.
\citet{DybvigH89} implements \emph{engines} using call/cc in Scheme
--- an engine is a kind of process abstraction which support
preemption. An engine runs a computation on some time budget. If
computation exceeds the allotted time budget, then it is
interrupted. They represent engines as reified continuations and use
the macro system of Scheme to insert clock ticks at appropriate places
in the code. \citet{HiebD90} also design the \emph{spawn-controller}
operator for programming tree-based concurrency abstractions.
\paragraph{Resumption monad} \paragraph{Resumption monad}
The resumption monad is both a semantic and programmatic abstraction The resumption monad is both a semantic and programmatic abstraction
@@ -8004,9 +8016,9 @@ commands for interrupting computation.
% %
\citet{Harrison06} demonstrates the resumption monad as a practical \citet{Harrison06} demonstrates the resumption monad as a practical
programming abstraction by implementing a small multi-tasking programming abstraction by implementing a small multi-tasking
operating system. \citeauthor{Harrison06} implements two variations of kernel. \citeauthor{Harrison06} implements two variations of the
the resumption monad: basic and reactive. The basic resumption monad resumption monad: basic and reactive. The basic resumption monad is a
is a closed environment for interleaving different strands of closed environment for interleaving different strands of
computations. It is closed in the sense that strands of computation computations. It is closed in the sense that strands of computation
cannot interact with the ambient context of their environment. The cannot interact with the ambient context of their environment. The
reactive resumption monad makes the environment open by essentially reactive resumption monad makes the environment open by essentially