% vim: spelllang=nl:
\documentclass[a4paper]{article}

\usepackage[dutch]{babel}
\usepackage[top=3cm]{geometry}

\usepackage{latexgit}
\usepackage[hidelinks]{hyperref}
\usepackage{enumitem}

\title{Codegeneratie voor Thumb-2 processoren\\\large{Onderzoeksplan bachelorscriptie}}
\author{
	Camil Staps\\[.4em]
	Begeleiders: prof.dr.dr.h.c.ir. M.J. Plasmeijer en drs. J.H.G. van Groningen
}
\date{\gitcommitdate[formatDate]}

\begin{document}

\maketitle
\thispagestyle{empty}

\subsection*{Onderzoeksvraag}
Welke verschillen bestaan er tussen de ARM en Thumb-2
architecturen\footnote{ARM Limited. \emph{ARMv7-M Architecture Reference
Manual.} (2006--2010)} en wat voor invloed hebben deze verschillen op code
generators?

\subsection*{Relevantie}
Codegeneratie voor simpele architecturen is interessant, om op een hoog
abstractieniveau kleine, relatief goedkope systemen te kunnen programmeren. In
het bijzonder wil ik kijken naar vertaling van ABC-\footnote{Pieter Koopman.
\emph{Functional Programs as Executable Specifications}. (Meppel: Krips Repro,
1990)} naar Thumb-2 machinecode, met als doel steeds simpelere systemen met een
functionele taal te kunnen programmeren.

De Cortex-M3 processor die in bijvoorbeeld de Arduino
Due\footnote{\url{https://www.arduino.cc/en/Main/ArduinoBoardDue}} zit gebruikt
de Thumb-2 instructieset. Er zijn enkele Haskell-georienteerde projecten voor
Arduino\footnote{\url{https://wiki.haskell.org/Arduino}}, maar die gebruiken
een EDSL die naar C gecompileerd of door C ge\"{\i}nterpreteerd wordt, waardoor
de functionele kracht van Haskell verloren gaat.

\subsection*{Verwachte resultaten}
De verwachting is uiteindelijk een lijst met verschillen tussen ARM en Thumb-2
op te kunnen stellen. Per verschil zou aangegeven moeten worden:

\begin{description}
	\item[Impact]
		Wat voor techniek kan \emph{wel} op ARM gebruikt worden, maar niet op
		Thumb-2?

	\item[Oplossing]
		Hoe kan een bestaande ARM code generator aangepast worden om werkende
		Thumb-2 code te genereren, gezien dit verschil? Hierbij zal ik voorbeelden
		uit de Clean code
		generator\footnote{\url{https://svn.cs.ru.nl/repos/clean-code-generator/trunk},
		i.h.b. \texttt{cgarm*}.} gebruiken.

	\item[Vergelijking van complexiteit]
		Wat is ongeveer het effect van de aanpassingen op de complexiteit van een
		Clean-programma? Het gaat hier in eerste instantie niet om een volledige
		berekening of compleet bewijs, maar een algemeen idee.
\end{description}

\subsection*{Strategie}
Ik zal een \emph{hands-on}-strategie gebruiken: telkens een klein deel van de
huidige Clean code generator voor ARM bekijken, controleren wat niet zal werken
op Thumb-2, en hier een oplossing voor bedenken.

\end{document}
