mangle titlepage
[msc-thesis1617.git] / methods.mtask.tex
index df05035..72e66d1 100644 (file)
@@ -1,27 +1,27 @@
-The \gls{mTask}-\gls{EDSL} is the basis on which the system is built. The
-\gls{mTask}-\gls{EDSL} was created by Koopman et al.\ to support several views
-such as an \gls{iTasks} simulation and a \gls{C}-code generator. The \gls{EDSL}
-was designed to generate a ready to compile \gls{TOP}-like system for
-microcontrollers such as the \gls{Arduino}\cite{koopman_type-safe_nodate}%
+The \gls{mTask}-\gls{EDSL} is the language used in the system. The
+\gls{mTask}-\gls{EDSL} was created by Koopman et al.\ and supported several
+views such as an \gls{iTasks} simulation and a \gls{C}-code generator. The
+\gls{EDSL} was designed to generate a ready-to-compile \gls{TOP}-like program
+for microcontrollers such as the \gls{Arduino}~\cite{koopman_type-safe_nodate}%
 \cite{plasmeijer_shallow_2016}.
 
 The \gls{mTask}-\gls{EDSL} is a shallowly embedded class based \gls{EDSL} and
 therefore it is very suitable to have a new backend that partly implements the
-given classes. The following sections show the details of the \gls{EDSL}
-that are used in this extension. The parts of the \gls{EDSL} that are not used
-will not be discussed and the details of those parts can be found in the cited
+classes given. The following sections show the details of the \gls{EDSL} that
+are used in this extension. The parts of the \gls{EDSL} that are not used will
+not be discussed and the details of those parts can be found in the cited
 literature.
 
 A view for the \gls{mTask}-\gls{EDSL} is a type with kind \CI{*->*->*}%
 \footnote{A type with two free type variables.} that implements some of the
 classes given. The types do not have to be present as fields in the higher
-kinded view and can, and will most often, solely be phantom types. A view is of
-the form \CI{v t r}. The first type variable will be the type of the view, the
-second type variable will be the type of the \gls{EDSL}-expression and the
-third type variable represents the role of the expression. Currently the role
-of the expressions form a hierarchy. The three roles and their hierarchy are
-shown in Listing~\ref{lst:exprhier}. This implies that everything is a
-statement, only a \CI{Upd} and a \CI{Expr} are expressions. The \CI{Upd}
+kinded view and can, and will most often, be exclusively phantom types. A view
+is of the form \CI{v t r}. The first type variable will be the type of the
+view. The second type variable will be the type of the \gls{EDSL}-expression
+and the third type variable represents the role of the expression. Currently
+the role of the expressions form a hierarchy. The three roles and their
+hierarchy are shown in Listing~\ref{lst:exprhier}. This implies that everything
+is a statement, only a \CI{Upd} and a \CI{Expr} are expressions. The \CI{Upd}
 restriction describes updatable expressions such as \gls{GPIO} pins and
 \glspl{SDS}.
 
@@ -40,10 +40,10 @@ instance isExpr Expr
 Expressions in the \gls{mTask}-\gls{EDSL} are divided into two types, namely
 boolean expressions and arithmetic expressions. The class of arithmetic
 language constructs also contains the function \CI{lit} that lifts a
-host-language value in to the \gls{EDSL} domain. All standard arithmetic
+host-language value into the \gls{EDSL} domain. All standard arithmetic
 functions are included in the \gls{EDSL} but are omitted in the example for
 brevity. Moreover, the class restrictions are only shown in the first functions
-and omitted in subsequent funcitons. Both the boolean expression and arithmetic
+and omitted in subsequent functions. Both the boolean expression and arithmetic
 expression classes are shown in Listing~\ref{lst:arithbool}.
 
 \begin{lstlisting}[label={lst:arithbool},
@@ -62,18 +62,18 @@ class boolExpr v where
 
 \section{Control flow}
 Looping of \glspl{Task} happens because \glspl{Task} are executed after waiting
-a specified amount of time or when they are launched by another task or even
-themselves. Therefore there is no need for loop control flow functionality such
-as \emph{while} or \emph{for} constructions. The main control flow operators
-are the sequence operator and the \emph{if} statement. Both are shown in
-Listing~\ref{lst:control}. The first class of \emph{If} statements describes
+a specified amount of time or when they are launched by another \gls{Task} or
+even themselves. Therefore there is no need for loop control flow functionality
+such as \emph{while} or \emph{for} constructions. The main control flow
+operators are the sequence operator and the \emph{if} statement. Both are shown
+in Listing~\ref{lst:control}. The first class of \emph{If} statements describes
 the regular \emph{if} statement. The expressions given can have any role. The
-functional dependency on \CI{s} determines the return type of the
-statement. The listing includes examples of implementations that illustrate
-this dependency.
+functional dependency on \CI{s} determines the return type of the statement.
+The listing includes examples of implementations that illustrate this
+dependency.
 
-The sequence operator is very straightforward and just ties
-the two expressions together in sequence.
+The sequence operator is very straightforward and its only function is to tie
+the together in sequence.
 
 \begin{lstlisting}[%
        label={lst:control},caption={Control flow operators}]
@@ -92,9 +92,10 @@ class seq v where
 \section{Input/Output and class extensions}
 Values can be assigned to all expressions that have an \CI{Upd} role. Examples
 of such expressions are \glspl{SDS} and \gls{GPIO} pins. Moreover, class
-extensions can be created for specific peripherals such as builtin \glspl{LED}.
-The classes facilitating this are shown in Listing~\ref{lst:sdsio}. In this way
-the assignment is the same for every assignable entity.
+extensions can be created for specific peripherals such as built-in
+\glspl{LED}. The classes facilitating this are shown in
+Listing~\ref{lst:sdsio}. In this way the assignment is the same for every
+assignable entity.
 
 \begin{lstlisting}[%
        label={lst:sdsio},caption={Input/Output classes}]
@@ -121,10 +122,12 @@ class assign v where
 \end{lstlisting}
 
 A way of storing data in \glspl{mTask} is using \glspl{SDS}. \glspl{SDS} serve
-as variables in the \gls{mTask} and maintain their value across executions.
+as variables in \gls{mTask} and maintain their value across executions.
+\glspl{SDS} can be used by multiple \glspl{Task} and can be used to share data.
 The classes associated with \glspl{SDS} are listed in
 Listing~\ref{lst:sdsclass}. The \CI{Main} type is introduced to box an
-\gls{mTask} and make it recognizable by the type system.
+\gls{mTask} and make it recognizable by the type system by separating programs
+and decorations such as \glspl{SDS}.
 
 \begin{lstlisting}[%
        label={lst:sdsclass},caption={\glspl{SDS} in \gls{mTask}}]
@@ -140,18 +143,18 @@ The \gls{C}-backend of the \gls{mTask}-system has an engine that is generated
 alongside the code for the \glspl{Task}. This engine will execute the
 \glspl{mTask} according to certain rules and semantics.
 \glspl{mTask} do not behave like functions but more like
-\gls{iTasks}-\glspl{Task}. An \gls{mTask} is queued when either his timer runs
-out or when it is started by another \gls{mTask}. When an \gls{mTask} is
-queued it does not block the execution but it will return immediately while
-the actual \gls{Task} will be executed some time in the future.
+\gls{iTasks}-\glspl{Task}. An \gls{mTask} is queued when either its timer runs
+out or when it is launched by another \gls{mTask}. When an \gls{mTask} is
+queued it does not block the execution and it will return immediately while
+the actual \gls{Task} will be executed anytime in the future.
 
 The \gls{iTasks}-backend simulates the \gls{C}-backend and thus uses the same
 semantics. This engine expressed in pseudocode is listed as
 Algorithm~\ref{lst:engine}. All the \glspl{Task} are inspected on their waiting
 time. When the waiting time has not passed; the delta is subtracted and the
-task gets pushed to the end of the queue. When the waiting has surpassed they are
-executed. When an \gls{mTask} wants to queue another \gls{mTask} it can just
-append it to the queue.
+\gls{Task} gets pushed to the end of the queue. When the waiting has surpassed
+they are executed. When an \gls{mTask} wants to queue another \gls{mTask} it
+can just append it to the queue.
 
 \begin{algorithm}[H]
        \KwData{\textbf{queue} queue, \textbf{time} $t, t_p$}
@@ -176,16 +179,16 @@ append it to the queue.
                \gls{iTasks}-backend}\label{lst:engine}
 \end{algorithm}
 
-To achieve this in the \gls{EDSL} a \gls{Task} clas are added that work in a
+To achieve this in the \gls{EDSL} a \gls{Task} class is added that work in a
 similar fashion as the \texttt{sds} class. This class is listed in
 Listing~\ref{lst:taskclass}. \glspl{Task} can have an argument and always have
 to specify a delay or waiting time. The type signature of the \CI{mtask} is
 complex and therefore an example is given. The aforementioned Listing
-shows a simple specification containing one task that increments a value
+shows a simple specification containing one \gls{Task} that increments a value
 indefinitely every one seconds.
 
 \begin{lstlisting}[label={lst:taskclass},%
-       caption={The classes for defining tasks}]
+       caption={The classes for defining \glspl{Task}}]
 class mtask v a where
   task :: (((v delay r) a->v MTask Expr)->In (a->v u p) (Main (v t q))) -> Main (v t q) | ...
 
@@ -193,14 +196,17 @@ count = task \count = (\n.count (lit 1000) (n +. One)) In {main = count (lit 100
 \end{lstlisting}
 
 \section{Example mTask}
-Some example \glspl{mTask} using almost all of the functionality are shown in
+Some example \glspl{mTask} using almost all of their functionality are shown in
 Listing~\ref{lst:exmtask}. The \glspl{mTask} shown in the example do not belong
 to a particular view and therefore are of the type \CI{View t r}. The
 \CI{blink} \gls{mTask} show the classic \gls{Arduino} \emph{Hello World!}
 application that blinks a certain \gls{LED} every second. The \CI{thermostat}
 expression will enable a digital pin powering a cooling fan when the analog pin
 representing a temperature sensor is too high. \CI{thermostat`} shows the same
-expression but now using the assignment style \gls{GPIO} technique.
+expression but now using the assignment style \gls{GPIO} technique. The
+\CI{thermostat} example also show that it is not necessary to run everything as
+a \CI{task}. The main program code can also just consist of the contents of the
+root \CI{main} itself.
 
 \begin{lstlisting}[%
        label={lst:exmtask},caption={Some example \glspl{mTask}}]