Daniel Hillerström 5 years ago
parent
commit
5340615c26
  1. 4
      macros.tex
  2. 146
      thesis.tex

4
macros.tex

@ -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

@ -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

Loading…
Cancel
Save