Facebook setzt auf Haskell

Vor kurzem haben wir hier in diesem Blog die Veranstaltung Zurich FP Afternoon vorgestellt. Simon Marlow, einer der Hauptentwickler des weit verbreiteten Glasgow Haskell Compilers und inzwischen bei Facebook beschäftigt, hat auf dieser Veranstaltung einen Überblick über sein aktuelles Projekt Haxl gegeben. Ich möchte hier durch eine Zusammenfassung des Vortrags zeigen, dass inzwischen auch so große Firmen wie Facebook auf funktionale Programmierung setzen, um die Probleme der modernen Softwareentwicklung in den Griff zu bekommen. Die Folien zum Vortrag enthalten alle weiteren technischen Details.

Weiterlesen...

Ist Java 8 eine funktionale Programmiersprache?

Java 8 wird erst 2014 fertig, aber die erste Testversion ist seit kurzem als Early Access Download verfügbar.

Seit längerer Zeit ist auch bekannt, wo der inhaltliche Fokus der neuen Java-Version ist: Im Project Lambda, das endlich funktionale Features in Java integriert. Damit trägt Oracle vor allem der Tatsache Rechnung, dass moderne Multicore-Architekturen in Java nur sehr umständlich zu Höchstleistungen überredet werden können; dazu mehr in einem zukünftigen Artikel. Hier soll es erstmal um das primäre Feature funktionaler Programmiersprachen gehen: die Unterstützung von Funktionen als Objekte erster Klasse.

Weiterlesen...

Haskell FFI

Obwohl für Haskell auf Hackage eine sehr große Menge von Bibliotheken bereit steht, kann es trotzdem vorkommen, dass keine Bibliothek das gewünschte leistet. In manchen Fällen gibt es aber beispielsweise eine C-Bibliothek, die alles geforderte erfüllt. In gewissen Situationen kann auch Performanz ein Grund sein einige Teile eines Programms in C zu entwickeln.Und genau das ist das Thema dieses Blogposts: Von Haskell aus C-Funktionen aufrufen.

Weiterlesen...

MyOwnSafe - Funktionale Programmierung in der Praxis - Teil 2

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

In einem vorherigen Artikel habe ich die Gesamtarchitektur und die eingesetzen Technologien beschrieben. Dieser Artikel soll an einem kleinen Ausschnitt der Software zeigen, wie die funktionale Programmierung in OCaml die Entwicklung vereinfachen und damit auch beschleunigen konnte.

Weiterlesen...

Ein Parser für HL7-Nachrichten in weniger als 180 Zeilen Haskell-Code

Ein Argument gegen die Benutzung funktionaler Sprachen in einem kommerziellen Produkt ist oft, dass es für solche „exotischen“ Sprachen nicht genügend Bibliotheken gäbe. Für ausgewachsene funktionale Sprachen wie Scala oder Haskell zieht dieses Argument längst nicht mehr, denn es gibt für beide Sprache eine Menge qualitativ hochwertiger Bibliotheken und Komponenten. Und sollte es doch mal vorkommen dass für ein etwas ungewöhnlicheres Problem keine Unterstützung durch eine Bibliothek vorhanden ist, kann man meistens in kurzer Zeit Abhilfe schaffen und sich selbst eine kleine Bibliothek zusammenstellen.

Heute wollen wir das anhand eines Parsers für HL7-Nachrichten durchexerzieren. HL7 ist ein weitverbreiteter Standard zum Austausch medizinischer Daten. Wir setzen diesen Standard bei uns in der Firma oft im Rahmen unseres Produktes Checkped MED ein, über das wir schon an anderer Stelle in diesem Blog berichtet haben. Da der Checkpad-Server hauptsächlich in Haskell geschrieben ist, benötigen wir in Haskell natürlich auch einen Parser für HL7-Nachrichten. Da es einen solchen nicht fertig erhältlich gibt, haben wir in kurzerhand selbstgeschrieben. Sie werden in diesem Artikel sehen, dass wir eine performante und robuste Implementierung in weniger als 180 Zeilen Haskell-Code erstellen können, und diese Zeilen enthalten auch die Datentypdefinition für die HL7-Nachrichten sowie Tests. Der Code des eigentlichen Parsers ist weniger als 50 Zeilen lang.

Weiterlesen...