Hy – ein Lisp in Python

Geschrieben am 03. April 2016

Lisp-artige Programmiersprachen begeistern mich spätestens seit ich damals angefangen habe, mich intensiver mit dem GNU Emacs auseinanderzusetzen. In der Praxis verwende ich jedoch zumeist Python. Auch Python ist sehr ausdrucks­stark; vor allem bietet mir das Python-Ökosystem aber viele hervorragende und aktuelle Bibliotheken, die mir bei der Entwicklung viel Arbeit abnehmen. In der Lisp-Welt sieht es mit aktuellen, gut gepflegten Bibliotheken leider häufig etwas mau aus, so dass keiner der Lisp-Dialekte für mich in der Praxis sinnvoll einsetzbar ist.

Nun bin ich auf ein interessantes Projekt gestoßen: Hy, ein Lisp-Dialekt in Python. Das Projekt verspricht, die Lisp- und die Python-Welt zu verheiraten. Hy ermöglicht dabei nicht nur den Zugriff auf Python-Bibliotheken von der Lisp-Seite aus, so wie es Clojure für Java-Bibliotheken bietet, sondern man kann auch anders herum Hy Code in Python verwenden. Dies könnte es theoretisch ermöglichen, bestehende Python-Programme sukzessive auf Hy umzustellen. So könnte man einzelne Module, die bisher in Python implementiert waren, in Hy implementieren und dann wie bisher im Python Code verwenden.

Ein einfaches Beispiel:

Wir haben in der Datei greetings.hy folgenden Hy Code:

(defn greet [name]
  (print "hello from hy," name))

Dann können wir unsere Hy-Funktion in unserem Python Code verwenden:

import hy
import greetings

greetings.greet("Foo")

Und dies geht, wie erwähnt, auch anders herum: Wir implementieren unsere Funktion in Python in der Datei greetings.py:

def greet(name):
    print("hello, %s" % (name))

In Hy können wir die Funktion folgendermaßen nutzen:

(import greetings)
(.greet greetings "foo")

Das Projekt wurde 2013 von Paul Tagliamonte gestartet. Mittlerweile zählt das Core Team 17 Mitglieder. Darunter sind einige bekannte Namen. Es wird interessant zu sehen, ob das Projekt nachhaltigen Erfolg haben wird. Ich würde es mir wünschen. Die Commit History macht zumindest Mut.

Ich freue mich schon auf weitere Experimente und werde das eine oder andere kleine Python-Modul mal in Hy implementieren. Im optimalen Fall ist dies der sukzessive Einstieg in produktives Lisp.