more updates
[phd-thesis.git] / intro / intro.tex
index fcf191b..ceaea49 100644 (file)
@@ -4,6 +4,7 @@
 \setcounter{chapter}{-1}
 
 \begin{document}
+\input{subfileprefix}
 \chapter{Prelude}%
 \label{chp:introduction}
 \begin{chapterabstract}
@@ -279,31 +280,35 @@ This feather-light domain-specific \gls{OS} is written in portable \gls{C} with
 \Gls{MTASK} is seamlessly integrated with \gls{ITASK}: \gls{MTASK} tasks are integrated in such a way that they function as \gls{ITASK} tasks, and \glspl{SDS} in on the device can tether an \gls{ITASK} \gls{SDS}.
 Using \gls{MTASK}, the programmer can define all layers of an \gls{IOT} system as a single declarative specification.
 
-\Cref{lst:intro_blink,fig:intro_blink} shows the code and a screenshot of an interactive \gls{MTASK}\slash{}\gls{ITASK} application for blinking \pgls{LED} on the microcontroller every user-specified interval.
+\Cref{lst:intro_blink,fig:intro_blink} shows the code and a screenshot of an interactive \imtask{} application for blinking \pgls{LED} on the microcontroller every user-specified interval.
 \Crefrange{lst:intro:itask_fro}{lst:intro:itask_to} show the \gls{ITASK} part.
 First \pgls{SDS} is defined to communicate the blinking interval, then the \gls{MTASK} is connected using \cleaninline{withDevice}.
 Once connected, the \cleaninline{intBlink} task is sent to the device (\cref{lst:intro_liftmtask}) and, in parallel, an editor is shown that updates the value of the interval \gls{SDS} (\cref{lst:intro_editor}).
-The \cleaninline{intBlink} task (\crefrange{lst:intro:mtask_fro}{lst:intro:mtask_to}) is the \gls{MTASK} part of the application.
-It has its own tasks, \glspl{SDS}, and \gls{UOD}.
-This task first defines \gls{GPIO} pin 13 to be of the output type (\cref{lst:intro:declarePin}), followed by lifting the \gls{ITASK} \gls{SDS} to an \gls{MTASK} \gls{SDS} (\cref{lst:intro:liftsds}).
-The main expression of the program calls the \cleaninline{blink} function with an initial state.
-This function on \crefrange{lst:intro:blink_fro}{lst:intro:blink_to} first reads the interval \gls{SDS}, waits the specified delay, writes the state to the \gls{GPIO} pin and calls itself recursively using the inverse of the state.
-
-\begin{figure}
-       \centering
-       \includegraphics[width=.3\textwidth]{blink}
-       \caption{Screenshot for the interactive blink application.}%
-       \label{fig:intro_blink}
-\end{figure}
 
-\begin{lstClean}[numbers=left,caption={\Gls{MTASK}\slash{}\gls{ITASK} interactive blinking.},label={lst:intro_blink}]
+\begin{minipage}{.5\textwidth}
+\begin{lstClean}[numbers=left,caption={\Imtask{} interactive blinking.},label={lst:intro_blink}]
 interactiveBlink :: Task Int[+\label{lst:intro:itask_fro}+]
 interactiveBlink =
        withShared 500 \iInterval->[+\label{lst:intro_withshared}+]
        withDevice {TCPSettings | host = ..., port = ...} \dev->
                    liftmTask (intBlink iInterval) dev[+\label{lst:intro_liftmtask}+]
                -|| Hint "Interval (ms)" @>> updateSharedInformation [] iInterval[+\label{lst:intro_editor}+][+\label{lst:intro:itask_to}+]
+\end{lstClean}
+\end{minipage}%
+\begin{minipage}{.5\textwidth}
+       \centering
+       \includegraphics[width=.3\textwidth]{blink}
+       \captionof{figure}{Screenshot for the interactive blink application.}%
+       \label{fig:intro_blink}
+\end{minipage}
 
+The \cleaninline{intBlink} task (\cref{lst:intro_blink_mtask}) is the \gls{MTASK} part of the application.
+It has its own tasks, \glspl{SDS}, and \gls{UOD}.
+This task first defines \gls{GPIO} pin 13 to be of the output type (\cref{lst:intro:declarePin}), followed by lifting the \gls{ITASK} \gls{SDS} to an \gls{MTASK} \gls{SDS} (\cref{lst:intro:liftsds}).
+The main expression of the program calls the \cleaninline{blink} function with an initial state.
+This function on \crefrange{lst:intro:blink_fro}{lst:intro:blink_to} first reads the interval \gls{SDS}, waits the specified delay, writes the state to the \gls{GPIO} pin and calls itself recursively using the inverse of the state.
+
+\begin{lstClean}[numbers=left,caption={\Gls{MTASK} part of the interactive blinking application.},label={lst:intro_blink_mtask}]
 intBlink :: Shared sds Int -> MTask v Int | mtask, liftsds v & RWShared sds[+\label{lst:intro:mtask_fro}+]
 intBlink iInterval =
           declarePin D13 PMOutput \d13->[+\label{lst:intro:declarePin}+]
@@ -341,6 +346,15 @@ This episode is paper based and contains the following papers:
                Besides showing the result, the paper also serves as a gentle introduction to, and contains a thorough literature study on \glsxtrlong{TH}.
 \end{enumerate}
 
+\paragraph{Other publications on \texorpdfstring{\glspl{EDSL}}{eDSLs}:}
+Furthermore, I co-authored another paper that is worth mentioning but did not really fit in this dissertation.
+
+\begin{enumerate}[resume]
+       \item \emph{Strongly-Typed Multi-View Stack-Based Computations} \citep{koopman_strongly-typed_2022} shows how to create type-safe \glspl{EDSL} representing stack-based computations.
+               Instead of encoding the arguments to a function as arguments in the host language, stack-based approaches use a run time stack that contains the arguments.
+               By encoding the required contents of the stack in the types, such systems can be made type safe.
+\end{enumerate}
+
 \paragraph{Contribution:}
 The research in these papers and writing the paper was performed by me, though there were weekly meetings with Pieter Koopman and Rinus Plasmeijer in which we discussed and refined the ideas for paper~\ref{enum:first-class}.
 
@@ -398,13 +412,13 @@ This chapter is based on the conference paper and a journal paper extending it:
 \begin{enumerate}[resume]
        \item \emph{Tiered versus Tierless IoT Stacks: Comparing Smart Campus Software Architectures} \citep{lubbers_tiered_2020}\footnote{This work was partly funded by the 2019 Radboud-Glasgow Collaboration Fund.}\label{enum:iot20} compares traditional tiered programming to tierless architectures by comparing two implementations of a smart-campus application.
        \item \emph{Could Tierless Programming Reduce IoT Development Grief?} \citep{lubbers_could_2022}
-               is an extended version of the paper~\ref{enum:iot20}.
+               is an extended version of paper~\ref{enum:iot20}.
                It compares programming traditional tiered architectures to tierless architectures by illustrating a qualitative and a quantitative four-way comparison of a smart-campus application.
 \end{enumerate}
 
 \paragraph{Contribution:}
 Writing the paper was performed by all authors.
-I created the server application, the \gls{CLEAN}\slash{}\gls{ITASK}\slash{}\gls{MTASK} implementation (\glsxtrshort{CWS}), and the \gls{CLEAN}\slash{}\gls{ITASK} implementation (\glsxtrshort{CRS});
+I created the server application, the \cimtask{} implementation (\glsxtrshort{CWS}), and the \citask{} implementation (\glsxtrshort{CRS});
 Adrian Ramsingh created the \gls{MICROPYTHON} implementation (\glsxtrshort{PWS}); the original \gls{PYTHON} implementation (\glsxtrshort{PRS}), and the server application were created by \citet{hentschel_supersensors:_2016}.
 
 \input{subfilepostamble}