Clojure lernen

November 22, 2010 at 7:19 pm 3 comments


Um gedanklich nicht einzurosten, sehe ich mir dann und wann eine neue Programmiersprache an. Diesmal war Clojure an der Reihe. Clojure ist eine funktionale Sprache, die auf der Java VM läuft. Und letztlich ist Clojure nicht wirklich eine neue Programmiersprache, sondern ein Lisp-Dialekt. Clojure bietet an der einen oder anderen Stelle syntaktischen Zucker, so dass der Quelltext etwas aufgelockerter aussieht (nicht soviele runde Klammern) und dadurch für Lisp-Neulinge leichter lesbar ist. Ansonsten ist Clojure aber ein vollständiges Lisp, das sich im Gegensatz zu Common Lisp aber zu beschränken weiß: kein Mega-For-Konstruktur, kein CLOS, etc. Und einige Antiquitäten sind moderneren Einrichtungsmöbeln gewichen: car heißt jetzt first und cdr heißt tail.

Ich finde, das Resultat ist eine einfache, fokussierte Sprache, die einfach zu lernen ist und Spaß macht. Dazu trägt auch bei, dass Clojure bewusst funktional ist und kein OO-Hybrid. So wird man als OO-Entwickler gezwungen, sich einer anderen Perspektive beim Programmieren zu öffnen und das ist auf jeden Fall nützlich – und sei es nur zur Horizonterweiterung.

Neben der eigentlichen Sprache bietet Clojure einige eigene Bibiotheken, insbesondere für die Programmierung paralleler Algorithmen. Durch die funktionale Struktur von Clojure-Systemen gestaltet sich dieses Themengebiet in Clojure viel einfacher als z.B. in Java. Ich bin zwar der Meinung, dass parallele Algorithmen im Moment deutlich überschätzt sind. Aber wenn man meint, dass man es braucht, dann sollte man sich Clojure auf jeden Fall mal ansehen.

Und wenn man keine parallelen Algorithmen braucht, sollte man sich Clojure auch ansehen und z.B. die eine oder andere Code-Kata in Clojure programmieren. Es hat schon seinen eigenen Charme, vollständig funktional zu programmieren.

 

 

Entry filed under: #. Tags: .

Prezi “Inkrementeller Entwurf” als PDF Buchtipp: Practical Clojure

3 Comments Add your own

  • 1. Buchtipp: Practical Clojure « Stefan Roock  |  November 22, 2010 at 7:26 pm

    […] ich mit meinem vorigen Blogpost den einen oder anderen neugierig auf Clojure gemacht habe, gibt es hier gleich noch das passende […]

  • 2. Jens Himmelreich  |  November 23, 2010 at 10:23 am

    Hi Stefan,

    wir haben auf der Arbeit ein kleines Forschungsprojekt zu clojure gemacht und sind dabei auf etwas interessantes gestoßen. Zunächst beschäftigt man sich mit der Lisp-Syntax (die ja keine Syntax sein will). Dann erfährt man irgendwie, dass clojure so gut für paralleles prozessieren geeignet sei und schaut sich die Datenstrukturen an. Aber das eigentlich interessante ist unter diesem ganzen Berg verborgen. Rich Hickey hat eine sehr spannende Interpretation der Probleme paralleler Verarbeitung. Er sagt, der kleinste und einzige Punkt an dem wirklich etwas zwischen verschiedenen Threads geteilt werden müsse sei eine Referenz. Die Aktion auf dem Objekt, auf das die Referenz, zeigt kann getrennt passieren, aber die Veränderung der Referenz (er nennt das eine Identität, die verschiedene Werte haben kann), die müsse transaktional gekapselt sein (REFS) oder asynchron mit Agenten stattfinden. Man findet das unter: http://clojure.org/state

    viele gruesse
    jens

  • 3. Benjamin Peter  |  January 9, 2011 at 9:55 pm

    Hi,

    habe mich auch ein wenig mit dem Thema befasst und muss sagen der Vortrag “Are We There Yet?” von Rich Hickey erläutert die Problematik sehr gut. Es bringt einem zum Nachdenken und zeigt was die Idee hinter den Konstrukten in Clojure ist. Hickey erklärt den Begriff Zeit und Zustand und was man bisher falsch gemacht hat, sowie wie Clojure versucht die Probleme zu lösen. Interessant ist auch, wie OOP hinderlich dabei ist, bewusst mit Zeit bzw. Zustand umzugehen.

    http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

    Gruß Ben.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed



%d bloggers like this: