\documentclass[../thesis.tex]{subfiles}

\input{subfilepreamble}

\begin{document}
\input{subfileprefixsmall}
\ifSubfilesClassLoaded{\chapter*{Summary}}{\chapter{Summary}}%
\label{chp:summary}%
\glsresetall%
The development of reliable software for the \gls{IOT} is difficult because \gls{IOT} systems are dynamic, interactive, distributed, collaborative, multi-tiered, and multitasking in nature.
The complexity is increased further by semantic friction that arises through different hardware and software characteristics between tiers.
Many computers that operate in \gls{IOT} systems are \emph{edge devices} that interact with the environment using sensors and actuators.
Edge devices are often powered by low-cost microcontrollers designed for embedded applications.
They have little memory, unhurried processors, and are slow in communication but are also small and energy efficient.

\Gls{TOP} can cope with the challenges of \gls{IOT} programming.
In \gls{TOP}, the main building blocks are tasks, an abstract representation of work.
During execution, the current value of the task is observable, and other tasks can act upon it.
Collaboration patterns can be modelled by combining and transforming tasks into compound tasks.
Programming edge devices benefits from \gls{TOP} as well, but running such a system within the limitations of resource-constrained microcontrollers is not straightforward.

This dissertation demonstrates how to include edge devices in \gls{TOP} systems using \glspl{DSL}.
With these techniques, all tiers and their interoperation of an \gls{IOT} system are specified in a single high-level source, language, paradigm, high abstraction level, and type system.
First, I present advanced \gls{DSL} embedding techniques.
Then \gls{MTASK} is shown, a \gls{TOP} \gls{DSL} for \gls{IOT} edge devices, embedded in \gls{ITASK}.
Tasks are constructed and compiled at run time in order to allow tasks to be tailored to the current work requirements.
The task is then sent to the device for interpretation.
A device is programmed once with a lightweight domain-specific \gls{OS} to be used in an \gls{MTASK} system.
This \gls{OS} executes tasks in an energy-efficient way and automates all communications and data sharing.
All aspects of the \gls{MTASK} system are shown: example applications, language design, implementation details, integration with \gls{ITASK}, and green computing facilities such as automatic sleeping.

Finally, tierless \gls{IOT} programming is compared to traditional tiered programming.
In tierless programming frameworks, the size of the code and the number of required programming languages is reduced significantly.
By using a single paradigm and a system-wide type system, tierless programming reduces problems such as semantic friction; maintainability and robustness issues; and interoperation safety.
%This is a summary of 350--400 words.
\end{document}
