Vortrag-Bad-Honnef/Studienarbeit/content/chapter/05.tex
2024-07-20 01:08:57 +02:00

36 lines
3.9 KiB
TeX

\chapter{Fazit und Ausblick}
\section{Fazit}
Im Laufe dieser Studienarbeit konnte bisher nur ein Bruchteil des Quellcodes übersetzt werden. \autoref{fig:distribution} zeigt das aktuelle Verhältnis von Java zu \ac{Java-TX} Quelldateien. Bisher konnten nur 18 von 251 Quelldateien erfolgreich übersetzt werden. \grqq{}Erfolgreich\glqq{} bedeutet in diesem Kontext, dass alle Tests der Testsuite erfolgreich durchlaufen wurden.
\begin{figure}[H]
\centering
\begin{tikzpicture}
\pie[sum=251]{18/Java-TX, 233/Java}
\end{tikzpicture}
\caption{Verhältnis der Java und \ac{Java-TX} Dateien im \JTXCinJTX}
\label{fig:distribution}
\end{figure}
Die übersetzten Dateien beschränken sich aktuell auf die Pakete \lstinline|de.dhbwstuttgart.typeinference| und \lstinline|de.dhbwstuttgart.syntaxtree|. Der Umfang der übersetzten Dateien ist vergleichsweise gering. Dennoch konnten durch die Studienarbeit viele Bugs im Compiler gefunden und behoben werden, wodurch sich die generelle Qualität des Compilers verbessert hat. Einige neue Features, welche zum Übersetzen der Quelldateien in \ac{Java-TX} notwendig waren, wurden ebenfalls hinzugefügt. Die größte Schwachstelle des Compilers sind aktuell wohl die Fehlermeldungen. Diese sind oft schwer zu verstehen und einzugrenzen. Hier besteht definitiv noch Verbesserungspotential. Außerdem fehlen auch aktuell noch einige der grundlegenden Funktionen von Java, wie z.B. die Main Methode, die wegen der fehlenden Unterstützung für Arrays noch nicht implementiert wurde.
\section{Ausblick}
Das langfristige Ziel wird sicherlich sein (ggf. in nachfolgenden Studienarbeiten), den gesamten Quellcode des \JTXC{} in \ac{Java-TX} zu übersetzen\footnote{Externe Tools wie \gls{Antlr} oder \gls{ASM}, die zur Implementierung des Compilers verwendet wurden, werden natürlich weiterhin Java Code verwenden}, um die Qualität und Funktionsumfang des Compilers sicherzustellen. Der Weg dahin ist jedoch noch weit. Es gibt sicherlich noch viele unentdeckte Bugs und Probleme, die es zu lösen gilt. Zudem müsste man an bestimmten Stellen nicht nur die Typinformationen entfernen, sondern den Code anpassen. Der \JTXC{} verwendet historisch bedingt teilweise noch alte Java-Features, die in \ac{Java-TX} nicht mehr unterstützt werden, z.B. Raw Types \cite{noauthor_raw_nodate}.
Außerdem müsste man zum aktuellen Stand des Compilers sämtliche Arrays in Listen umwandeln, da \ac{Java-TX} aktuell keine Arrays unterstützt. Dies ist darauf zurückzuführen, dass Arrays auch in Java eine gewisse Sonderstellung haben, da sie aus einer Zeit vor generischen Typen stammen und im Vergleich zu Collections einige Nachteile haben \cite{naftalin_java_2007}[Abschnitt 2.5, 6.9].
Doch auch wenn Arrays im Quellcode durch Listen ersetzt werden können, gibt es gewisse Methoden in Java Bibliotheken, die Arrays verwenden.
So z.B. auch die Methode \texttt{split} der Klasse \texttt{java.lang.String}, die ein Array von Strings zurückgibt \cite{noauthor_string_nodate}:
\begin{verbatim}
public final class String implements ... {
...
public String[] split(String regex) {...}
public String[] split(String regex, int limit) {...}
...
}
\end{verbatim}
Diese Methoden sind z.B. aus \ac{Java-TX} nicht aufrufbar, da sie Arrays zurückgeben.
Langfristig wird es also notwendig sein, Arrays in \ac{Java-TX} zu unterstützen, um die Kompatibilität mit Java Klassen zu gewährleisten. Arrays sind in Java auch essenziell für die Main Funktion, die daher in \ac{Java-TX} auch noch fehlt.
Erstrebenswert wäre es auch, die Fehlermeldungen des Compilers weiter zu verbessern. Dies würde sicherlich auch die Fehlersuche beim Übersetzen der Quelldateien erleichtern. Auch eine vollständige Kompatibilität von \ac{Java-TX} Funktionstypen und funktionalen Interfaces wäre wünschenswert, um den Vorteil der echten Funktionstypen vollumfänglich mit bestehenden Java Bibliotheken ausnutzen zu können.