Fay

Haskell auf Client-Seite

Alexander Mills (inf9433@fh-wedel.de)

Startseite | Inhaltsverzeichnis | Einleitung | Funktionsweise | Beispiele | Einschränkungen | Fazit | Quellen

Fazit

Das Fazit zu Fay ist zweiteilig. Während Fay einerseits positive Seiten hat, hat es leider auch einige unangenehme Eigenschaften.


Das Negative

Ein Kritikpunkt an Fay ist der Verlust der referenziellen Transparenz durch die Verwendung vom Foreign Function Interface. Durch die Einbindung von JavaScriptcode, beziehungsweise die Möglichkeit imperative Programmierung innerhalb des Haskellcodes zu verwenden, erlaubt Fay Nebeneffekte. Referenzielle Transparenz, also dass der Wert eines Ausdrucks nicht vom Zeitpunkt seiner Auswertung abhängig ist, heißt jedoch auch, ist jedoch bei der Entwicklung von Webapplikationen hinderlich, da hier meist der Zustand einer HTML-Seite, beziehungsweise ihrer Elemente, ausgewertet werden muss.

Eine verbesserte Implementierung der "ffi"-Funktion, einschließlich Compilerprüfungen des dort deklarierten JavaScriptcodes und der verwendeten Datentypen, würden die Möglichkeiten des "Missbrauchs" durch FFI reduziert werden.


Desweiteren wird nur eine Untermenge von Haskell unterstützt, was jedoch aufgrund der Tatsache, dass sich Fay noch in der Entwicklung befindet, vernachlässigt werden kann. Dennoch ist gerade die fehlende Unterstützung für Haskells Typklassen und das Fehlen der üblichen Module (Control, Data, etc.) ein großer Mangel an Fay. Würde Haskell vollständig unterstützt werden, könnten alle existierenden Haskellprogramme nach JavaScript kompiliert und auf Clientseite, beispielsweise im Browser, ausgeführt werden.


Ein weiterer Kritikpunkt ist das Verhalten der Datentypen, insbesondere von Zahlentypen. Dies ist jedoch kein Fehler von Fay, da JavaScript einfach alle Zahlen als Double interpretiert und entsprechend damit umgeht. Es wäre möglich das Verhalten von Integern zu simulieren, indem diese als Klasse implementiert werden und nach jeder arithmetischen Operation die Nachkommastellen entfernt werden. Dies hätte jedoch einen drastischen Verlust der Rechenleistung zur Folge, da bei jedem Rechenschritt unnötige Berechnungen erfolgen würden.

Dieser falsche Verhalten lässt sich aber auch nur durch Verwendung von "ffi" provozieren, was wiederum den ersten Punkt bekräftigt. Deshalb wäre es bereits eine Lösung, wenn bei der Konvertierungsfunktion "jsToFay_Int" ein Abschneiden der Nachkommastellen erfolgen würde.



Das Positive

Fay erfüllt seine Aufgabe, Haskell nach JavaScript zu übersetzen, sehr gut, wenn der frühe Entwicklungsstand bedacht wird. Der erzeugte Code lässt sich nach einiger Einarbeitung leicht verstehen und die Kompilierung erfolgt nach einem festen Schema. Die Umsetzung von Lazy Evaluation ist ebenfalls erfolgreich gelungen. Einfache Haskellprogramme, also solche, die auf die nicht verfügbaren Funktionalitäten verzichten, lassen sich problemlos von Fay kompilieren.

Beschränkt ein Entwickler die Verwendung von der "ffi"-Funktion auf das Nötige, beispielsweise Zugriffe auf HTML-Elemente, lassen sich sinnvolle Webapplikationen programmieren, in denen die Berechnungen als Haskellfunktionen implementiert sind. Auch wenn es aufwendig ist diese Funktionen einzeln zu testen, da das Einbinden von FFI das Kompilieren mit dem GHC verhindert, so ist der Haskellcode wesentlich übersichtlicher als der gleichwertige JavaScriptcode. Zusätzlich lässt sich der Haskellcode leichter mit Funktionsbeweisen validieren.



Schlusswort

Das Projekt Fay ist definitiv interessant. Es ist wünschenswert, dass Fay weiterentwickelt und möglicherweise eines Tages fertiggestellt wird, da die Nachteile von JavaScript schon jetzt teilweise umgangen werden. Dennoch ist festzuhalten, dass für die Entwicklung von Webapplikationen Fay nicht das ideale Werkzeug ist. Komplexe mathematische Berechnungen lassen sich zwar leicht in Haskell formulieren, jedoch ist dies nicht der Hauptzweck von Webentwicklung.

Ein Beispiel für den Einsatzzweck von Fay wäre die einfache Implementierung von Konsistenzprüfungen für Daten, welche von einer Webseite verarbeitet werden sollen. Ebenfalls lassen sich grafische Effekte mihilfe von FFI programmieren, welche auf mathematische Funktionen zurückgreifen. Die Möglichkeiten um mit Fay zu arbeiten sind vielfältig, auch wenn sie noch beschränkt sind.


Somit bleibt nur abzuwarten, wie sich Fay in Zukunft entwickeln wird.