BOB 2023 – Retrospektive

Am 17.03.2023 fand die BOB, unsere alljährliche Entwickler:innenkonferenz, zum mittlerweile neunten Mal statt. Nach zwei reinen Onlineveranstaltungen fanden wir uns diesmal wieder vor Ort in den Räumen von Lohmann und Birkner Healthcare Services in Berlin zusammen.

Weiterlesen...

Monaden in Kotlin

Dieser Post ist ein Teil der Reihe über funktionale Softwarearchitektur in Kotlin. Im ersten ging es um funktionale Validierung, in diesem Teil geht es um Monaden. Diese sind in Kotlin vor allem praktisch, wenn es um die Beschreibung von Abläufen in der Domäne geht, die von technischer Logik zur Ausführung dieser Abläufe getrennt werden soll – und zwar unter Verwendung von kleinen domänenspezifischen Sprachen (DSLs).

In dieser Folge geht es darum, wie Monaden überhaupt funktionieren. Kotlin hat nämlich – wie viele funktionale Sprachen auch – dafür eine spezielle Syntax, auch wenn man sie nicht unter dem „M-Wort“ in der Dokumentation findet. Sie versteckt sich hinter dem Schlüsselwort suspend.

Weiterlesen...

Freie Monaden in Clojure

Monaden sind ein wichtiges Konzept in der funktionalen Programmierung mit immensem praktischen Nutzen, auch hier im Blog haben wir schon viel darüber geschrieben. Zum Beispiel zeigt der Artikel „Freie Monaden oder: Wie ich lernte, die Unabhängigkeit zu lieben“, wie freie Monaden in Scala eingesetzt werden können, um die Ausführung eines Programmes von dessen Beschreibung zu entkoppeln.

Hier werden wir die Fallstudie aus diesem Artikel aufgreifen und zeigen, wie wir in Clojure die Entkopplung mit Monaden erreichen können. Dabei zeigen wir, wie wir das nutzen können, um Testfälle zu schreiben; und wir werden zeigen, wie wir ganz einfach Mock-Tests für unsere monadischen Programme angeben können.

Weiterlesen...

Multicore-Programmierung mit OCaml 5

In diesem Post geht es endlich mal wieder um OCaml, eine großartige funktionale Sprache, die es schon seit 1996 gibt. (Wenn man den Vorgänger Caml mitzählt sogar schon seit 1985.)

OCaml hat wie viele andere funktionale Sprachen seinen Ursprung in der Forschung am INRIA in Frankreich, ist aber seit ca. 20 Jahren zunehmend auch in industriellen Projekten im Einsatz, zum Beispiel bei Facebook, Jane Street und Bloomberg.

Zum Erfolg von OCaml haben allem vor das elegante Modulsystem, die ergonomische Syntax, der schnelle Byte-Code- und der effiziente Native-Code-Compiler beigetragen. Ein Manko plagte aber die OCaml-Programmierung seit den Anfangstagen: OCaml unterstützte bis vor kurzem keine Multicore-Programmierung, zumindest nicht direkt.

Mit dem Release von OCaml 5.0.0 im Dezember 2022 ist das Problem allerdings ausgeräumt: Multicore-Programmierung sowie Nebenläufigkeit werden unterstützt. Das Multicore-OCaml-Team um KC Sivaramakrishnan hat sich viel Zeit gelassen, um wirklich alles richtig zu machen.

„Multicore OCaml“ hat eine ganze Reihe von Facetten, heute geht es speziell um die Nutzung von Betriebssystem-Threads. In späteren Posts werden wir uns auch noch die Unterstützung von Nebenläufigkeit mit „effect handlers“ anschauen sowie die effiziente parallele Programmierung mit „Reagents“.

Weiterlesen...

Datenkonvertierung mit Linsen

Linsen sind ein wichtiges Konzept in der funktionalen Programmierung mit großem praktischen Nutzen. Vor einigen Jahren haben wir funktionale Linsen hier im Blog bereits vorgestellt. Seitdem haben wir die Benutzung von Linsen in unserer täglichen Arbeit stets ausgebaut. Heute wollen wir zeigen, wie wir Linsen als bidirektionale Transformationen nutzen und wie sie uns dadurch beim Umwandeln von Datenrepräsentationen unterstützen.

Das Beispiel für diesen Artikel implementieren wir mit unserer umfangreichen und frei verfügbaren Clojure-Bibliothek namens Active Clojure, die wir in allen unseren Clojure-Projekten benutzen. In dieser Bibliothek gibt es eine Implementierung für Linsen und für Records, mit denen wir zusammengesetzte Daten in Clojure modellieren können. Die Kombination von Linsen und Records ist besonders hilfreich.

Weiterlesen...