Open Source im professionellen Einsatz
Linux-Magazin 01/2010
589

Malerei

Nach dieser Vorbereitung folgt nun die Funktion, die alles zusammenbaut. In der Funktion »mandelbrot-parallel« erzeugt das Programm zunächst einen Jframe und ein Jpanel, für das es die Methode »paintComponent« implementiert, was der Befehl »proxy« ermöglicht. Die Welt, gespeichert in der Ref »world«, darf das Programm nicht direkt manipulieren, also erzeugt es mit »dosync« eine Transaktion, in der der Befehl »ref-set« der Welt eine neue Liste von leeren Vektoren zuweist (Zeile 107). Danach bekommt das Panel die im Parameter-Satz definierte Größe zugewiesen. Maps sind Funktionen ihrer Schlüssel, das macht den Quelltext kompakt. Eine weitere kompakte Schreibweise erlaubt »doto« (Zeile 114): Es ruft auf dem ersten Argument, einem Java-Objekt, alle darauf folgenden Methoden auf.

Ab Zeile 119 folgt das Herzstück dieses Programms. Mit »dorun« bewirkt der Programmierer Seiteneffekte. Die komplette Parallelisierung des Algorithmus steckt in dem p von »pmap« in Zeile 121. Hier handelt es sich um den oben beschrieben Befehl »map«, der sich aber automatisch auf die vorhandenen CPUs oderKerne verteilt. Wie das auf einem Notebook mit zwei Cores (Intel Core2 Duo 1,8 GHz, 2 GByte RAM) während der Berechnung aussieht, zeigt die Abbildung 2. Obwohl durch den zweiten Kern kein großer Gewinn zu erwarten ist, da ja das wiederholte Zeichnen des Jpanel schon einen zweiten Thread beschäftigt, sinkt die Zeit für die Berechnung durch »pmap« von rund 5 Sekunden auf etwa 4.

Abbildung 2: Das Programm lastet bei der Berechnung zwei Prozessorkerne aus.

Die anonyme Funktion (»fn«), die hier in »pmap« zur Anwendung kommt, verändert »world« in einer Transaktion (»dosync«), indem sie »alter« aufruft. Dieses »alter« nimmt eine Funktion entgegen, die keine Seiteneffekte hat. Dafür muss der Programmierer sorgen. Hintergrund dieser Anforderung ist das Transaktionsmodell, das die Funktion unter Umständen mehrfach ausführt. Der Rückgabewert dieser Funktion ist der neue Wert der Ref. In diesem Falle schreibt »assoc« dazu die vorher neu berechnete Zeile (»newline«) in den aktuellen Zustand (»state«) der Welt und liefert diese neue Welt zurück.

Nach dieser Manipulation von »world« in einer Transaktion kann der Agent das Signal bekommen, die Welt neu zu zeichnen (»send-off«). Das Resultat zeigt die Abbildung 3.

Abbildung 3: Das Resultat von Closures Arbeit: Eine grafische Darstellung der Mandelbrot-Menge.

Neues und Bewährtes

Clojure ist neu und bringt zwei wesentliche Features mit: Unterstützung für Concurrency direkt in der Sprache und eine enge Verwandschaft mit Java. Das erste macht die Sprache interessant und gut geeignet für die nächsten Generationen von Prozessoren, das zweite gibt Clojure die Chance, produktiv eingesetzt zu werden. Der Einstieg scheint nicht leicht, ist aber einfacher, als mancher denkt ([9], [10]). Die interaktive Entwicklung an der REPL hilft dabei.

Während der Erstellung dieses Artikels hat Clojure ihren zweiten Geburtstag gefeiert. In diesen beiden Jahren hat die Sprache sowohl in der Java- als auch in der Lisp-Community einige Aufmerksamkeit erregt. Ob sie sich durchsetzen kann, wird sich bis zum vierten Geburtstag sicherlich zeigen. Herzlichen Glückwunsch, Clojure! (mhu)

Infos

[1] Clojure-Webseite: [http://www.clojure.org]

[2] Clojure-1.0-Download: [http://clojure.googlecode.com/files/clojure_1.0.0.zip]

[3] Enclojure für Netbeans: [http://www.enclojure.org/]

[4] Clojure-Mode, Swank-Backend: [http://github.com/jochu/]

[5] SLIME: [http://common-lisp.net/project/slime/]

[6] Vim Clojure: [http://kotka.de/projects/clojure/vimclojure.html]

[7] Counterclockwise: [http://code.google.com/p/counterclockwise/]

[8] Clojure und Contrib auf Github: [http://github.com/richhickey]

[9] Ausführlicher Artikel für Einsteiger: [http://java.ociweb.com/marks/clojure/article.html]

[10] Clojure-Vorträge als Videos: [http://clojure.blip.tv]

Der Autor

Stefan Kamphausen ist Physiker und hat eine Vorliebe für Sprachen der Lisp-Familie. Derzeit arbeitet er an einem Buch zum Thema Clojure.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Clojure

    Clojure sieht aus wie Lisp und läuft überall, wo Java installiert ist. Dank praktischer Tools und ausgereifter Bibliotheken ist mit der Sprache auch rasch eine moderne Webanwendung programmiert.

  • Unabhängigkeit: Clojure will ohne Spenden auskommen

    Der Erfinder des Lisp-Dialekts Clojure will sein Projekt künftig ohne Spenden weiterführen.

  • Spenden für Clojure

    Rich Hickey, Erfinder und Hauptentwickler der funktionalen Programmiersprache Clojure, bittet um Spenden, um das Projekt weiter verfolgen zu können.

  • Tux liest

    Das Linux-Magazin nimmt ein englischsprachiges Buch unter die Lupe, das sich mit Ubuntu Server beschäftigt und das Etikett "offizielles Handbuch" trägt. Der zweite Titel ist in Deutsch abgefasst und widmet sich der funktionalen Programmiersprache Clojure.

     

  • Clojure 1.6 stabilisiert Alpha-Features

    Die funktionale, Java-basierte Programmiersprache Clojure, die sich an Lisp orientiert, ist in Version 1.6 erschienen. Einige vormalige Alpha-Features sind nun den Kinderschuhen entwachsen.

comments powered by Disqus

Ausgabe 09/2017

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.