Eine Monade für Wahrscheinlichkeitsverteilungen

Uns erreichte neulich die Frage „Wozu sind Monaden eigentlich in dynamisch getypten Sprachen“ gut? In Haskell zum Beispiel sind ja Monaden fast allgegenwärtig und haben dort insbesondere die Aufgabe, anhand der Typen deutlich zu machen, mit welchen Effekte ein Entwickler bei der Auswertung eines Ausdrucks rechnen muss. Da Typen in dynamisch getypten Sprachen im Programmtext nicht direkt sichtbar sind, ist die Frage legitim, da viele Monaden nur jeweils einen Wert als Resultat einer Berechnung mit Seiteneffekten produzieren. Es gibt allerdings auch Monaden, die mehr leisten - wie zum Beispiel die Monade der Wahrscheinlichkeitsverteilungen. Um die geht es in diesem Beitrag - und zwar in einer dynamisch getypten Sprache, nämlich in Racket. Racket bietet für diese Anwendung relevante Abstraktionsmöglichkeiten, die noch über die Fähigkeiten von Haskell hinausgehen. Es wird nur rudimentäres Racket vorausgesetzt, wie zum Beispiel in unserem früheren Posting erläutert.

Weiterlesen...

Gemeinsame Verwendung von Scala und Java in einem Projekt

Die Active Group entwickelt die Software EQUALS für das gleichnamige Gemeinschaftsprojekt von INTEGRAS und der KJPK Basel. EQUALS (eine Kurzform für „Ergebnisorientierte Qualitätssicherung in sozialpädagogischen Einrichtungen“) hilft zur Abklärung der psychischen Gesundheit von jungen Menschen, sowie zur pädagogischen Dokumentation der (Heim)-Erziehungshilfen.

In diesem Projekt haben wir 2012 begonnen, die Java-Codebasis Schritt für Schritt nach Scala zu migrieren. Dieser Blogpost zeigt dazu die prinzipellen Schritte, die notwendig sind, um Scala und Java zusammen in einer Software zu verwenden.

Weiterlesen...

Nebenläufigkeit mit Software Transactional Memory

Nebenläufigkeit ist aus modernen Softwaresystemen nicht mehr wegzudenken. Sei es, um Performancesteigerungen durch paralleles Ausführen auf mehreren Prozessorkernen zu erzielen, oder weil das zugrundeliegende Problem inherent nebenläufig ist. In einem anderen Blogartikel haben wir uns bereits mit der Parallelisierung von Programmen bzw. Algorithmen beschäftig.

Heute soll es nun um echte Nebenläufigkeit gehen. Mit „echter Nebenläufigkeit“ meine ich, dass die Nebenläufigkeit nicht Mittel zum Zweck ist, sondern im zu lösenden Problem schon drinsteckt. Ein gutes Beispiel ist z.B. ein Webserver, der quasi gleichzeitig Anfragen von verschiedenen Clients beantwortet. Um einen solchen Webserver zu programmieren, ist Nebenläufigkeit ein gutes Modell: jeder Client wird als separater Thread programmiert und kann damit isoliert betrachtet werden.

Jeder der schon einmal ein nebenläufiges Programm geschrieben hat, weiß allerdings wie schwer es sein kann, Daten zwischen verschiedenen Threads auszutauschen: Race Conditions und Deadlocks sind oft die Folge. In diesem Artikel geht es um „Software Transactional Memory“, kurz STM, einer alternativen Technik zur Kommunikation zwischen Threads. Wir setzen in der Serverkomponente unseres Produkts CheckpadMED ausschließlich auf STM zur Kommunikation zwischen Threads und sind damit sehr zufrieden. STM ist sprachunabhängig und steht für eine Vielzahl von funktionalen Sprachen (z.B. Clojure, Haskell, OCaml, Scala) und anderen Sprache (z.B. C/C++, C#, Java) zur Verfügung. Funktionale Sprachen scheinen aber für den Einsatz von STM deutlich besser gerüstet zu sein, da dort unveränderbare Datenstrukturen und der Verzicht auf global-veränderbare Variablen Standard sind. In diesem Artikel zeigen wir, wie STM in Haskell funktioniert, die Konzepte sind aber in den anderen Sprachen sehr ähnlich und übertragbar.

Weiterlesen...

Streams in Java 8

In einem früheren Posting hatten wir bereits die wichtigste Neuerung in Java 8, nämlich die Lambda-Ausdrücke vorgestellt. Inzwischen steht das offizielle Release von Java 8 unmittelbar bevor und es gibt einen Release Candidate. Heute beleuchten wir die Hauptmotivation für die Einführung von Lambda-Ausdrücken, die neuen Streams in Java 8. Die lassen tatsächlich etwas funktionales Programmiergefühl in Java aufkommen. Allerdings muss man einige Feinheiten beachten.

Weiterlesen...

Jahresrückblick

Vor ziemlich genau einem Jahr haben wir das Blog „Funktionale Programmierung“ gestartet. Zusammen mit einigen Gastautoren berichten in diesem Blog die Firmen Active Group und Factis Research über Aspekte der funktionalen Programmierung, die für unser Arbeitsleben von Bedeutung sind.

In diesem Artikel zum Jahrestag möchten wir ein kurzes Résumé ziehen und einen Überblick über die Artikel des zurückliegenden Jahres geben. Hoffentlich finden Sie dadurch noch den einen oder anderen für Sie interessanten Artikel, der Ihnen im Lauf des Jahres „durch die Lappen“ gegangen ist.

Am Schluss des Artikels finden Sie auch einige interessante Zahlen zum Blog und seinen Besuchern. Wir möchten uns an dieser Stelle schon einmal ganz herzlich bei Ihnen, unseren vielen Lesern bedanken, und Sie um Ihr Feedback bitten.

  • Was gefällt Ihnen an diesem Blog?
  • Was kann noch verbessert werden?
  • Worüber würden Sie gerne mehr erfahren?

Schreiben Sie Antworten auf diese Fragen doch einfach in einen kurzen Kommentar am Ende des Artikels. Danke! Jetzt aber viel Spaß beim Lesen dieses Überblicks.

Weiterlesen...