Monaden: Das programmierbare Semikolon

Unter den Software-Entwicklern gibt es einige, die über die Haskell-Anhänger witzeln: Wenn du mit einem Haskell-Fan sprichst, achte mal darauf, wie viele Minuten es dauert, bis das Wort Monade fällt. Manche Entwickler schließen daraus voreilig, dass man mit Haskell nur arbeiten kann, wenn man weiß, was eine Monade ist.

Viele Haskell-Entwickler nutzen Monaden, ohne viel darüber nachzudenken. Die intuitive do-Notation, die das Arbeiten mit Monaden sehr einfach macht, wird sowohl für die Ein- und Ausgabe als auch z.B. in der häufig verwendeten Parser-Bibliothek parsec und in vielen anderen Bibliotheken genutzt. Monaden nutzen ist eine sehr einfache und bequeme Sache.

Man kann in Haskell also sehr wohl Programme entwickeln, ohne Monaden bis in alle Einzelheiten zu verstehen, aber insbesondere für Real-World-Haskell-Projekte bilden Monaden ein wichtiges Software-technisches Konzept, mit dem wiederverwendbare und modular erweiterbare Software konstruiert werden kann.

Einer der prominentesten Entwicker der Sprache Haskell, Philip Wadler, hat in einer Vortragsdiskussion auf die Frage Wie würden Sie einem Nicht-Haskeller erklären, was eine Monade ist? geantwortet: Ein programmierbares Semikolon.

Diese Antwort bedarf ein wenig Erklärung.

Weiterlesen...

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

In einem vorigen Beitrag haben wir das Vorhaben begonnen, eine Schneckenwelt zu implementieren. Zur Erinnerung:

[…] nehmen wir uns ein konkretes Beispiel vor: Es geht um die Simulation und Visualisierung einer Welt (vielleicht für ein Videospiel), in der sich Schnecken bewegen […]. Die Schneckenwelt ist zweidimensional, und wir fangen mit sehr sturen Schnecken an, die sich stets in die gleiche Richtung bewegen und sich nicht davon abhalten lassen.

In diesem Posting kümmern wir uns erst einmal um die individuellen Schnecken, die wir in einem späteren Posting dann in der Schneckenwelt anordnen. In einem dritten Posting werden wir das Programm so erweitern, daß die Schnecken Schleimspuren hinterlassen und den Schleimspuren anderer Schnecken („die stinken“) ausweichen. Das ganze visualisieren wir dann dergestallt, daß es so aussieht:

</img>


Wir erweitern den Code vom letzten Mal und ordnen Schnecken in einer Schneckenwelt an:

Weiterlesen...

Moderne Webanwendungen mit Haskell

Derzeit sind viele Webanwendungen in PHP geschrieben. Die Gründe dafür liegen auf der Hand: Die Entwicklung geht meist sehr schnell, PHP ist einfach zu erlernen und fast alle Webhoster haben mittlerweile Webserver mit PHP-Unterstützung installiert. Allerdings bringt die Verwendung von PHP auch einige Probleme mit sich. Damit eine PHP-Anwendung gut skaliert, sind viele aufwendige Optimierungen notwendig (siehe z.B. HipHop von Facebook). Außerdem ist PHP eine dynamische Sprache, und damit treten viele Fehler erst zur Laufzeit auf. Schließlich ist auch die Validierung von Eingaben und das Escapen von Ausgaben zumeist dem Programmierer selbst überlassen: SQL-Injections, XSS (Einschleusen von Code in fremde Webseiten durch Dritte) und andere Sicherheitslücken werden nicht auf Ebene der Programmiersprache verhindert (siehe zum Beispiel hier).

Deshalb möchte ich an einem kleinen Beispiel erläutern, wie man mit Haskell relativ einfach eine performante, sichere und moderne Webanwendung schreibt. Hierzu werde ich ein einfaches Blog implementieren. Das Blog wird das Erstellen, Anzeigen sowie das Kommentieren von Beiträgen unterstützen.

Um dem Artikel gut folgen zu können sind Grundlagen zu JavaScript, HTTP und Haskell hilfreich.

Weiterlesen...

Übersichtlicher und Performanter Code mit Scala

Auf der OOP hat die Firma dynatrace, welche sich auf die Analyse von Java-Performance spezialisiert hat, eine „Java Performance Challenge“ abgehalten: welcher von zwei dargestellten Stück Java-Code läuft schneller?

Als ich mir die Stücke Java-Code anschaute, überlegte ich mir, wie das funktionale Pendant aussehen würde, ob es lesbarer ist und ob das Performance-Problem dort auch auftauchen würde.

Weiterlesen...

Warum funktional?

Warum haben wir als Firma entschieden Softwareentwicklung fast ausschließlich in funktionalen Programmiersprachen durchzuführen? Dieses Blog gibt auf diese Fragen jede Woche eine neue Antwort. Und wir hoffen mit unseren Antworten Softwareentwickler und Manager von funktionaler Programmierung zu überzeugen.

Uns ist aber auch klar dass nicht in jedem Projekt eine funktionale Sprache zum Einsatz kommen kann, sei es aus politischen Gründen oder aufgrund externer Zwängen. So werden beispielsweise iOS-Apps typischerweise in Objective-C geschrieben und eine moderene Webanwendung wird mit großer Wahrscheinlichkeit in Javascript entwickelt.

Heute möchte ich eine Antwort auf die Frage „warum funktional?“ anhand eines Beispiels aus der Praxis geben. Das Beispiel stammt aus meiner alltäglichen Arbeit und zeigt, wie man auch in einer imperativen Sprache wie Objective-C durch funktionale Denkweise und die Prinzipien der funktionalen Programmierung einfacheren, besser wartbaren Code schreiben kann.

Weiterlesen...