mirror of
https://github.com/dhil/phd-dissertation
synced 2026-03-13 11:08:25 +00:00
WIP
This commit is contained in:
@@ -20,6 +20,9 @@
|
|||||||
\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}}}
|
||||||
|
|
||||||
%%
|
%%
|
||||||
%% Partiality
|
%% Partiality
|
||||||
@@ -564,6 +567,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}
|
||||||
|
|||||||
146
thesis.tex
146
thesis.tex
@@ -2332,8 +2332,149 @@ of growth of $f$ is constant.
|
|||||||
|
|
||||||
\section{Typed programming languages}
|
\section{Typed programming languages}
|
||||||
\label{sec:pls}
|
\label{sec:pls}
|
||||||
|
We will be working mostly with statically typed programming
|
||||||
|
languages. The following definition informally describes the component
|
||||||
|
of a programming language.
|
||||||
%
|
%
|
||||||
\dhil{Definition of (typed) programming language, conservative extension, macro-expressiveness~\cite{Felleisen90,Felleisen91}}
|
The point here is not to be mathematical rigorous, but rather to give
|
||||||
|
an idea of what constitutes a programming language.
|
||||||
|
%
|
||||||
|
\begin{definition}
|
||||||
|
A statically typed programming language $\LLL$ consists of a syntax
|
||||||
|
$S$, static semantics $T$, and dynamic semantics $E$ where
|
||||||
|
\begin{itemize}
|
||||||
|
\item $S$ is a collection of syntax constructors $\SC_1,\SC_2,\dots$
|
||||||
|
constructing members of each syntactic category of $\LLL$
|
||||||
|
(e.g. terms, types, and kinds);
|
||||||
|
\item $T : S \to \B$ is \emph{typechecking} function, which decides
|
||||||
|
whether a given (closed) term is well-typed; and
|
||||||
|
\item $E : P \pto R$ is an \emph{evaluation} function, which maps
|
||||||
|
well-typed programs $P \subseteq S$ to some unspecified set of
|
||||||
|
answers $R$.
|
||||||
|
\end{itemize}
|
||||||
|
\end{definition}
|
||||||
|
%
|
||||||
|
We will always present the syntax of a programming language on
|
||||||
|
Backus-Naur form.
|
||||||
|
%
|
||||||
|
The static semantics will always be given in form a typing judgement
|
||||||
|
(and a kinding judgement for languages with polymorphism), and the
|
||||||
|
dynamic semantics will be given as either a reduction relation or an
|
||||||
|
abstract machine.
|
||||||
|
|
||||||
|
We will take the view that an untyped programming language is a
|
||||||
|
special instance of a statically typed programming language, where the
|
||||||
|
typechecking function $T$ is the constant function that always returns
|
||||||
|
true.
|
||||||
|
|
||||||
|
\begin{definition}
|
||||||
|
A programming language $\LLL = (S, T, E)$ is said to be a
|
||||||
|
\emph{conservative extension} of a language $\LLL' = (S', T', E')$
|
||||||
|
if the following conditions are met.
|
||||||
|
\begin{itemize}
|
||||||
|
\item $S'$ is a proper subset of $S$.
|
||||||
|
\item $\LLL$ preserves the static semantics of $\LLL'$,
|
||||||
|
i.e. $T(P)$ holds if and only if $T'(P)$ holds for all programs
|
||||||
|
$P$ generated by $S'$.
|
||||||
|
\item $\LLL$ preserves the dynamic semantics of $\LLL'$, i.e.
|
||||||
|
$E(P)$ holds if and only if $E'(P)$ holds for all programs $P$
|
||||||
|
generated by $S'$.
|
||||||
|
\end{itemize}
|
||||||
|
\end{definition}
|
||||||
|
% \dhil{Definition of (typed) programming language, conservative extension, macro-expressiveness~\cite{Felleisen90,Felleisen91}}
|
||||||
|
|
||||||
|
% \begin{definition}
|
||||||
|
% A signature $\Sigma$ is a collection of abstract syntax constructors
|
||||||
|
% with arities $\{(\SC_i, \ar_i)\}_i$, where $\ST_i$ are syntactic
|
||||||
|
% entities and $\ar_i$ are natural numbers. Syntax constructors with
|
||||||
|
% arities $0$, $1$, $2$, and $3$ are referred to as nullary, unary,
|
||||||
|
% binary, and ternary, respectively.
|
||||||
|
% \end{definition}
|
||||||
|
|
||||||
|
% \begin{definition}[Terms in contexts]
|
||||||
|
% A context $\mathcal{X}$ is set of variables $\{x_1,\dots,x_n\}$. For
|
||||||
|
% a signature $\Sigma = \{(\SC_i, \ar_i)\}_i$ the $\Sigma$-terms in
|
||||||
|
% some context $\mathcal{X}$ are generated according to the following
|
||||||
|
% inductive rules:
|
||||||
|
% \begin{itemize}
|
||||||
|
% \item each variable $x_i \in \mathcal{X}$ is a $\Sigma$-term,
|
||||||
|
% \item if $t_1,\dots,t_{\ar_i}$ are $\Sigma$-terms in context
|
||||||
|
% $\mathcal{X}$, then $\SC_i(t_1,\dots,t_{\ar_i})$ is
|
||||||
|
% $\Sigma$-term in context $\mathcal{X}$.
|
||||||
|
% \end{itemize}
|
||||||
|
% We write $\mathcal{X} \vdash t$ to indicate that $t$ is a
|
||||||
|
% $\Sigma$-term in context $\mathcal{X}$. A $\Sigma$-term $t$ is
|
||||||
|
% said to be closed if $\emptyset \vdash t$, i.e. no variables occur
|
||||||
|
% in $t$.
|
||||||
|
% \end{definition}
|
||||||
|
|
||||||
|
% \begin{definition}
|
||||||
|
% A $\Sigma$-equation is a pair of terms $t_1,t_2 \in \Sigma$ in
|
||||||
|
% context $\mathcal{X}$, which we write as
|
||||||
|
% $\mathcal{X} \vdash t_1 = t_2$.
|
||||||
|
% \end{definition}
|
||||||
|
|
||||||
|
% The notation $\mathcal{X} \vdash t_1 = t_2$ begs to be read as a
|
||||||
|
% logical statement, though, in universal algebra the notation is simply
|
||||||
|
% a syntax. In order to give it a meaning we must first construct a
|
||||||
|
% \emph{model} which interprets the syntax. We shall not delve deeper
|
||||||
|
% here; for our purposes we may think of a $\Sigma$-equation as a
|
||||||
|
% logical statement (the attentive reader may already have realised that .
|
||||||
|
|
||||||
|
|
||||||
|
% The following definition is an adaptation of
|
||||||
|
% \citeauthor{Felleisen90}'s definition of programming language to
|
||||||
|
% define statically typed programming languages~\cite{Felleisen90}.
|
||||||
|
% %
|
||||||
|
% \begin{definition}
|
||||||
|
% %
|
||||||
|
% A statically typed programming language $\LLL$ consists of the
|
||||||
|
% following components.
|
||||||
|
% %
|
||||||
|
% \begin{itemize}
|
||||||
|
% \item A signature $\Sigma_T = \{(\ST_i,\ar_i)\}_i$ of \emph{type syntax constructors}.
|
||||||
|
% \item A signature $\Sigma_t = \{(\SC_i,\ar_i)\}_i$ of \emph{term syntax constructors}.
|
||||||
|
% \item A signature $\Sigma_p = \{(\SC_i,
|
||||||
|
% \item A static semantics, which is a function
|
||||||
|
% $typecheck : \Sigma_t \to \B$, which decides whether a
|
||||||
|
% given closed term is well-typed.
|
||||||
|
% \item An operational semantics, which is a partial function
|
||||||
|
% $eval : P \pto R$, where $P$ is the set of well-typed terms, i.e.
|
||||||
|
% %
|
||||||
|
% \[
|
||||||
|
% P = \{ t \in \Sigma_t \mid typecheck~t~\text{is true} \},
|
||||||
|
% \]
|
||||||
|
% %
|
||||||
|
% and $R$ is some unspecified set of answers.
|
||||||
|
% \end{itemize}
|
||||||
|
% \end{definition}
|
||||||
|
% %
|
||||||
|
|
||||||
|
% An untyped programming language is just a special instance of a
|
||||||
|
% statically typed programming language, where the signature of type
|
||||||
|
% syntax constructors is a singleton containing a nullary type syntax
|
||||||
|
% constructor for the \emph{universal type}, and the function
|
||||||
|
% $typecheck$ is a constant function that always returns true.
|
||||||
|
|
||||||
|
% A statically polymorphic typed programming language $\LLL$ also
|
||||||
|
% includes a set of $\LLL$-kinds of kind syntax constructors as well as
|
||||||
|
% a function $kindcheck_\LLL : \LLL\text{-types} \to \B$ which checks
|
||||||
|
% whether a given type is well-kinded.
|
||||||
|
|
||||||
|
% \begin{definition}
|
||||||
|
% A context free grammar is a quadruple $(N, \Sigma, R, S)$, where
|
||||||
|
% \begin{enumerate}
|
||||||
|
% \item $N$ is a finite set called the nonterminals.
|
||||||
|
% \item $\Sigma$ is a finite set, such that
|
||||||
|
% $\Sigma \cap V = \emptyset$, called the alphabet (or terminals).
|
||||||
|
% \item $R$ is a finite set of rules, each rule is on the form
|
||||||
|
% \[
|
||||||
|
% P ::= (N \cup \Sigma)^\ast, \quad\text{where}~P \in N.
|
||||||
|
% \]
|
||||||
|
% \item $S$ is the initial nonterminal.
|
||||||
|
% \end{enumerate}
|
||||||
|
% \end{definition}
|
||||||
|
|
||||||
|
|
||||||
% \chapter{State of effectful programming}
|
% \chapter{State of effectful programming}
|
||||||
% \label{ch:related-work}
|
% \label{ch:related-work}
|
||||||
@@ -15181,10 +15322,7 @@ the captured context and continuation invocation context to coincide.
|
|||||||
|
|
||||||
\chapter{Asymptotic speedup with effect handlers}
|
\chapter{Asymptotic speedup with effect handlers}
|
||||||
\label{ch:handlers-efficiency}
|
\label{ch:handlers-efficiency}
|
||||||
\def\LLL{{\mathcal L}}
|
|
||||||
\def\N{{\mathbb N}}
|
|
||||||
%
|
%
|
||||||
|
|
||||||
When extending some programming language $\LLL \subset \LLL'$ with
|
When extending some programming language $\LLL \subset \LLL'$ with
|
||||||
some new feature it is desirable to know exactly how the new feature
|
some new feature it is desirable to know exactly how the new feature
|
||||||
impacts the language. At a bare minimum it is useful to know whether
|
impacts the language. At a bare minimum it is useful to know whether
|
||||||
|
|||||||
Reference in New Issue
Block a user