diff options
Diffstat (limited to 'implementation.tex')
-rw-r--r-- | implementation.tex | 19 |
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 @@ | |||
1 | Im Rahmen dieser Arbeit haben wir die in den vorherigen Abschnitten beschriebenen Verfahren und Konstruktionen in Haskell implementiert. | 1 | Im Rahmen dieser Arbeit haben wir die in den vorherigen Abschnitten beschriebenen Verfahren und Konstruktionen in Haskell implementiert. |
2 | 2 | ||
3 | Es hat sich hierbei die oben beschriebene Konstruktion von $\Lleftarrow$ als Komposition algebraischer Transformationen und generischer, wohlbekannter, Algorithmen (Breitensuche auf einem beliebigem Graph) ergeben. | 3 | Es hat sich hierbei die oben beschriebene Konstruktion von $\Lleftarrow$ als Komposition algebraischer Transformationen und generischer, wohlbekannter Algorithmen (Breitensuche auf einem beliebigem Graph) ergeben. |
4 | Unsere 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. | 4 | Unsere vorherigen Versuche, $\Lleftarrow$ in einem imperativeren Stil zu implementieren, blieben erfolglos; |
5 | Größ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 | ||
53 | Der interaktive editor kann von der Befehlseingabe gestartet werden wie folgt: | 54 | Der 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 | ||
89 | Bei der Implementierung wurde nicht auf Performance geachtet. | 90 | Bei der Implementierung wurde nicht auf Performance geachtet. |
90 | Es ist daher die Laufzeit des interaktiven Editors bereits bei kleinen Eingaben inakzeptabel lang (mehrere Sekunden für ein Kilobyte JSON). | 91 | Es ist daher die Laufzeit des interaktiven Editors bereits bei kleinen Eingaben inakzeptabel lang (mehrere Sekunden für ein Kilobyte JSON). |
91 | Es 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). | 92 | Es 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 | |||
94 | Eine konkrete Quelle der Performance-Einbußen lies sich nicht bestimmen. | ||
95 | Es 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 | |||
97 | Simplere 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. | ||
98 | Es wurde aber zumindest in das interaktive Demonstrationsprogramm Funktionalität eingebaut, um, im Seiteneffekt-behafteten Teil, Laufzeitmessungen anzufertigen (\texttt{ctrl + p}). | ||