\newglossaryentry{Haskell}{name={\emph{Haskell}},
description={is a staticly typed pure lazy functional programming language}}
\newglossaryentry{iTasks}{name=\emph{iTasks},
- description={is a \acrshort{TOP} implementation written as an
- \acrshort{EDSL} in the \gls{Clean} programming language}}
+ description={is a \gls{TOP} implementation written as an
+ \gls{EDSL} in the \gls{Clean} programming language}}
\newglossaryentry{Ivory}{name={\emph{Ivory}},
description={is a type-safe \gls{EDSL} designed to generate \gls{C}-code
for high-assurance low-level systems}}
\newglossaryentry{Task}{name=\emph{Task},
- description={is the basic building block of a \acrshort{TOP} system}}
+ description={is the basic building block of a \gls{TOP} system}}
\newglossaryentry{mTask}{name=\emph{mTask},
- description={is an abstraction for \glspl{Task} living on \acrshort{IoT}
+ description={is an abstraction for \glspl{Task} living on \gls{IoT}
devices. Moreover, it is the name of an \gls{EDSL}}}
\newglossaryentry{C}{name=\textsc{C},
description={is low-level imperative programming language suitable for
\section{Introduction}
-\Gls{IoT} technology is emerging very quickly. It offers myriads of solutions
+\Gls{IoT} technology is emerging rapidly. It offers myriads of solutions
and transforms the way we interact with technology.
Initially the term was coined to describe \gls{RFID} devices and the
are often equipped with sensors, \gls{GNSS}\footnote{e.g.\ the American
\gls{GPS} or the Russian \gls{GLONASS}} and actuators%
~\cite{da_xu_internet_2014}. With these new technologies information
-can be tracked very accurately using very little power and bandwidth. Moreover,
-\gls{IoT} technology is coming into people's homes, clothes and
+can be tracked accurately using little power and bandwidth. Moreover, \gls{IoT}
+technology is coming into people's homes, clothes and
healthcare~\cite{riazul_islam_internet_2015}. For example, for a few euros a
consumer ready fitness tracker watch can be bought that tracks heartbeat and
respiration levels.
incident management~\cite{lijnse_top_2013}. Interfaces are automatically
generated for the types of data which makes rapid development possible.
\Glspl{Task} in the \gls{iTasks} system are modelled after real life workflow
-tasks but the modelling is applied on a very high level. Therefore it is
+tasks but the modelling is applied on a high level. Therefore it is
difficult to connect \gls{iTasks}-\glspl{Task} to real world \glspl{Task} and
allow them to interact. A lot of the actual tasks could be performed by small
\gls{IoT} devices. Nevertheless, adding such devices to the current system is
small \gls{IoT} devices have limited processing power but can still contain
decision making. Oortgiese et al.\ lifted \gls{iTasks} from a single server
model to a distributed server architecture that is also runnable on small
-devices such as those powered by \acrshort{ARM}~\cite{%
+devices such as those powered by \gls{ARM}~\cite{%
oortgiese_distributed_2017}. However, this is limited to fairly high
performance devices that are equipped with high speed communication channels.
Devices in \gls{IoT} often have only \gls{LTN} communication with low bandwidth
\section{Problem statement}
The updates to the \gls{mTask}-system~\cite{koopman_type-safe_nodate} will
bridge this gap by introducing a new communication protocol, device application
-and \glspl{Task} synchronizing the formers. The system can run on devices as
+and \glspl{Task} synchronizing the two. The system can run on devices as
small as \gls{Arduino} microcontrollers~\cite{noauthor_arduino_nodate} and
operates via the same paradigms and patterns as regular \glspl{Task} in the
\gls{TOP} paradigm. Devices in the \gls{mTask}-system can run small imperative
\Gls{Clean} has a history of interpretation and there is a lot of research
happening on the intermediate language \gls{SAPL}. \Gls{SAPL} is a purely
functional intermediate language that has interpreters written in
-\gls{C++}~\cite{jansen_efficient_2007} and \gls{Javascript}%
+\gls{C++}~\cite{jansen_efficient_2007}, \gls{Javascript}%
~\cite{domoszlai_implementing_2011} and \gls{Clean} and \gls{Haskell} compiler
backends~\cite{domoszlai_compiling_2012}. However, interpreting the resulting
code is still heap-heavy and therefore not directly suitable for devices with
is sent to the device.
\Glspl{EDSL} have often been used to generate \gls{C} code for microcontroller
-environments. For starters, this work is built upon the \gls{mTask}-\gls{EDSL}
-that generates \gls{C} code to run a \gls{TOP}-like system on microcontrollers%
-~\cite{plasmeijer_shallow_2016}~\cite{koopman_type-safe_nodate}.
-Again, this requires a reprogramming cycle every time the
-\gls{Task}-specification is changed.
+environments. This work uses parts of the existing \gls{mTask}-\gls{EDSL} which
+generates \gls{C} code to run a \gls{TOP}-like system on microcontrollers%
+~\cite{plasmeijer_shallow_2016}~\cite{koopman_type-safe_nodate}. Again, this
+requires a reprogramming cycle every time the \gls{Task}-specification is
+changed.
Another \gls{EDSL} designed to generate low-level high-assurance programs is
called \gls{Ivory} and uses \gls{Haskell} as a host language%