mirror of
https://github.com/dhil/phd-dissertation
synced 2026-03-13 02:58:26 +00:00
Compare commits
2 Commits
5560b73cc5
...
b977c35d91
| Author | SHA1 | Date | |
|---|---|---|---|
| b977c35d91 | |||
| e907a526e5 |
28
thesis.tex
28
thesis.tex
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user