summaryrefslogtreecommitdiff
path: root/implementation.tex
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2019-06-07 09:08:42 +0200
committerGregor Kleen <gkleen@yggdrasil.li>2019-06-07 09:08:42 +0200
commita29cce747f3717e32231c9a92b40be12832037b6 (patch)
tree70f399682dec8657719eae4358e87cdc24bbf42f /implementation.tex
parent9a02751c1e588a5bbb83bb7e543c26486d3079d5 (diff)
downloadincremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar
incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar.gz
incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar.bz2
incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar.xz
incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.zip
Finish for submission
Diffstat (limited to 'implementation.tex')
-rw-r--r--implementation.tex19
1 files changed, 13 insertions, 6 deletions
diff --git a/implementation.tex b/implementation.tex
index 3a68e04..26ee2c7 100644
--- a/implementation.tex
+++ b/implementation.tex
@@ -1,7 +1,8 @@
1Im Rahmen dieser Arbeit haben wir die in den vorherigen Abschnitten beschriebenen Verfahren und Konstruktionen in Haskell implementiert. 1Im Rahmen dieser Arbeit haben wir die in den vorherigen Abschnitten beschriebenen Verfahren und Konstruktionen in Haskell implementiert.
2 2
3Es hat sich hierbei die oben beschriebene Konstruktion von $\Lleftarrow$ als Komposition algebraischer Transformationen und generischer, wohlbekannter, Algorithmen (Breitensuche auf einem beliebigem Graph) ergeben. 3Es hat sich hierbei die oben beschriebene Konstruktion von $\Lleftarrow$ als Komposition algebraischer Transformationen und generischer, wohlbekannter Algorithmen (Breitensuche auf einem beliebigem Graph) ergeben.
4Unsere vorherigen Versuche $\Lleftarrow$ in einem imperativeren Stil zu implementieren blieben Erfolglos; größte Schwierigkeiten hat bereitet die diversen Randbedingungen (Anfangs- und Endzustand, zu produzierende Ausgabe) innerhalb des Algorithmus zur Breitensuche zu wahren. 4Unsere vorherigen Versuche, $\Lleftarrow$ in einem imperativeren Stil zu implementieren, blieben erfolglos;
5Größte Schwierigkeiten hat bereitet, die diversen Randbedingungen (Anfangs- und Endzustand, zu produzierende Ausgabe) innerhalb des Algorithmus zur Breitensuche zu wahren.
5 6
6\subsubsection{Struktur der Implementierung} 7\subsubsection{Struktur der Implementierung}
7 8
@@ -12,7 +13,7 @@ Die Module innerhalb von \texttt{edit-lens} entsprechen im wesentlichen den Sekt
12\item[Control.Edit] 13\item[Control.Edit]
13 Definition von Moduln 14 Definition von Moduln
14\item[Control.Lens.Edit] 15\item[Control.Lens.Edit]
15 Definition von zustandsbehafteten Monoidhomomorphismen und, damit, edit-lenses sowohl als Typklasse als auch als existentiell quantifizierter Datentyp 16 Definition von zustandsbehafteten Monoidhomomorphismen und edit-lenses sowohl als Typklasse als auch als existentiell quantifizierter Datentyp
16\item[Control.Edit.String] 17\item[Control.Edit.String]
17 Eine simple edit-Sprache auf Strings 18 Eine simple edit-Sprache auf Strings
18\item[Control.Edit.String.Affected] 19\item[Control.Edit.String.Affected]
@@ -46,11 +47,11 @@ Die Module innerhalb von \texttt{edit-lens} entsprechen im wesentlichen den Sekt
46\begin{figure}[h] 47\begin{figure}[h]
47 \begin{center} 48 \begin{center}
48 \includegraphics{screenshot} 49 \includegraphics{screenshot}
49 \caption{Der interaktive Editor (im Modus \texttt{json-newl}) nach import einer kleinen JSON-Datei} 50 \caption{Der interaktive Editor (im Modus \texttt{json-newl}) nach Import einer kleinen JSON-Datei}
50 \end{center} 51 \end{center}
51\end{figure} 52\end{figure}
52 53
53Der interaktive editor kann von der Befehlseingabe gestartet werden wie folgt: 54Der interaktive Editor kann von der Befehlseingabe gestartet werden wie folgt:
54\begin{lstlisting}[language=bash] 55\begin{lstlisting}[language=bash]
55 $ stack build 56 $ stack build
56 $ stack exec interact <dfst> 57 $ stack exec interact <dfst>
@@ -88,4 +89,10 @@ Nach Auswahl wird der Inhalt der Datei am Cursor eingefügt.
88 89
89Bei der Implementierung wurde nicht auf Performance geachtet. 90Bei der Implementierung wurde nicht auf Performance geachtet.
90Es ist daher die Laufzeit des interaktiven Editors bereits bei kleinen Eingaben inakzeptabel lang (mehrere Sekunden für ein Kilobyte JSON). 91Es ist daher die Laufzeit des interaktiven Editors bereits bei kleinen Eingaben inakzeptabel lang (mehrere Sekunden für ein Kilobyte JSON).
91Es lässt sich allerdings der Speedup beim Propagieren kleiner edits gut beobachten; die Propagation eines ein-Buchstaben-edits nach rechts ist ca. einen Faktor 200 schneller als das komplett neue Parsen einer Datei (ca. ein Kilobyte JSON). 92Es lässt sich allerdings der Speedup beim Propagieren kleiner edits gut beobachten; die Propagation eines ein-Buchstaben-edits nach rechts ist um ca. einen Faktor 200 schneller als das komplett neue Parsen einer Datei (ca. ein Kilobyte JSON).
93
94Eine konkrete Quelle der Performance-Einbußen lies sich nicht bestimmen.
95Es wäre möglich einschlägige Profiling-Werkzeuge\footnote{\url{https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/profiling.html}}\textsuperscript{, }\footnote{\url{https://jaspervdj.be/posts/2014-02-25-profiteur-ghc-prof-visualiser.html}} anzusetzen, dies ist jedoch, der eher theoretischen Ausrichtung der Arbeit folgend, nicht geschehen.
96
97Simplere Methoden als Profiling und eingehende Analyse der entstehenden Reports lassen sich, wegen Haskells strikter Behandlung von Seiteneffekten und dem Ziel den unterliegenden Algorithmus Seiteneffekt-frei zu halten, nicht anwenden.
98Es wurde aber zumindest in das interaktive Demonstrationsprogramm Funktionalität eingebaut, um, im Seiteneffekt-behafteten Teil, Laufzeitmessungen anzufertigen (\texttt{ctrl + p}).