Parallele Programmierung mit Haskell

Computerprozessoren werden heutzutage nicht mehr mit jeder neue Generation schneller und schneller. Stattdessen konzentrieren sich die Chiphersteller darauf mehr Prozessorkerne in unsere Rechner einzubauen. Für die Softwareentwicklung bedeutet dies dass Software nicht mehr automatisch mit jeder Prozessorgeneration schneller läuft sondern dass die Entwickler dafür etwas tun müssen.

Ein Zauberwort heißt daher parallele Programmierung. Damit ist gemeint dass verschiedene Teile eines Programms gleichzeitg ablaufen können, somit mehrere Prozessorkerne auslasten und im Endeffekt schneller an‘s Ziel kommen. Die automatische Parallelisierung von Software ist allerdings immer noch ein Traum; stattdessen muss Parallelität von Hand in die Software eingebaut werden. Funktionale Programmierung eignet sich hervorragend zur parallelen Programmierung, insbesondere weil funktionale Programme diszipliniert und sparsam mit Seiteneffekten umgehen und damit ein großes Hindernis für Parallelität von Grund auf vermeiden.

Dieser Artikel demonstriert, wie man in der funktionalen Sprache Haskell sehr einfach und elegant parallele Programme schreiben kann. Dazu stelle ich eine Haskell-Bibliothek vor, die Parallelität ermöglicht ohne dabei auf ein deterministisches Programmverhalten zu verzichten. Das bedeutet dass ein mit der Bibliothek entwickeltes paralleles Programm garantiert dasselbe Ergebnis liefert, egal ob es auf einem, zwei oder 32 Prozessorkernen läuft (sofern das Programm keine anderen, nicht-deterministischen Teile enthält). In anderen Sprachen ist im Gegensatz dazu Parallelität häufig nicht-deterministisch. Damit werden Programme deutlicher schwerer zu debuggen, da sie beispielsweise auf einem Kern wunderbar funktionieren, auf zwei Kernen aber das falsche Ergenbis berechnen und es auf vier Kernen hin und wieder zu einem Deadlock kommt.

Als kleine Vorausblick hier der Speedup in Relation zur Anzahl der Kerne, den wir mit Parallelität in Haskell durch eine sehr einfache Modifikation eines ursprünglich sequentiellen Programms erzielen können:

</img>


Zum Verständnis des Artikels sind Grundkenntnisse in Haskell sowie Bekanntschaft mit der do-Notation hilfreich.

Weiterlesen...

Funktional Programmieren am konkreten Beispiel (Ant)

Die Vorteile der funktionalen Programmierung bei der Code-Wiederverwendung, Test- und Beweisbarkeit oder der Parallelisierung kann man abstrakt aufzählen und erläutern, aber wesentlich anschaulicher wird es doch, wenn man mal die gleiche Funktionalität in einer imperativen und einer funktionalen Sprache gegenüberstellt.

In diesem konkreten Beispiel nehmen wir einen kleinen Teil eines reellen Java-Programms, und zeigen wie dieser mit rein funktionalen Elementen in der Programmiersprache Scala implementiert werden kann. Dabei wird zum Beispiel deutlich, wie die um ein vielfaches besseren Möglichkeiten der Wiederverendung von Code die Fehlerrate deutlich senkt.

Weiterlesen...

Das Blog 'Funktionale Programmierung' startet!

Jetzt geht es endlich los: Unser Blog ‚Funktionale Programmierung‘ startet mit den ersten Beiträgen!

Zum Hintergrund:

Wir bei Active Group und Factis Research setzen in unseren kommerziellen Produkten und open-source Projekten gern und erfolgreich funktionale Programmierung ein. Dies ermöglicht uns, gegenüber traditioneller objektorientierter Programmierung flexiblere und robustere Software schneller zu entwickeln.

In diesem Blog berichten wir über Aspekte der funktionalen Programmierung, die für unser Arbeitsleben von Bedeutung sind. Zielgruppe sind alle, die funktionale Programmierung in der Praxis einsetzen oder einsetzen wollen. Entsprechend gehen wir davon aus, dass die Artikel bunt gemischt sein werden:

  • einführende Artikel zur funktionalen Programmierung und funktionalen Programmiersprachen
  • Erfahrungsberichte aus konkreten Projekten
  • fortgeschrittene Entwicklungstechniken
  • interessante Implementierungsaspekte bei funktionalen Sprachen.

Es kommen bestimmt noch weitere Kategorien dazu.

Wir wünschen viel Freude bei der Lektüre und freuen uns stets über Feedback, am einfachsten über die Kommentarfunktion des Blogs!