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

Compare commits

..

142 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
72b54ad278 Add missing space in 'Evaluationcontexts' in Figure 3.5 2023-01-09 14:45:32 +00:00
01e707822f Fix typo in T-Let Figure 3.4 2023-01-09 14:42:09 +00:00
2cecb13d34 Update all slides 2022-11-17 15:05:18 +00:00
ed634fcaa3 Update slides 2022-11-17 11:10:29 +00:00
c60dc80fde Update slides 2022-11-16 23:42:00 +00:00
e86597f4e4 Draft lecture notes 2022-11-16 22:02:05 +00:00
2b7b1df8db Merge branch 'master' of github.com:dhil/phd-dissertation 2022-11-15 18:01:32 +00:00
20f44ad547 Fix typo 2022-11-15 18:01:26 +00:00
101ac96aa2 NU PRL slides 2022-11-02 15:45:00 +00:00
e6182105de Merge branch 'master' of github.com:dhil/phd-dissertation 2022-10-12 23:56:05 +01:00
63fe9a738a Prepare slides for Huawei Research Centre Zurich seminar 2022-10-12 23:55:57 +01:00
3a9394baf8 Fix a minor typo 2022-07-01 01:19:43 +01:00
6193214890 Update slides 2022-05-26 18:27:32 +01:00
ffe6ebd0b9 Update MSR 2022 slides 2022-05-25 22:29:14 +01:00
01a8a3d581 Draft MSR talk 2022-05-25 22:24:31 +01:00
008e80ea67 Link to thesis.
Update README to reflect the structure of the revised thesis.
2022-03-26 00:18:14 +00:00
3276537ab1 Tweak acknowledgements 2022-03-23 14:56:41 +00:00
20551152b3 Minor tweaks and typo fixes. 2022-03-21 14:12:59 +00:00
8679803146 Fix typo 2022-03-18 14:49:58 +00:00
d7bd881a00 Update latest draft 2021-12-22 16:55:21 +00:00
f5685fe70d Chapter 8 2021-12-22 16:48:14 +00:00
7f3503153f Minor fixes 2021-12-22 16:27:14 +00:00
40c6505ae2 Simplify 2021-12-22 16:15:16 +00:00
b897751a38 Note on reduction relation 2021-12-22 16:13:22 +00:00
3e1bbf3206 Fix todo 2021-12-22 16:10:51 +00:00
40948507e9 CPS outline 2021-12-22 16:08:08 +00:00
2a800f07e2 WIP 2021-12-22 15:58:26 +00:00
d3921f24e3 WIP 2021-12-22 14:23:57 +00:00
7063acb4e7 Related work 2021-12-21 16:14:59 +00:00
c9ff1d9af8 Chapter 3 2021-12-21 16:05:12 +00:00
fff15c9c83 Section 2.6 and 2.7 2021-12-20 23:29:27 +00:00
a24a33dcf8 Section 2.5 2021-12-20 16:08:32 +00:00
6c128a1181 Section 2.4 2021-12-20 13:37:07 +00:00
98784c59ab Section 2.3 2021-12-17 17:57:31 +00:00
6492391ed4 Section 2.2 2021-12-17 17:23:01 +00:00
cea34c85e1 Section 2.1 2021-12-17 16:42:02 +00:00
40b1144d9b Chapter 2 outline, relation to prior work, and terminology. 2021-12-17 01:29:57 +00:00
3067bfb939 fix chapter 2 intro 2021-12-13 22:55:52 +00:00
83b5f7db99 Start implementing the corrections. 2021-11-24 15:20:50 +00:00
981b0d48f8 Update README with viva date. 2021-08-13 12:07:16 +01:00
ee8a4ab2dd Fix a couple of typos 2021-08-13 11:47:23 +01:00
3fda920eae Minor improvement 2021-08-13 11:35:08 +01:00
0b198e7a25 Add paper references 2021-08-12 23:01:29 +01:00
740413ed1b Viva slides 2021-08-12 22:37:01 +01:00
7ed7a44d61 Package the draft as an archive 2021-06-07 13:31:51 +01:00
350d741204 List appendices 2021-06-07 12:35:42 +01:00
f8697be4c7 Remark that the final revision will be made available. 2021-06-07 12:28:06 +01:00
f9b8234221 Link to examiners 2021-06-07 12:26:36 +01:00
67598cee1e Dissertation overview 2021-06-07 12:22:52 +01:00
113b7c4620 Update build instructions 2021-06-07 12:13:26 +01:00
c52edb51f6 Make the latest draft revision available. 2021-06-07 12:10:00 +01:00
a4b802e4e0 Draft compilation 2021-06-07 12:03:47 +01:00
3b7dd13e3d typo 2021-06-01 19:03:06 +01:00
a42bfc25ab Update acknowledgements 2021-06-01 18:35:26 +01:00
97a4a806e1 Fix typos 2021-05-31 10:26:35 +01:00
0e02128d03 Rewording. THANKS AGAIN AMNA. 2021-05-30 20:45:37 +01:00
aa2b963d0e Fix grammar 2021-05-30 20:41:03 +01:00
2f494aae67 Fix grammar 2021-05-30 20:40:16 +01:00
a36b1cf0d4 Another typo 2021-05-30 20:38:54 +01:00
53b54056f8 Fix typo - THANKS AMNA 2021-05-30 20:38:00 +01:00
f80becc368 Spell out anonymous function notation 2021-05-30 20:10:16 +01:00
6c6d8e2aba A little paragraph justifying CPS 2021-05-30 20:04:41 +01:00
bc7d89ec5f Update acknowledgements 2021-05-30 19:51:21 +01:00
69a2c881b7 Declaration signature 2021-05-30 13:43:43 +01:00
6e5d7b01df Acknowledgements 2021-05-30 13:40:48 +01:00
49e53bac03 Acknowledgements 2021-05-30 13:35:04 +01:00
4834a6e5d3 Final example 2021-05-30 13:09:00 +01:00
3f91ab595e Fix rendering of type erasure lemma 2021-05-30 01:01:48 +01:00
333452bed2 Remove todo 2021-05-30 00:58:08 +01:00
51429afdd8 Update related work Chapter 5 2021-05-30 00:56:43 +01:00
e52cc41d40 Dybvig et al. taxonomy 2021-05-29 23:57:24 +01:00
b2eb9334ca Fix wording 2021-05-29 20:36:51 +01:00
754c3b823e Appendices 2021-05-29 20:21:32 +01:00
363628c1d3 Consistency 2021-05-29 16:33:52 +01:00
664956251c another example 2021-05-29 16:02:19 +01:00
d18a5e3058 Syntactic sugar 2021-05-29 12:15:21 +01:00
00f4264547 Minor fix 2021-05-29 11:57:39 +01:00
5597c9657b Lay summary 2021-05-29 11:56:35 +01:00
8b3660b0ce WIP 2021-05-29 10:40:49 +01:00
77475e129b WIP 2021-05-29 00:30:25 +01:00
9c2da2c378 Fix typos in introduction 2021-05-29 00:28:38 +01:00
ee92e3b483 WIP 2021-05-28 22:54:30 +01:00
6c3eb0e9cf another example 2021-05-28 19:41:29 +01:00
a476679810 Another example 2021-05-28 19:03:55 +01:00
3cb5e3622f Example 2021-05-28 18:20:01 +01:00
11b4888263 WIP 2021-05-28 13:19:54 +01:00
68110a67ef missing macros 2021-05-28 12:49:36 +01:00
d4ce54795c Minor fixes 2021-05-28 12:21:14 +01:00
2fbbf04bd4 WIP 2021-05-28 10:51:07 +01:00
0885c75c1e WIP 2021-05-28 01:09:53 +01:00
0c4108cdea WIP 2021-05-28 00:11:34 +01:00
4259ddee4d WIP 2021-05-28 00:07:19 +01:00
5340615c26 WIP 2021-05-28 00:00:00 +01:00
28fd0505ce Asymptotic notation and other fixes 2021-05-27 19:35:06 +01:00
fe6444ff3d Theorem 8.9 2021-05-27 13:49:42 +01:00
9fa5ebe6eb Citation for the three state equations. 2021-05-27 13:15:30 +01:00
79735da80a WIP 2021-05-27 13:04:43 +01:00
75d0dac161 WIP 2021-05-27 11:47:47 +01:00
a7d5117a64 Row polymorphism 2021-05-27 10:50:31 +01:00
75eb07cee1 Typo 2021-05-27 00:57:03 +01:00
ccd1f59d57 WIP 2021-05-27 00:50:09 +01:00
e84b4605c2 WIP 2021-05-27 00:35:40 +01:00
a57ac855c2 Chapter 9 2021-05-26 23:46:57 +01:00
fac68ae974 WIP 2021-05-26 21:41:59 +01:00
a4d9cc4edd WIP 2021-05-26 21:41:09 +01:00
02b9a782f3 Typo 2021-05-26 10:30:55 +01:00
e419d52ee2 WIP 2021-05-26 10:28:44 +01:00
98c79cc70d minor consistency fixes 2021-05-26 01:55:52 +01:00
2c51620a56 WIP 2021-05-26 01:15:07 +01:00
0f31e10582 WIP 2021-05-26 01:07:20 +01:00
9679a3cc82 WIP 2021-05-26 01:02:20 +01:00
559d9c2d37 CLR 2021-05-26 01:02:14 +01:00
5c835f5179 Fiddling with tikz 2021-05-25 21:08:30 +01:00
836d85ea99 Break up tables 2021-05-25 20:18:52 +01:00
622932494d Fix typos 2021-05-25 19:28:17 +01:00
111b4cb35a Update 2021-05-25 14:35:51 +01:00
6f44524750 WIP 2021-05-25 13:28:10 +01:00
3438581826 Reword 2021-05-25 13:03:22 +01:00
650de85238 Effect sugar 2021-05-25 12:59:01 +01:00
b47c60fe57 WIP 2021-05-25 01:19:48 +01:00
696266922a WIP 2021-05-25 00:20:51 +01:00
8fad146499 Note on higher order functions 2021-05-24 18:51:40 +01:00
93793648ef Introduction draft 2021-05-24 15:28:02 +01:00
d9717b7434 Draft introdoctury bit 2021-05-24 14:15:58 +01:00
7c3942a564 WIP 2021-05-24 11:49:38 +01:00
a462aa8a57 WIP 2021-05-24 01:48:25 +01:00
13d76a146b Update state of effectful programming 2021-05-23 22:42:28 +01:00
67a48945e9 Insert a few citations. 2021-05-23 18:48:14 +01:00
b73d9a213f More proper capitalisations 2021-05-23 18:47:58 +01:00
475f82324d Extend acknowledgements 2021-05-23 18:43:33 +01:00
6f8c5364f2 Correct capitalisation 2021-05-23 18:43:24 +01:00
13 changed files with 18270 additions and 6684 deletions

View File

@@ -3,8 +3,10 @@ CFLAGS=-interaction=nonstopmode -halt-on-error -file-line-error
BIBC=bibtex BIBC=bibtex
PAPER=thesis PAPER=thesis
BIBLIO=$(PAPER) BIBLIO=$(PAPER)
LATEST_COMMIT=$(shell git log --format="%h" -n 1)
all: $(PAPER).pdf all: $(PAPER).pdf
draft: $(PAPER).pdf-draft
$(PAPER).aux: $(PAPER).tex $(PAPER).aux: $(PAPER).tex
$(TEXC) $(CFLAGS) $(PAPER) $(TEXC) $(CFLAGS) $(PAPER)
@@ -16,6 +18,11 @@ $(PAPER).pdf: $(PAPER).aux $(BIBLIO).bbl
$(TEXC) $(CFLAGS) $(PAPER) $(TEXC) $(CFLAGS) $(PAPER)
$(TEXC) $(CFLAGS) $(PAPER) $(TEXC) $(CFLAGS) $(PAPER)
$(PAPER).pdf-draft: CFLAGS:=$(CFLAGS) "\def\DRAFT{$(LATEST_COMMIT)}\input{$(PAPER)}"
$(PAPER).pdf-draft: all
mv $(PAPER).pdf $(PAPER)-draft.pdf
tar cf thesis-draft.tar.gz $(PAPER)-draft.pdf
clean: clean:
rm -f *.log *.aux *.toc *.out rm -f *.log *.aux *.toc *.out
rm -f *.bbl *.blg *.fls *.xml rm -f *.bbl *.blg *.fls *.xml

120
README.md
View File

@@ -1,6 +1,120 @@
# PhD dissertation on foundations for programming and implementing effect handlers # Foundations for programming and implementing effect handlers
A copy of my dissertation can be [downloaded via my
website](https://dhil.net/research/papers/thesis.pdf).
----
Submitted on May 30, 2021. Examined on August 13, 2021.
The board of examiners were
* [Andrew Kennedy](https://github.com/andrewjkennedy) (Facebook London)
* [Edwin Brady](https://www.type-driven.org.uk/edwinb/) (University of St Andrews)
* [Ohad Kammar](http://denotational.co.uk/) (The University of Edinburgh)
* [Stephen Gilmore](https://homepages.inf.ed.ac.uk/stg/) (The University of Edinburgh)
## Thesis structure
The dissertation is structured as follows.
### Introduction
* Chapter 1 puts forth an argument for why effect handlers
matter. Following this argument it provides a basic introduction to
several different approaches to effectful programming through the
lens of the state effect. In addition, it also declares the scope
and contributions of the dissertation, and discusses some related
work.
### Programming
* Chapter 2 illustrates effect handler oriented programming by
example by implementing a small operating system dubbed Tiny UNIX,
which captures some essential traits of Ritchie and Thompson's
UNIX. The implementation starts with a basic notion of file i/o,
and then, it evolves into a feature-rich operating system with full
file i/o, multiple user environments, multi-tasking, and more, by
composing ever more effect handlers.
* Chapter 3 introduces a polymorphic fine-grain call-by-value core
calculus, λ<sub>b</sub>, which makes key use of Rémy-style row
polymorphism to implement polymorphic variants, structural records,
and a structural effect system. The calculus distils the essence of
the core of the Links programming language. The chapter also
presents three extensions of λ<sub>b</sub>, which are λ<sub>h</sub>
that adds deep handlers, λ<sup>†</sup> that adds shallow handlers,
and λ<sup>‡</sup> that adds parameterised handlers.
### Implementation
* Chapter 4 develops a higher-order continuation passing style
translation for effect handlers through a series of step-wise
refinements of an initial standard continuation passing style
translation for λ<sub>b</sub>. Each refinement slightly modifies
the notion of continuation employed by the translation. The
development ultimately leads to the key invention of generalised
continuation, which is used to give a continuation passing style
semantics to deep, shallow, and parameterised handlers.
* Chapter 5 demonstrates an application of generalised continuations
to abstract machine as we plug generalised continuations into
Felleisen and Friedman's CEK machine to obtain an adequate abstract
runtime with simultaneous support for deep, shallow, and
parameterised handlers.
### Expressiveness
* Chapter 6 shows that deep, shallow, and parameterised notions of
handlers can simulate one another up to specific notions of
administrative reduction.
* Chapter 7 studies the fundamental efficiency of effect handlers. In
this chapter, we show that effect handlers enable an asymptotic
improvement in runtime complexity for a certain class of
functions. Specifically, we consider the *generic count* problem
using a pure PCF-like base language λ<sub>b</sub><sup>→</sup> (a
simply typed variation of λ<sub>b</sub>) and its extension with
effect handlers λ<sub>h</sub><sup>→</sup>. We show that
λ<sub>h</sub><sup>→</sup> admits an asymptotically more efficient
implementation of generic count than any λ<sub>b</sub><sup>→</sup>
implementation.
### Conclusions
* Chapter 8 concludes and discusses future work.
### Appendices
* Appendix A contains a literature survey of continuations and
first-class control. I classify continuations according to their
operational behaviour and provide an overview of the various
first-class sequential control operators that appear in the
literature. The application spectrum of continuations is discussed
as well as implementation strategies for first-class control.
* Appendix B contains a proof that shows the `Get-get` equation for
state is redundant.
* Appendix C contains the proof details and gadgetry for the
complexity of the effectful generic count program.
* Appendix D provides a sample implementation of the Berger count
program and discusses it in more detail.
## Building
To build the dissertation you need the [Informatics thesis LaTeX To build the dissertation you need the [Informatics thesis LaTeX
class](https://github.com/dhil/inf-thesis-latex-cls). class](https://github.com/dhil/inf-thesis-latex-cls) with the
University of Edinburgh crests. Invoking `make` on the command line
ought to produce a PDF copy of the dissertation named `thesis.pdf`,
e.g.
Don't hold your breath... This thing isn't due for a while... ```shell
$ make
```
## Timeline
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
was submitted on December 22, 2021. It was approved on March
14, 2022. The final revision was submitted on March 23, 2022. I
received my PhD award letter on March 24, 2022. My graduation
ceremony took place in McEwan Hall on July 11, 2022.

1469
code/ehop2022.links Normal file

File diff suppressed because it is too large Load Diff

1352
code/unix-huawei2022.links Normal file

File diff suppressed because it is too large Load Diff

1372
code/unix-msr2022.links Normal file

File diff suppressed because it is too large Load Diff

1352
code/unix-nuprl2022.links Normal file

File diff suppressed because it is too large Load Diff

1393
code/unix-tutorial.links Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -4,12 +4,14 @@
\newcommand{\defas}[0]{\mathrel{\overset{\makebox[0pt]{\mbox{\normalfont\tiny\text{def}}}}{=}}} \newcommand{\defas}[0]{\mathrel{\overset{\makebox[0pt]{\mbox{\normalfont\tiny\text{def}}}}{=}}}
\newcommand{\defnas}[0]{\mathrel{:=}} \newcommand{\defnas}[0]{\mathrel{:=}}
\newcommand{\simdefas}[0]{\mathrel{\overset{\makebox[0pt]{\mbox{\normalfont\tiny\text{def}}}}{\simeq}}} \newcommand{\simdefas}[0]{\mathrel{\overset{\makebox[0pt]{\mbox{\normalfont\tiny\text{def}}}}{\simeq}}}
\newcommand{\adef}[0]{\mathrel{\overset{\makebox[0pt]{\mbox{\normalfont\tiny{\text{$\alpha$-def}}}}}{\simeq}}}
%% %%
%% Some useful maths abbreviations %% Some useful maths abbreviations
%% %%
\newcommand{\C}{\ensuremath{\mathbb{C}}} \newcommand{\C}{\ensuremath{\mathbb{C}}}
\newcommand{\N}{\ensuremath{\mathbb{N}}} \newcommand{\N}{\ensuremath{\mathbb{N}}}
\newcommand{\R}{\ensuremath{\mathbb{R}}}
\newcommand{\Z}{\ensuremath{\mathbb{Z}}} \newcommand{\Z}{\ensuremath{\mathbb{Z}}}
\newcommand{\B}{\ensuremath{\mathbb{B}}} \newcommand{\B}{\ensuremath{\mathbb{B}}}
\newcommand{\BB}[1]{\ensuremath{\mathbf{#1}}} \newcommand{\BB}[1]{\ensuremath{\mathbf{#1}}}
@@ -18,6 +20,11 @@
\newcommand{\Delim}[1]{\ensuremath{\keyw{del}.#1}} \newcommand{\Delim}[1]{\ensuremath{\keyw{del}.#1}}
\newcommand{\sembr}[1]{\ensuremath{\llbracket #1 \rrbracket}} \newcommand{\sembr}[1]{\ensuremath{\llbracket #1 \rrbracket}}
\newcommand{\BigO}{\ensuremath{\mathcal{O}}} \newcommand{\BigO}{\ensuremath{\mathcal{O}}}
\newcommand{\SC}{\ensuremath{\mathsf{S}}}
\newcommand{\ST}{\ensuremath{\mathsf{T}}}
\newcommand{\ar}{\ensuremath{\mathsf{ar}}}
\newcommand{\Tm}{\ensuremath{\mathsf{Tm}}}
\newcommand{\Ty}{\ensuremath{\mathsf{Ty}}}
%% %%
%% Partiality %% Partiality
@@ -382,6 +389,22 @@
% configurations % configurations
\newcommand{\conf}{\mathcal{C}} \newcommand{\conf}{\mathcal{C}}
% effect sugar
\newcommand{\inward}[1]{\mathcal{I}\sembr{#1}}
\newcommand{\outward}[1]{\mathcal{O}\sembr{#1}}
\newcommand{\xcomp}[1]{\outward{#1}}
\newcommand{\xval}[1]{\outward{#1}}
\newcommand{\xpre}[1]{\outward{#1}}
\newcommand{\xrow}[1]{\outward{#1}}
\newcommand{\xeff}[1]{\outward{#1}}
\newcommand{\pcomp}[1]{\inward{#1}}
\newcommand{\pval}[1]{\inward{#1}}
\newcommand{\ppre}[1]{\inward{#1}}
\newcommand{\prow}[1]{\inward{#1}}
\newcommand{\peff}[1]{\inward{#1}}
\newcommand{\eamb}{\ensuremath{E_{\mathsf{amb}}}}
\newcommand{\trval}[1]{\mathcal{T}\sembr{#1}}
% UNIX example % UNIX example
\newcommand{\UNIX}{UNIX} \newcommand{\UNIX}{UNIX}
\newcommand{\OSname}[0]{Tiny UNIX} \newcommand{\OSname}[0]{Tiny UNIX}
@@ -507,11 +530,16 @@
\newcommand{\Catchcont}{\keyw{catchcont}} \newcommand{\Catchcont}{\keyw{catchcont}}
\newcommand{\Control}{\keyw{control}} \newcommand{\Control}{\keyw{control}}
\newcommand{\Prompt}{\#} \newcommand{\Prompt}{\#}
\newcommand{\Controlz}{\keyw{control0}} \newcommand{\Controlz}{\ensuremath{\keyw{control_0}}}
\newcommand{\Promptz}{\#_0} \newcommand{\Spawn}{\keyw{spawn}}
\newcommand{\Promptz}{\ensuremath{\#_0}}
\newcommand{\Escape}{\keyw{escape}} \newcommand{\Escape}{\keyw{escape}}
\newcommand{\shift}{\keyw{shift}} \newcommand{\shift}{\keyw{shift}}
\newcommand{\shiftz}{\keyw{shift0}} \newcommand{\shiftz}{\ensuremath{\keyw{shift_0}}}
\newcommand{\CCpp}{\ensuremath{+\CC+}}
\newcommand{\CCpm}{\ensuremath{+\CC-}}
\newcommand{\CCmp}{\ensuremath{-\CC+}}
\newcommand{\CCmm}{\ensuremath{-\CC-}}
\def\sigh#1{% \def\sigh#1{%
\pmb{\left\langle\vphantom{#1}\right.}% \pmb{\left\langle\vphantom{#1}\right.}%
#1% #1%
@@ -519,6 +547,8 @@
\newcommand{\llambda}{\ensuremath{\pmb{\lambda}}} \newcommand{\llambda}{\ensuremath{\pmb{\lambda}}}
\newcommand{\reset}[1]{\pmb{\langle} #1 \pmb{\rangle}} \newcommand{\reset}[1]{\pmb{\langle} #1 \pmb{\rangle}}
\newcommand{\resetz}[1]{\pmb{\langle} #1 \pmb{\rangle}_0} \newcommand{\resetz}[1]{\pmb{\langle} #1 \pmb{\rangle}_0}
\newcommand{\dollarz}[2]{\ensuremath{\reset{#2 \mid #1}}}
\newcommand{\dollarzh}[2]{\ensuremath{#1\,\$_0#2}}
\newcommand{\fcontrol}{\keyw{fcontrol}} \newcommand{\fcontrol}{\keyw{fcontrol}}
\newcommand{\fprompt}{\%} \newcommand{\fprompt}{\%}
\newcommand{\splitter}{\keyw{splitter}} \newcommand{\splitter}{\keyw{splitter}}
@@ -546,6 +576,7 @@
%% %%
%% Asymptotic improvement macros %% Asymptotic improvement macros
%% %%
\newcommand{\LLL}{\ensuremath{\mathcal L}}
\newcommand{\naive}{naïve\xspace} \newcommand{\naive}{naïve\xspace}
\newcommand{\naively}{naïvely\xspace} \newcommand{\naively}{naïvely\xspace}
\newcommand{\Naive}{Naïve\xspace} \newcommand{\Naive}{Naïve\xspace}
@@ -680,3 +711,141 @@
} }
; ;
\end{tikzpicture}} \end{tikzpicture}}
\newcommand{\smath}[1]{\ensuremath{{\scriptstyle #1}}}
\newcommand{\InfiniteModel}{%
\begin{tikzpicture}[->,>=stealth',level/.style={sibling distance = 3.0cm/##1,
level distance = 1.0cm}]
\node (root) [draw=none] { }
child { node [opnode] {$\smath{\query 0}$}
child { node [opnode] {$\smath{\query 0}$}
child { node [draw=none,rotate=165] {$\vdots$}
edge from parent node { }
}
child { node[leaf] {$\smath{\ans\False}$}
edge from parent node { }
}
edge from parent node { }
}
child { node [leaf] {$\smath{\ans\False}$}
edge from parent node { }
}
edge from parent node { }
}
;
\end{tikzpicture}}
%
\newcommand{\ShortConjModel}{%
\begin{tikzpicture}[->,>=stealth',level/.style={sibling distance = 3.5cm/##1,
level distance = 1.0cm}]
\node (root) [draw=none] { }
child { node [opnode] {$\smath{\query 0}$}
child { node [opnode] {$\smath{\query 0}$}
child { node [treenode] {$\smath{\ans\True}$}
edge from parent node { }
}
child { node[treenode] {$\smath{\ans\False}$}
edge from parent node { }
}
edge from parent node { }
}
child { node [treenode] {$\smath{\ans\False}$}
edge from parent node { }
}
edge from parent node { }
}
;
\end{tikzpicture}}
%
\newcommand{\TTTwoModel}{%
\begin{tikzpicture}[->,>=stealth',level/.style={sibling distance = 8cm/##1,
level distance = 1.5cm}]
\node (root) [draw=none] { }
child { node [opnode] {$\smath{\query 0}$}
child { node [opnode] {$\smath{\query 1}$}
child { node [leaf] {$\smath{\ans\True}$}
edge from parent node { }
}
child { node[leaf] {$\smath{\ans\True}$}
edge from parent node { }
}
edge from parent node { }
}
child { node [opnode] {$\smath{\query 1}$}
child { node [leaf] {$\smath{\ans\True}$}
edge from parent node { }
}
child { node[leaf] {$\smath{\ans\True}$}
edge from parent node { }
}
edge from parent node { }
}
edge from parent node { }
}
;
\end{tikzpicture}}
%
\newcommand{\XORTwoModel}{%
\begin{tikzpicture}[->,>=stealth',level/.style={sibling distance = 5.5cm/##1,
level distance = 1cm}]
\node (root) [draw=none] { }
child { node [opnode] {$\smath{\query 0}$}
child { node [opnode] {$\smath{\query 1}$}
child { node [treenode] {$\smath{\ans\False}$}
edge from parent node { }
}
child { node[treenode] {$\smath{\ans\True}$}
edge from parent node { }
}
edge from parent node { }
}
child { node [opnode] {$\smath{\query 1}$}
child { node [treenode] {$\smath{\ans\True}$}
edge from parent node { }
}
child { node[treenode] {$\smath{\ans\False}$}
edge from parent node { }
}
edge from parent node { }
}
edge from parent node { }
}
;
\end{tikzpicture}}
%
\newcommand{\SXORTwoModel}{%
\begin{tikzpicture}[->,>=stealth',level/.style={sibling distance = 2.5cm/##1,
level distance = 1cm}]
\node (root) [opnode] {$\smath{\query 0}$}
child { node [opnode] {$\smath{\query 1}$}
child { node [treenode] {$\smath{\ans\False}$}
edge from parent node { }
}
child { node[treenode] {$\smath{\ans\True}$}
edge from parent node { }
}
edge from parent node { }
}
child { node [opnode] {$\smath{\query 1}$}
child { node [treenode] {$\smath{\ans\True}$}
edge from parent node { }
}
child { node[treenode] {$\smath{\ans\False}$}
edge from parent node { }
}
edge from parent node { }
}
;
\end{tikzpicture}}
%
\newcommand{\TTZeroModel}{%
\begin{tikzpicture}[->,>=stealth',level/.style={sibling distance = 1cm/##1,
level distance = 1cm}]
\node (root) [draw=none] { }
child { node [treenode] {$\smath{\ans\True}$}
edge from parent node { }
}
;
\end{tikzpicture}}%

32
slides/Makefile Normal file
View File

@@ -0,0 +1,32 @@
TEXC=pdflatex
CFLAGS=-interaction=nonstopmode -halt-on-error -file-line-error
BIBC=bibtex
PAPER=viva
BIBLIO=$(PAPER)
LATEST_COMMIT=$(shell git log --format="%h" -n 1)
all: $(PAPER).pdf
draft: $(PAPER).pdf-draft
$(PAPER).aux: $(PAPER).tex
$(TEXC) $(CFLAGS) $(PAPER)
$(BIBLIO).bbl: $(PAPER).aux $(BIBLIO).bib
$(BIBC) $(PAPER)
$(PAPER).pdf: $(PAPER).aux $(BIBLIO).bbl
$(TEXC) $(CFLAGS) $(PAPER)
$(TEXC) $(CFLAGS) $(PAPER)
$(PAPER).pdf-draft: CFLAGS:=$(CFLAGS) "\def\DRAFT{$(LATEST_COMMIT)}\input{$(PAPER)}"
$(PAPER).pdf-draft: all
mv $(PAPER).pdf $(PAPER)-draft.pdf
tar cf thesis-draft.tar.gz $(PAPER)-draft.pdf
clean:
rm -f *.log *.aux *.toc *.out
rm -f *.bbl *.blg *.fls *.xml
rm -f *.nav *.snm
rm -f *.fdb_latexmk *.vtc *.cut
rm -f $(PAPER).pdf camera-ready.pdf submission.pdf
rm -f *.o *.cmx *.cmo

82
slides/viva.bib Normal file
View File

@@ -0,0 +1,82 @@
@inproceedings{HillerstromL16,
author = {Daniel Hillerstr{\"{o}}m and
Sam Lindley},
title = {Liberating effects with rows and handlers},
booktitle = {TyDe@ICFP},
pages = {15--27},
publisher = {{ACM}},
year = {2016}
}
@inproceedings{HillerstromLAS17,
author = {Daniel Hillerstr{\"{o}}m and
Sam Lindley and
Robert Atkey and
{KC} Sivaramakrishnan},
title = {Continuation Passing Style for Effect Handlers},
booktitle = {{FSCD}},
series = {LIPIcs},
volume = {84},
pages = {18:1--18:19},
OPTpublisher = {Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik},
year = {2017}
}
@inproceedings{HillerstromL18,
author = {Daniel Hillerstr{\"{o}}m and
Sam Lindley},
title = {Shallow Effect Handlers},
booktitle = {{APLAS}},
OPTseries = {Lecture Notes in Computer Science},
series = {{LNCS}},
volume = {11275},
pages = {415--435},
publisher = {Springer},
year = {2018}
}
@article{HillerstromLA20,
author = {Daniel Hillerstr{\"{o}}m and
Sam Lindley and
Robert Atkey},
title = {Effect handlers via generalised continuations},
journal = {J. Funct. Program.},
volume = {30},
pages = {e5},
year = {2020}
}
@article{HillerstromLL20,
author = {Daniel Hillerstr{\"{o}}m and
Sam Lindley and
John Longley},
title = {Effects for Efficiency: Asymptotic Speedup with First-Class Control},
journal = {Proc. {ACM} Program. Lang.},
volume = {4},
number = {{ICFP}},
pages = {100:1--100:29},
year = {2020}
}
# Unix
@article{RitchieT74,
author = {Dennis Ritchie and
Ken Thompson},
title = {The {UNIX} Time-Sharing System},
journal = {Commun. {ACM}},
volume = {17},
number = {7},
pages = {365--375},
year = {1974}
}
# CEK & C
@InProceedings{FelleisenF86,
title={Control Operators, the {SECD}-machine, and the $\lambda$-Calculus},
author={Felleisen, Matthias and Friedman, Daniel P.},
year=1987,
booktitle = {Formal Description of Programming Concepts III},
OPTbooktitle = {The Proceedings of the Conference on Formal Description of Programming Concepts III, Ebberup, Denmark},
pages = {193--217},
OPTpublisher={North Holland}
}

201
slides/viva.tex Normal file
View File

@@ -0,0 +1,201 @@
\documentclass[169,10pt,compress,dvipsnames]{beamer}
%%
%% Slides layout
%%
\beamertemplatenavigationsymbolsempty % hides navigation buttons
\usetheme{Madrid} % standard Madrid theme
\setbeamertemplate{footline}{} % renders the footer empty
%
\setbeamertemplate{bibliography item}{ % this is a hack to prevent Madrid theme + biblatex
\hspace{-0.4cm}\lower3pt\hbox{ % from causing bibliography entries to run over
\pgfuseimage{beamericonarticle} % the slide margins
}}
%%
%% Packages
%%
\usepackage[utf8]{inputenc} % enable UTF-8 compatible typing
\usepackage{hyperref} % interactive PDF
\usepackage[sort&compress,square,numbers]{natbib} % Bibliography
\usepackage{bibentry} % Print bibliography entries inline.
\makeatletter % Redefine bibentry to omit hyperrefs
\renewcommand\bibentry[1]{\nocite{#1}{\frenchspacing
\@nameuse{BR@r@#1\@extra@b@citeb}}}
\makeatother
\nobibliography* % use the bibliographic data from the standard BibTeX setup.
\usepackage{amsmath,amssymb,mathtools} % maths typesetting
\usepackage{../pkgs/mathpartir} % Inference rules
\usepackage{../pkgs/mathwidth} % renders character sequences nicely in math mode
\usepackage{stmaryrd} % semantic brackets
\usepackage{xspace} % proper spacing for macros in text
\usepackage[T1]{fontenc} % 8-bit font encoding
% native support for accented characters.
\usepackage[scaled=0.85]{beramono} % smoother typewriter font
\newcommand*{\Scale}[2][4]{\scalebox{#1}{\ensuremath{#2}}}%
\input{../macros.tex}
%%
%% Meta information
%%
\author{Daniel Hillerström}
\title{Foundations for Programming and Implementing Effect Handlers}
\institute{The University of Edinburgh, Scotland UK}
\subtitle{PhD viva}
\date{August 13, 2021}
%%
%% Slides
%%
\begin{document}
%
% Title slide
%
\begin{frame}
\maketitle
\end{frame}
% Dissertation overview
\begin{frame}
\frametitle{My dissertation at glance}
Three main strands of work
\begin{description}
\item[Programming] Language design and applications of effect handlers.
\item[Implementation] Canonical implementation strategies for effect handlers.
\item[Expressiveness] Exploration of the computational expressiveness of effect handlers.
\end{description}
\end{frame}
\begin{frame}
\frametitle{Calculi for deep, shallow, and parameterised handlers}
The calculi capture key aspects of the implementation of effect
handlers in Links.
\begin{itemize}
\item $\HCalc$ ordinary deep handlers (fold).
\item $\SCalc$ shallow handlers (case-split).
\item $\HPCalc$ parameterised deep handlers (fold+state).
\end{itemize}
The actual implementation is the union of the three calculi.\\[2em]
\textbf{Relevant papers} TyDe'16~\cite{HillerstromL16},
APLAS'18~\cite{HillerstromL18}, JFP'20~\cite{HillerstromLA20}.
\end{frame}
% UNIX
\begin{frame}
\frametitle{Effect handlers as composable operating systems}
An interpretation of \citeauthor{RitchieT74}'s
UNIX~\cite{RitchieT74} in terms of effect handlers.\\[2em]
\[
\bl
\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\textbf{Basic idea}
\ba[m]{@{\qquad}r@{~}c@{~}l}
\text{\emph{system call}} &\approx& \text{\emph{operation invocation}}\\
\text{\emph{system call implementation}} &\approx& \text{\emph{operation interpretation}}
\ea
\el
\]\hfill\\[2em]
\textbf{Key point} Legacy code is modularly retrofitted with functionality.
\end{frame}
% CPS translation
\begin{frame}
\frametitle{CPS transforms for effect handlers}
A higher-order CPS transform for effect handlers with generalised
continuations.\\[1em]
\textbf{Generalised continuation} Structured representation of
delimited continuations.\\[0.5em]
\[
\Scale[1.8]{\kappa = \overline{(\sigma, (\hret,\hops))}}
\]\\[1em]
\textbf{Key point} Separate the \emph{doing} layer ($\sigma$) from the \emph{being} layer ($H$).\\[2em]
\textbf{Relevant papers} FSCD'17~\cite{HillerstromLAS17},
APLAS'18~\cite{HillerstromL18}, JFP'20~\cite{HillerstromLA20}.
\end{frame}
% Abstract machine
\begin{frame}
\frametitle{Abstract machine semantics for effect handlers}
Plugging generalised continuations into \citeauthor{FelleisenF86}'s
CEK machine~\cite{FelleisenF86} yields a runtime for effect
handlers.\\[2em]
\[
\Scale[2]{\cek{C \mid E \mid K = \overline{(\sigma, (H,E))}}}
\]\\[2em]
\textbf{Relevant papers} TyDe'16~\cite{HillerstromL16},
JFP'20~\cite{HillerstromLA20}.
\end{frame}
% Interdefinability of handlers
\begin{frame}
\frametitle{Interdefinability of effect handlers}
Deep, shallow, and parameterised handlers are interdefinable
w.r.t. to typability-preserving macro-expressiveness.
\begin{itemize}
\item Deep as shallow, $\mathcal{D}\llbracket - \rrbracket$, image is computationally lightweight.
\item Shallow as deep, $\mathcal{S}\llbracket - \rrbracket$, image is computationally expensive.
\item Parameterised as deep, $\mathcal{P}\llbracket - \rrbracket$,
image uses explicit state-passing.
\end{itemize}
~\\[1em]
\textbf{Relevant papers} APLAS'18~\cite{HillerstromL18},
JFP'20~\cite{HillerstromLA20}.
\end{frame}
% Asymptotic speed up with first-class control
\begin{frame}
\frametitle{Asymptotic speed up with effect handlers}
Effect handlers can make some programs faster!
\[
\Count_n : ((\Nat_n \to \Bool) \to \Bool) \to \Nat
\]\\[1em]
%
Using type-respecting expressiveness
\begin{itemize}
\item There \textbf{exists} an implementation of $\Count_n \in \HPCF$ with
effect handlers such that the runtime for every $n$-standard predicate $P$ is
$\Count_n~P = \BigO(2^n)$.
\item \textbf{Forall} implementations of $\Count_n \in \BPCF$ the runtime for every $n$-standard predicate $P$ is $\Count_n~P = \Omega(n2^n)$
\end{itemize}
~\\[1em]
\textbf{Relevant paper} ICFP'20~\cite{HillerstromLL20}.
\end{frame}
% Background
% \begin{frame}
% \frametitle{Continuations literature review}
% \end{frame}
%
% References
%
\begin{frame}%[allowframebreaks]
\frametitle{References}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{frame}
\end{document}

View File

@@ -1,4 +1,4 @@
# Daniel's master's thesis (initial implementation of handlers in Links) # My MSc thesis (initial implementation of handlers in Links)
@MastersThesis{Hillerstrom15, @MastersThesis{Hillerstrom15,
author = {Daniel Hillerström}, author = {Daniel Hillerström},
title = {Handlers for Algebraic Effects in {Links}}, title = {Handlers for Algebraic Effects in {Links}},
@@ -8,7 +8,7 @@
year = 2015 year = 2015
} }
# Daniel's master's thesis (abstract message-passing concurrency model, compilation of handlers) # My MSc(R) thesis (abstract message-passing concurrency model, compilation of handlers)
@MastersThesis{Hillerstrom16, @MastersThesis{Hillerstrom16,
author = {Daniel Hillerström}, author = {Daniel Hillerström},
title = {Compilation of Effect Handlers and their Applications in Concurrency}, title = {Compilation of Effect Handlers and their Applications in Concurrency},
@@ -19,6 +19,15 @@
type = {{MSc(R)} thesis} type = {{MSc(R)} thesis}
} }
# UNIX with effect handlers abstract
@misc{Hillerstrom21,
author = {Daniel Hillerström},
title = {Composing {UNIX} with {Effect} {Handlers}: {A} {Case} {Study} in {Effect} {Handler} {Oriented} {Programming} (Extended Abstract)},
year = {2021},
optmonth = sep,
howpublished = {{ML Workshop}}
}
# OCaml handlers # OCaml handlers
@article{SivaramakrishnanDWKJM21, @article{SivaramakrishnanDWKJM21,
author = {{KC} Sivaramakrishnan and author = {{KC} Sivaramakrishnan and
@@ -27,7 +36,7 @@
Tom Kelly and Tom Kelly and
Sadiq Jaffer and Sadiq Jaffer and
Anil Madhavapeddy}, Anil Madhavapeddy},
title = {Retrofitting Effect Handlers onto OCaml}, title = {Retrofitting Effect Handlers onto {OCaml}},
journal = {CoRR}, journal = {CoRR},
volume = {abs/2104.00250}, volume = {abs/2104.00250},
year = {2021} year = {2021}
@@ -35,16 +44,17 @@
@misc{DolanWSYM15, @misc{DolanWSYM15,
title = {Effective Concurrency through Algebraic Effects}, title = {Effective Concurrency through Algebraic Effects},
author = {Stephen Dolan and Leo White and {KC} Sivaramakrishnan and Jeremy Yallop and Anil Madhavapeddy}, author = {Stephen Dolan and Leo White and {KC} Sivaramakrishnan
and Jeremy Yallop and Anil Madhavapeddy},
year = 2015, year = 2015,
howpublished = {OCaml Workshop} howpublished = {{OCaml} Workshop}
} }
@misc{DolanWM14, @misc{DolanWM14,
title = {Multicore {OCaml}}, title = {Multicore {OCaml}},
author = {Stephen Dolan and Leo White and Anil Madhavapeddy}, author = {Stephen Dolan and Leo White and Anil Madhavapeddy},
year = {2014}, year = {2014},
howpublished = {OCaml Workshop} howpublished = {{OCaml} Workshop}
} }
@inproceedings{DolanEHMSW17, @inproceedings{DolanEHMSW17,
@@ -67,7 +77,7 @@
# Delimited control in OCaml # Delimited control in OCaml
@article{Kiselyov12, @article{Kiselyov12,
author = {Oleg Kiselyov}, author = {Oleg Kiselyov},
title = {Delimited control in OCaml, abstractly and concretely}, title = {Delimited control in {OCaml}, abstractly and concretely},
journal = {Theor. Comput. Sci.}, journal = {Theor. Comput. Sci.},
volume = {435}, volume = {435},
pages = {56--76}, pages = {56--76},
@@ -278,6 +288,16 @@
year = {2020} year = {2020}
} }
@article{HillerstromLL20a,
author = {Daniel Hillerstr{\"{o}}m and
Sam Lindley and
John Longley},
title = {Effects for Efficiency: Asymptotic Speedup with First-Class Control},
journal = {CoRR},
volume = {abs/2007.00605},
year = {2020}
}
@phdthesis{McLaughlin20, @phdthesis{McLaughlin20,
author = {Craig McLaughlin}, author = {Craig McLaughlin},
title = {Relational Reasoning for Effects and Handlers}, title = {Relational Reasoning for Effects and Handlers},
@@ -357,7 +377,7 @@
@inproceedings{XieL20, @inproceedings{XieL20,
author = {Ningning Xie and author = {Ningning Xie and
Daan Leijen}, Daan Leijen},
title = {Effect handlers in Haskell, evidently}, title = {Effect handlers in {Haskell}, evidently},
booktitle = {Haskell@ICFP}, booktitle = {Haskell@ICFP},
pages = {95--108}, pages = {95--108},
publisher = {{ACM}}, publisher = {{ACM}},
@@ -581,16 +601,6 @@
year = {2017} year = {2017}
} }
@inproceedings{Leijen05,
author = {Daan Leijen},
title = {Extensible records with scoped labels},
booktitle = {Trends in Functional Programming},
series = {Trends in Functional Programming},
volume = {6},
pages = {179--194},
publisher = {Intellect},
year = {2005}
}
# Helium # Helium
@article{BiernackiPPS18, @article{BiernackiPPS18,
@@ -741,6 +751,19 @@
year = {2012} year = {2012}
} }
# "Proto handlers"
@inproceedings{CartwrightF94,
author = {Robert Cartwright and
Matthias Felleisen},
title = {Extensible Denotational Language Specifications},
booktitle = {{TACS}},
series = {Lecture Notes in Computer Science},
volume = {789},
pages = {244--272},
publisher = {Springer},
year = {1994}
}
# Applicative idioms # Applicative idioms
@article{McBrideP08, @article{McBrideP08,
author = {Conor McBride and author = {Conor McBride and
@@ -835,6 +858,16 @@
year = {1995} year = {1995}
} }
@article{Sabry98,
author = {Amr Sabry},
title = {What is a Purely Functional Language?},
journal = {J. Funct. Program.},
volume = {8},
number = {1},
pages = {1--22},
year = {1998}
}
@article{Swierstra08, @article{Swierstra08,
author = {Wouter Swierstra}, author = {Wouter Swierstra},
title = {Data types {\`{a}} la carte}, title = {Data types {\`{a}} la carte},
@@ -1171,6 +1204,50 @@
year = {2006} year = {2006}
} }
# Row polymorphism
@inproceedings{Wand87,
author = {Mitchell Wand},
title = {Complete Type Inference for Simple Objects},
booktitle = {{LICS}},
pages = {37--44},
publisher = {{IEEE} Computer Society},
year = {1987}
}
@inbook{Remy94,
author = {Didier R\'{e}my},
title = {Type Inference for Records in Natural Extension of ML},
year = 1994,
OPTisbn = {026207155X},
publisher = {MIT Press},
address = {Cambridge, MA, USA},
booktitle = {Theoretical Aspects of Object-Oriented Programming: Types, Semantics, and Language Design},
pages = {67--95},
numpages = {29}
}
@inproceedings{Leijen05,
author = {Daan Leijen},
title = {Extensible records with scoped labels},
booktitle = {Trends in Functional Programming},
series = {Trends in Functional Programming},
volume = {6},
pages = {179--194},
publisher = {Intellect},
year = {2005}
}
@article{MorrisM19,
author = {J. Garrett Morris and
James McKinna},
title = {Abstracting extensible data types: or, rows by any other name},
journal = {Proc. {ACM} Program. Lang.},
volume = {3},
number = {{POPL}},
pages = {12:1--12:28},
year = {2019}
}
# fancy row typing systems that support shapes # fancy row typing systems that support shapes
@inproceedings{BerthomieuS95, @inproceedings{BerthomieuS95,
author = {Bernard Berthomieu and Camille le Moniès de Sagazan}, author = {Bernard Berthomieu and Camille le Moniès de Sagazan},
@@ -1181,13 +1258,12 @@
@techreport{Remy93, @techreport{Remy93,
title = {{Syntactic theories and the algebra of record terms}}, title = {{Syntactic theories and the algebra of record terms}},
author = {Didier Remy}, author = {Didier R\'{e}my},
number = {RR-1869}, number = {RR-1869},
institution = {{INRIA}}, institution = {{INRIA}},
year = {1993}, year = {1993},
} }
# Zipper data structure. # Zipper data structure.
@article{Huet97, @article{Huet97,
author = {G{\'{e}}rard P. Huet}, author = {G{\'{e}}rard P. Huet},
@@ -1203,9 +1279,6 @@
OPTbibsource = {dblp computer science bibliography, http://dblp.org} OPTbibsource = {dblp computer science bibliography, http://dblp.org}
} }
@article{Hughes00, @article{Hughes00,
author = {John Hughes}, author = {John Hughes},
title = {Generalising monads to arrows}, title = {Generalising monads to arrows},
@@ -1738,6 +1811,18 @@
year = {1990} year = {1990}
} }
@inproceedings{KameyamaY08,
author = {Yukiyoshi Kameyama and
Takuo Yonezawa},
title = {Typed Dynamic Control Operators for Delimited Continuations},
booktitle = {{FLOPS}},
series = {{LNCS}},
volume = {4989},
pages = {239--254},
publisher = {Springer},
year = {2008}
}
# Escape # Escape
@article{Reynolds98a, @article{Reynolds98a,
author = {John C. Reynolds}, author = {John C. Reynolds},
@@ -1929,6 +2014,20 @@
year = {1994} year = {1994}
} }
# marker and callpc
@inproceedings{MoreauQ94,
author = {Luc Moreau and
Christian Queinnec},
title = {Partial Continuations as the Difference of Continuations - {A} Duumvirate
of Control Operators},
booktitle = {{PLILP}},
series = {{LNCS}},
volume = {844},
pages = {182--197},
publisher = {Springer},
year = {1994}
}
# Comparison of (some) delimited control operators # Comparison of (some) delimited control operators
@misc{Shan04, @misc{Shan04,
author = {Chung{-}chieh Shan}, author = {Chung{-}chieh Shan},
@@ -2302,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,
@@ -3443,6 +3543,18 @@
year = {1992} year = {1992}
} }
@inproceedings{TofteT94,
author = {Mads Tofte and
Jean{-}Pierre Talpin},
title = {Implementation of the Typed Call-by-Value lambda-Calculus using a
Stack of Regions},
booktitle = {{POPL}},
pages = {188--201},
publisher = {{ACM} Press},
year = {1994}
}
@article{TofteT97, @article{TofteT97,
author = {Mads Tofte and author = {Mads Tofte and
Jean{-}Pierre Talpin}, Jean{-}Pierre Talpin},
@@ -3466,6 +3578,26 @@
year = {1999} year = {1999}
} }
@inproceedings{BentonB07,
author = {Nick Benton and
Peter Buchlovsky},
title = {Semantics of an effect analysis for exceptions},
booktitle = {{TLDI}},
pages = {15--26},
publisher = {{ACM}},
year = {2007}
}
@article{BentonK99,
author = {Nick Benton and
Andrew Kennedy},
title = {Monads, Effects and Transformations},
journal = {Electron. Notes Theor. Comput. Sci.},
volume = {26},
pages = {3--20},
year = {1999}
}
# Intensional type theory # Intensional type theory
@book{MartinLof84, @book{MartinLof84,
author = {Per Martin{-}L{\"{o}}f}, author = {Per Martin{-}L{\"{o}}f},
@@ -3511,3 +3643,161 @@
school = {The University of Edinburgh, {UK}}, school = {The University of Edinburgh, {UK}},
year = {2010} year = {2010}
} }
# Functional programming
@article{Hughes89,
author = {John Hughes},
title = {Why Functional Programming Matters},
journal = {Comput. J.},
volume = {32},
number = {2},
pages = {98--107},
year = {1989}
}
# Curry-Howard correspondence
@incollection{Howard80,
author = {William A. Howard},
title = {The Formulae-as-Types Notion of Construction},
booktitle = {To H. B. Curry: Essays on Combinatory Logic, Lambda Calculus, and Formalism},
publisher = {Academic Press},
editor = {Haskell Curry and Hindley B. and Seldin J. Roger and P. Jonathan},
year = 1980
}
# Criteria for modular programming
@article{Parnas72,
author = {David Lorge Parnas},
title = {On the Criteria To Be Used in Decomposing Systems into Modules},
journal = {Commun. {ACM}},
volume = {15},
number = {12},
pages = {1053--1058},
year = {1972}
}
# The universal type
@InProceedings{Longley03,
author = {John Longley},
title = {Universal Types and What They are Good For},
booktitle = {Domain Theory, Logic and Computation},
year = 2003,
publisher = {Springer Netherlands},
pages = {25--63},
OPTisbn = {978-94-017-1291-0}
}
# Sixth order function example
@article{Okasaki98,
author = {Chris Okasaki},
title = {Functional Pearl: Even Higher-Order Functions for Parsing},
journal = {J. Funct. Program.},
volume = {8},
number = {2},
pages = {195--199},
year = {1998}
}
# CLR
@book{CormenLRS09,
author = {Cormen, Thomas H. and Leiserson, Charles E. and Rivest, Ronald L. and Stein, Clifford},
title = {Introduction to Algorithms, Third Edition},
year = {2009},
publisher = {{MIT} Press},
edition = {3rd},
}
# Undelimited continuations survey
@unpublished{FelleisenS99,
author = {Matthias Felleisen and Amr Sabry},
title = {Continuations in Programming Practice: Introduction and Survey},
year = 1999,
month = aug,
note = {Draft}
}
# TypeScript
@inproceedings{BiermanAT14,
author = {Gavin M. Bierman and
Mart{\'{\i}}n Abadi and
Mads Torgersen},
title = {Understanding TypeScript},
booktitle = {{ECOOP}},
series = {{LNCS}},
volume = {8586},
pages = {257--281},
publisher = {Springer},
year = {2014}
}
# TT lifting
@inproceedings{LindleyS05,
author = {Sam Lindley and
Ian Stark},
title = {Reducibility and TT-Lifting for Computation Types},
booktitle = {{TLCA}},
series = {Lecture Notes in Computer Science},
volume = {3461},
pages = {262--277},
publisher = {Springer},
year = {2005}
}
# Three state equations
@inproceedings{Mellies14,
author = {Paul{-}Andr{\'{e}} Melli{\`{e}}s},
title = {Local States in String Diagrams},
booktitle = {{RTA-TLCA}},
series = {{LNCS}},
volume = {8560},
pages = {334--348},
publisher = {Springer},
year = {2014}
}
# Asymptotic notation
@book{Bachmann94,
author = {Paul Bachmann},
title = {Die Analytische Zahlentheorie},
publisher = {Teubner},
pages = {1--494},
year = 1894
}
# Game semantics
@inbook{Hyland97,
author = {Martin Hyland},
title = {Game Semantics},
booktitle = {Semantics and Logics of Computation},
publisher = {Cambridge University Press},
editor = {Andrew M. Pitts and Peter Dybjer},
pages = {131--184},
year = 1997
}
# Milner's context lemma
@article{Milner77,
author = {Robin Milner},
title = {Fully Abstract Models of Typed $\lambda$-Calculi},
journal = {Theor. Comput. Sci.},
volume = {4},
number = {1},
pages = {1--22},
year = {1977}
}
# Dagstuhl seminar report
@article{AhmanALR21,
author = {Danel Ahman and
Amal Ahmed and
Sam Lindley and
Andreas Rossberg},
title = {{Scalable} {Handling} of {Effects} ({Dagstuhl} {Seminar} 21292)},
journal = {Dagstuhl Reports},
volume = {11},
number = {6},
pages = {54--81},
year = {2021}
}

17011
thesis.tex

File diff suppressed because it is too large Load Diff