mirror of
https://github.com/dhil/phd-dissertation
synced 2026-03-13 11:08:25 +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}
|
||||
\label{sec:unix-related-work}
|
||||
|
||||
\paragraph{Programming language support for handlers}
|
||||
\paragraph{Programming languages with handlers}
|
||||
|
||||
\paragraph{Effect-driven concurrency}
|
||||
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
|
||||
resumptions linearly. This is achieved by making the fork operation
|
||||
\emph{higher-order} such that the operation is parameterised by a
|
||||
computation. The computation is run under a fresh instance of the
|
||||
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
|
||||
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
|
||||
fork operation invocation site and the scheduler handler needs to be
|
||||
manually reinstalled when the computation argument is
|
||||
@@ -7991,8 +7991,20 @@ continuations can possibly be credited to
|
||||
\citet{Burstall69}. \citeauthor{Burstall69} used
|
||||
\citeauthor{Landin65}'s J operator to arrange tree-based search, where
|
||||
each branch would be reified as a continuation and put into a
|
||||
queue. \citet{Wand80} \citet{HaynesF84} \citet{GanzFW99}
|
||||
\citet{HiebD90}
|
||||
queue.
|
||||
|
||||
\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}
|
||||
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
|
||||
programming abstraction by implementing a small multi-tasking
|
||||
operating system. \citeauthor{Harrison06} implements two variations of
|
||||
the resumption monad: basic and reactive. The basic resumption monad
|
||||
is a closed environment for interleaving different strands of
|
||||
kernel. \citeauthor{Harrison06} implements two variations of the
|
||||
resumption monad: basic and reactive. The basic resumption monad is a
|
||||
closed environment for interleaving different strands of
|
||||
computations. It is closed in the sense that strands of computation
|
||||
cannot interact with the ambient context of their environment. The
|
||||
reactive resumption monad makes the environment open by essentially
|
||||
|
||||
Reference in New Issue
Block a user