add a bit about combinators
[msc-thesis1617.git] / methods.tex
index a4c9138..e25809c 100644 (file)
@@ -1,21 +1,73 @@
-\section{\acrlong{TOP}}
-\gls{TOP} is a recent new programming paradigm implemented as
-\gls{iTasks}~\cite{achten_introduction_2015} in
-the pure lazy functional language \gls{Clean}
+\input{methods.top.tex}
 
-\todo{Main terms}
-The lazy functional programming language based on graph rewriting
-\gls{Clean}~\cite{brus_cleanlanguage_1987}
+\input{methods.dsl.tex}
 
-\section{\acrlong{DSL}s}
+\input{methods.arch.tex}
 
-\section{Devices}
+\section{mTasks}
+\subsection{\gls{EDSL}}
+The \gls{mTask}-\gls{EDSL} contains several classes that need to be implemented
+by a type for it to be an \gls{mTask}. For numeric and boolean arithmetic the
+classes \texttt{arith} and \texttt{boolExpr} are available and listed in a
+shortened version in Listing~\ref{lst:arithbool}. All classes are to be
+implemented by types of kind \texttt{*->*->*} a type \texttt{v t p},
+respectively a view with a type and the role.
+
+\texttt{lit} lifts a constant to the \gls{mTask} domain. For a type to be a
+valid \gls{mTask} type it needs to implement the \texttt{mTaskType} class. The
+binary operators work as expected.
+
+\begin{lstlisting}[language=Clean,label={lst:arithbool},
+       caption={Basic classes for expressions}]
+class mTaskType a | toByteCode, fromByteCode, iTask, TC a
 
-\subsection{Specification}
+class arith v where
+  lit :: t -> v t Expr | mTaskType t
+  (+.) infixl 6 :: (v t p) (v t q) -> v t Expr | type, +, zero t & isExpr p & isExpr q
+  ...
+class boolExpr v where
+  (&.) infixr 3 :: (v Bool p) (v Bool q) -> v Bool Expr | isExpr p & isExpr q
+  Not           :: (v Bool p) -> v Bool Expr | isExpr p
+  ...
+  (==.) infix 4 :: (v a p) (v a q) -> v Bool Expr | ==, toCode a & isExpr p & isExpr q
+\end{lstlisting}
+
+
+\subsection{Tasks}
+
+\subsection{Shares}
+Shares can live on multiple clients at the same time. For every share created
+for an \gls{mTask} a real \gls{SDS} is created that mirrors the value on the
+client. All shares currently in use are stored in a system-wide \gls{SDS} in
+such a way that the actual share can be retrieved at any moment. All shares
+have a unique numeric identifier and an initial value.
+
+\begin{lstlisting}[language=Clean,label={lst:sharespec}, caption={\acrlong{SDS}}]
+:: BCValue = E.e: BCValue e & mTaskType e
+:: MTaskShareType = MTaskWithShare String | MTaskLens String
+:: MTaskShare =
+       {withTask :: [String]
+       ,withDevice :: [String]
+       ,identifier :: Int
+       ,realShare :: MTaskShareType
+       ,value :: BCValue
+       }
+
+sdsStore :: Shared [MTaskShare]
+\end{lstlisting}
+\todo{Do something with the sharetype}
 
 \subsection{Communication}
+%\todo{Handshake, device specification sending, spec.c}
+%\todo{mTaskDevice class interface}
 
 \section{mTasks}
-\subsection{\gls{DSL}}
+\subsection{\gls{EDSL}}
+\todo{Show the classes}
 
 \subsection{Shares}
+\todo{Show the types and why}
+
+Shares are used to store the values 
+
+Shares all have