MyOwnSafe - Funktionale Programmierung in der Praxis

Die Active Group hat die Webanwendung MyOwnSafe für die MyOwnSafe GmbH entwickelt. MyOwnSafe ist ein „intelligenter Tresor mit Nachlassfunktion“. Der Anwender kann in dieser Anwendung Informationen und Dokumente zu seinen Versicherungen, und seinem Vermögen, sowie sonstige persönliche Informationen ablegen und pflegen. Außerdem kann er Vorkehrungen treffen um diese Informationen im Todes- oder Krankheitsfall bestimmten Personen zugänglich zu machen.

Dieser Artikel beschreibt das Projekt und seine Architektur, Hintergründe zu den Entscheidungen die dabei getroffen wurden, sowie den Erfahrungen die wir damit gemacht haben. Die technischen „Pfeiler“, auf denen die Anwendung fußt, sind dabei die Programmiersprachen OCaml und JavaScript („HTML 5“), Cloud-Computing, NoSQL-Datenbanken und Webservices. Eine Schematische Darstellung der Architektur von MyOwnSafe zeigt folgendes Bild:

Schematische Darstellung der Architektur von MyOwnSafe

Weiterlesen...

Haskell schlägt node.js

Das Javascript-Framework node.js ist eine auf Googles V8 Engine basierende Platform zur Erstellung von performanten und skalierbaren Netzwerkprogrammen. Dabei laufen node.js Programme, anders als mit Javascript sonst üblich, auf der Serverseite. Die gute Performance von node.js bei Netzwerkoperationen beruht vor allem auf der Nutzung von asynchronen Programmierschnittstellen. Allerdings machen solche Programmierschnittstellen den Entwicklern das Leben unnötigerweise schwer und tragen nicht gerade zur guten Wartbarkeit des Codes bei. Wir werden im Verlauf des Artikels noch sehen warum dem so ist.

Der heutige Blogartikel zeigt, dass sich mit der funktionalen Programmiersprache Haskell Netzwerkprogramme mit deutlich besserer Performance als mit node.js schreiben lassen, ohne dass dabei auf ein asynchrones Programmiermodell zurückgegriffen werden muss. Stattdessen wird im üblichen, sequenziellen Stil programmiert und das Laufzeitsystem kümmert sich um die performante Umsetzung auf asynchrone Primitivoperationen.

Der verwendete Benchmark ist eine einfache Serverapplikation, die jede vom Client geschickte Zahl verdoppelt und das Ergebnis an den Client zurückschickt. Mit diesem Benchmark ist das vorgestellte Haskellprogramm im Durchschnitt um Faktor 1,6 schneller als das entsprechende node.js Programm, bei Rückgriff auf eine experimentelle node.js Erweiterung zur Nutzung mehrerer Prozessorkerne schmilzt der Vorsprung der Haskell-Version auf Faktor 1,04, allerdings bringt diese Erweiterung von node.js andere Nachteile mit sich.

Am Ende des Artikels lesen Sie, mit welchen Tricks das Haskell-Laufzeitsystem diesen Speedup erzielt. Ein paar grundlegende Haskell-Kenntnisse schaden zum Verständnis des Artikels nicht, vielleicht möchten Sie sich ja mal unseren Einführungsartikel zu Monaden, das programmierbare Semikolon anschauen. Auch könnten die Artikel zu paralleler Programmierung in Haskell und zur Webprogrammierung in Haskell für Sie interessant sein.

Weiterlesen...

Eine kleine Einführung in die rein funktionale Programmierung - Teil 3

In einem vorigen Beitrag haben wir aus einzelnen Schnecken eine Schneckenwelt zusammengesetzt und grafisch dargestellt. Bisher haben sich die Schnecken einfach nur stur in gerader Linie bewegt; in diesem Posting wollen wir es etwas interessanter machen und jede Schnecke mit einer Schleimspur ausstatten, und schließlich dafür sorgen, daß andere Schnecken dieser Schleimspur ausweichen. („Der Schleim der anderen Schnecken stinkt!“) Am Ende soll das dann so aussehen:

</img>


Diese Erweiterungen verdeutlichen weitere Vorteile der rein funktionalen Programmierung:

  • Die explizite Angabe von Abhängigkeiten macht Zusammenhänge zwischen Werten im Programm deutlich und dessen Bedeutung unabhängig von der Auswertungsreihenfolge.

  • Der explizite Umgang mit Zeit ermöglicht eine akkurate Simulation der Schneckenwelt.

  • Der explizite Umgang mit Identität macht Programme weniger fehleranfällig und einfacher zu debuggen gegenüber imperativen Programmen.

Weiterlesen...