From eaf0f3d92ed9fb94e1128ce587b9da3efaef12d0 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Tue, 14 Apr 2015 01:15:54 +0200 Subject: [PATCH] Initial commit --- VL1.tex | 138 +++++++++++++++++++++++++++++++++++++++++++ function-machine.png | Bin 0 -> 31200 bytes 2 files changed, 138 insertions(+) create mode 100644 VL1.tex create mode 100644 function-machine.png diff --git a/VL1.tex b/VL1.tex new file mode 100644 index 0000000..a4b86b7 --- /dev/null +++ b/VL1.tex @@ -0,0 +1,138 @@ +\documentclass[10pt,a5paper,mathserif,serif,usenames,dvipsnames]{beamer} + +% packages +\usepackage{xcolor} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb} +\usepackage{graphicx} +\usepackage{listings} + +% package configuration +\DeclareGraphicsExtensions{.pdf,.png,.jpg} + +% title page information +\author{Julian Ospald} +\institute{FH Bielefeld} +\title{Haskell: introduction} + +% color definition +\definecolor{solarized}{HTML}{002B36} + +\begin{document} + +% page 0 +\frame{\titlepage} + +% page 1 +\begin{frame} +\frametitle{Why haskell?} +A Haskeller might claim: haskell... +\begin{itemize} +\item eliminates certain classes of bugs +\item makes it easy to reason about code +\item decreases the bus-factor +\item makes it possible to apply huge changes to large programs without worrying about the implicit state machine +\item makes it easier to program complex problems +\item allows for clean APIs, even without any OOP +\item a haskell program of 10K LOC isn't that much different to maintain as a 100K LOC +\end{itemize} +\vspace{\baselineskip} +We'll have to see if this holds true. +\end{frame} + +% page 1 +\begin{frame}[fragile] +\frametitle{Why haskell? (ctn.)} +From C++ std: +\lstset{ + language=C++, + backgroundcolor=\color{White}, + frame=single, + keepspaces=true +} +\begin{lstlisting} +void pop(); +\end{lstlisting} +\lstset{ + language=C, +} +From the C FLINT library: +\begin{lstlisting} +void fmpz_mod_poly_add( + fmpz_mod_poly_t res, + const fmpz_mod_poly_t poly1, + const fmpz_mod_poly_t poly2); +\end{lstlisting} +\vspace{\baselineskip} +Regular C functions in real-world (omitting examples on purpose): +\begin{itemize} +\item 100+ LOC +\item at least 7 ifs, 4 whiles, 12 variables, 1 goto +\item access both static and global variables +\item indenting level of 5 or more +\item a lot of memory management and custom-made error handling +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Why haskell? (ctn.)} +You need to change only one single line in such a C function. You have to know: +\begin{itemize} +\item does the order of function calls matter? +\item how does the change effect the memory management? Do we have memory leaks? Do we access invalid memory? +\item does it change the state of static or global variables? +\item does it implicitly change the state of out-parameters? +\item if it changes any of those states, is the function still correct? +\item does the program flow break? Do we have unreachable codepaths now? +\item did you just nuke a small former Soviet state? +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Why haskell? (ctn.)} +But java helps! Does it? +Sort of, because: +\begin{itemize} +\item it improves APIs compared to C, since you can hide information in the state of an object (but... it's hidden now) +\item it has a garbage collector, so you don't need to worry too much about memory... unless it doesn't work OOTB anymore +\end{itemize} +Unfortunately, we: +\begin{itemize} +\item now got even more states to keep track of (intellectual complexity?) +\item have clouded the program flow... it's now about object-interaction with their implicit states +\item still have \textbf{side effects} everywhere: one object changes the state of another and vice versa, may arbitrarily write to the hard drive, do kernel calls or launch a missle +\end{itemize} +Some parts of the implicit state machine have been made explicit by modelling classes, but it's still there and we have to deal with it, because we are modelling everything around states. Wouldn't it be nice if we could just forget about the global state machine? Maybe there is even a way to remove side effects and have more "predictability"? We are lucky. There is. It's called \textbf{Haskell}. +\end{frame} + +% page 2 +\begin{frame} +\frametitle{What is haskell?} +Haskell is a \textbf{functional}, \textbf{pure}, \textbf{lazy} and \textbf{statically typed} high-level programming language. +\end{frame} + +% page3 +\begin{frame} +\frametitle{What does \textbf{functional} mean?} +Think of haskell functions as regular \emph{mathematical} functions. +\vspace{\baselineskip} +\includegraphics*[scale=0.4]{function-machine.png} +\begin{itemize} +\item does this function write to the hard drive? +\item does the output depend on anything else except the input (e.g. time, environment, ...)? +\end{itemize} +\end{frame} + +% page4 +\begin{frame} +\frametitle{What does \textbf{functional} mean? (ctn.)} +\begin{itemize} +\item \emph{first-class} citizens: functions are values +\item a haskell program is what happens when \emph{expressions are evaluated} +\end{itemize} +\end{frame} + + +\end{document} \ No newline at end of file diff --git a/function-machine.png b/function-machine.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa031ed5ed324cd1e08b58f58add2f474127f8a GIT binary patch literal 31200 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 yveO4K#3=%THNunjzpD^=68{w|