From: Matthijs Kooijman Date: Sun, 13 Dec 2009 19:42:25 +0000 (+0100) Subject: Fill most of the presentation. X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Ffinal-presentation.git;a=commitdiff_plain;h=b1ccd71006f0663d33710fba96ab9321bf1ab690 Fill most of the presentation. --- diff --git a/figures/archs/Pyth.dia b/figures/archs/Pyth.dia new file mode 100644 index 0000000..251c274 Binary files /dev/null and b/figures/archs/Pyth.dia differ diff --git a/figures/archs/Pyth.pdf b/figures/archs/Pyth.pdf new file mode 100644 index 0000000..7d9e94e Binary files /dev/null and b/figures/archs/Pyth.pdf differ diff --git a/figures/archs/Square.dia b/figures/archs/Square.dia new file mode 100644 index 0000000..dcf77eb Binary files /dev/null and b/figures/archs/Square.dia differ diff --git a/figures/archs/Square.pdf b/figures/archs/Square.pdf new file mode 100644 index 0000000..36ebe54 Binary files /dev/null and b/figures/archs/Square.pdf differ diff --git a/figures/norm/Incorrect.dia b/figures/norm/Incorrect.dia new file mode 100644 index 0000000..9b77e83 Binary files /dev/null and b/figures/norm/Incorrect.dia differ diff --git a/figures/norm/Incorrect.pdf b/figures/norm/Incorrect.pdf new file mode 100644 index 0000000..c54e23c Binary files /dev/null and b/figures/norm/Incorrect.pdf differ diff --git a/figures/norm/Normalizing.dia b/figures/norm/Normalizing.dia new file mode 100644 index 0000000..77e774e Binary files /dev/null and b/figures/norm/Normalizing.dia differ diff --git a/figures/norm/Normalizing.pdf b/figures/norm/Normalizing.pdf new file mode 100644 index 0000000..0fe07e9 Binary files /dev/null and b/figures/norm/Normalizing.pdf differ diff --git a/matthijs/introduction.lhs b/matthijs/introduction.lhs index 22f0f0a..e8b9330 100644 --- a/matthijs/introduction.lhs +++ b/matthijs/introduction.lhs @@ -8,47 +8,37 @@ \frame { - \begin{block}{Applying the $sqrt$ function to 4} + \frametitle{Functions} + + \begin{block}{Applying the $sqrt$ function to 4}<1> $ sqrt(4) = 2$ \end{block} -} - -\note[itemize] -{ - \item Functional language - Math like - \item Central: Functions - \item Outside: - \begin{itemize} - \item Put arguments in (application) - \item get result out - \end{itemize} - \item Inside: - \begin{itemize} - \item \emph{How} does the function work? (definition) - \end{itemize} - - \item Next sheet: sqrt example -} - -\frame -{ - \begin{block}{A mathematical square function} + \begin{block}{A mathematical square function}<2-> $ f(x) = x * x$ \end{block} - \pause - \begin{block}{A square function in Haskell} + \begin{block}{A square function in Haskell}<3-> \texttt{square x = x * x} \end{block} } \note[itemize] { + \item Functionele taal -$>$ Wiskunde-achtig + \item Functies staan centraal + \item Next sheet: sqrt example + \item Van buitenaf: + \begin{itemize} + \item Stop er argumenten in (toepassen) + \item Krijg een resultaat terug + \end{itemize} \item Next sheet: f(x) = x*x example + \item Van binnenaf: + \begin{itemize} + \item \emph{Hoe} werkt de functie (definitie) + \end{itemize} \item Next sheet: square in Haskell - \item No braces - \item Next sheet: pyth in Haskell - \item Functions can be used by other functions + \item Geen haakjes } \frame @@ -67,6 +57,7 @@ \includegraphics[width=3cm]{figures/Pythagoras} \end{column} \end{columns} + \pause % TODO: Alignment is weird due to mixing columns and non-columns \begin{block}{Calculating $c$ in Haskell} @@ -74,4 +65,244 @@ \end{block} } +\note[itemize] +{ + \item Functies kunnen door andere functies gebruikt worden + \item Next sheet: Pyth function + \item Complexere functie + \item Next sheet: Pyth in Haskell +} + +\frame +{ + \begin{block}{} + \texttt{pyth a b = sqrt ((square a) + (square b))} + \end{block} + + \begin{figure} + \includegraphics[width=9.5cm]{figures/archs/Pyth} + \end{figure} +} + +\note[itemize] +{ + \item Next sheet: Pyth hardware + \item Argumenten -$>$ input poorten + \item Toepassing -$>$ component + \item Resultaat -$>$ output poort + \item (Combinatorische) hardware is continu +} + +\frame +{ + \frametitle{Purity} + + \begin{block}{Pure functions} + sqrt, pyth + \end{block} + \begin{block}{Impure functions} + random, delete\_file + \end{block} +} + +\note[itemize] +{ + \item Next sheet: Purity + \item Wiskundige en functionele functies zijn (meestal) puur. + \item Zelfde argumenten -$>$ zelfde resultaten + \item Geen bijwerkingen. +} + +\frame +{ + TODO: Impure (stateful) example. +} + +\note[itemize] +{ + \item TODO +} + +\frame{ + \begin{center} + {\Huge \clash} + + \bigskip + CAES language for hardware descriptions + \end{center} +} + +\note[itemize] +{ + \item Next sheet: \clash + \item Hardware beschrijven in Haskell: \clash + \item Nog niet gezien: keuzes, pattern matching, polymorfisme, hogere orde + functies.... + \item Dit was de taal -$>$ compiler nodig +} + +\frame +{ + \begin{block}{Compiler pipeline} + $\xrightarrow{Haskell}{GHC frontend} + \xrightarrow{Core}{Normalization} + \xrightarrow{Core}{Backend} + \xrightarrow{VHDL}$ + \end{block} +} + +\note[itemize] +{ + \item Next sheet: \clash\ pipeline + \item GHC: bestaande compiler + \item Core: simpele functionale taal, niet minder expressief (vergelijk: + taal zonder synoniemen) + \item VHDL: Complexe HDL, gebruiken alleen netlist onderdelen. + \item Normalisatie: Nog simpeler maken. +} + +\frame +{ + \frametitle{Netlists} + + \bigskip + \bigskip + \begin{figure} + \includegraphics[width=9.5cm]{figures/archs/Square} + \end{figure} + + \begin{block}{Remember \texttt{square}} + square x = x * x + \end{block} + +} + +\note[itemize] +{ + \item Next sheet: Square netlist + \item Core hetzelfde als Haskell -$>$ gebruik Haskell syntax voor Core + \item Netlist is componenten (vierkantjes) en verbindingen (lijntjes) + \item Component heeft poorten, poorten moeten een naam hebben + \item Resultaat van square heeft geen naam -$>$ geen normaalvorm +} + +\frame +{ + \frametitle{Transformation} + \begin{columns} + \begin{column}{5cm} + func = E + + \smallskip + \hrule + + \smallskip + func = let res = E in res + \end{column} + \begin{column}{5cm} + E has no name + \end{column} + \end{columns} + + \pause + \bigskip + \begin{block}{Apply to square} + square x = x * x + + \smallskip + \hrule + + \smallskip + square x = let res = x * x in res + \end{block} +} + +\note[itemize] +{ + \item Next sheet: transformation example + \item Transformatie nodig om output poort een naam te geven + \item Next sheet: Apply to square + \item Toepassen op square, res heeft nu een naam. +} + +\frame +{ + \frametitle{Normalization system} + + \begin{figure} + \includegraphics[width=9.5cm]{figures/norm/Normalizing} + \end{figure} +} + +\note[itemize] +{ + \item Systeem van transformaties + \item Volgorde ongedefinieerd: Doe maar wat, tot het net meer kan. + \item Next sheet: Graafnotatie + \item Lijnen zijn transformaties + \item Keuzes (meerdere uitgaande lijnen) + \item Alles komt onderin uit +} + +\frame +{ + \frametitle{Normalization system} + + \begin{figure} + \includegraphics[width=8cm]{figures/norm/Incorrect} + \end{figure} +} + +\note[itemize] +{ + \item Meerdere normaalvormen + \item Cykel + \item Systeem werkt nu \emph{meestal} + \item verbeteringen en bewijzen nodig +} + +\frame +{ + \frametitle{Normalization system} + + \begin{itemize} + \item Easy to work with + \item Allows analysis + \item Still complex + \end{itemize} +} + +\note[itemize] +{ + \item Goede scheiding + \item Makkelijk implementeren + \item Wiskundige beschrijving -$>$ bewijzen + \item Huidige systeem is nog incompleet + \item De goede weg +} + +\frame +{ + \frametitle{But now?} + \begin{itemize} + \item \clash\ has a solid base + \item Lots of work left + \item Needs testing! + \end{itemize} +} + +\note[itemize] +{ + \item \clash\ is helemaal nieuw werk + \item Tekortkomingen: Haskell is niet ideaal, state beschrijvingen zijn + niet compact, transformaties zijn nog niet (bewezen compleet). + \item Meer testen nodig, +} + +\frame +{ + {\Huge Thanks!} + +} + % vim: set filetype=tex sw=2 sts=2 expandtab: