Clojure: installazione


Joe Yates- Pubblicato il23 Ottobre 2009

Cos'è Clojure

Lisp è fra i languaggi piú vecchi. Ma rispetto ai suoi coetanei (Fortran, COBOL e BASIC), invece di sembrare antiquato, sembra sempre attuale.

Il problema con Lisp è che lo standard che lo governa (Common LISP) è una cosa mastodontica.

Di tanto in tanto (Arc, Scheme), c'è un tentativo di reinventare il linguaggio. Clojure ne è l'ultimo, e, secondo me, il migliore.

Clojure è un'implementazione di Lisp scritto in Java. Per questo motivo, Clojure risolve un problema che ha sempre afflitto i dialetti Lisp: le librerie. Essendo scritto in Java può sfruttare tutte le librerie standard (e non) del linguaggio sottostante.

Dipendenze e configurazione Java

Premesse:

  • Cerco di standardizzare il piú possibile qui, installando tutte le librerie Java sotto /usr/share/java/,
  • Uso il Java di Sun, non quello GNU.

1. Java

Controlla che hai Sun Java installato. Dovresti vedere quanto segue:

$ java -version
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Server VM (build 14.2-b01, mixed mode)

Se vedi 'OpenJDK', stai usando GCJ. Consiglio di installare Sun Java.

2. libjline

Su Ubuntu basta:

$ sudo apt-get install libjline-java libjline-java-doc

Invece, se scarichi il pacchetto, il nome del file JAR conterrà la versione, es:

jline-0.9.94.jar

Per semplificarne l'uso, crea un symlink:

$ cd /usr/share/java
$ sudo ln -s jline-0.9.94.jar jline.jar

Clojure

Clojure sta evolvendo rapidamente, quindi il consiglio è di scaricare l'ultima versione con git, e compilarlo:

$ cd /usr/share
$ sudo git clone git://github.com/richhickey/clojure.git
$ cd /usr/shar/clojure

Serve 'ant' per la compilazione.
Il parametro '--no-install-recommends' evita l'installazione di GCJ.

$ sudo apt-get --no-install-recommends install ant ant-optional
$ sudo ant
$ cd /usr/share/java
$ sudo ln -s /usr/share/clojure/clojure.jar

Controllare

$ java -cp /usr/share/java/clojure.jar clojure.main -e '(str "Ciao Mondo!")'
"Ciao Mondo!"

REPL

Il miglior modo per cominciare è con il REPL, cioè la riga di commando di Clojure.

Prime prove

$ java -cp /usr/share/java/clojure.jar:/usr/share/java/jline.jar jline.ConsoleRunner clojure.main
user=> (defn ciao [] (str "Ciao Mondo!"))
#'user/ciao
user=> (ciao)
"Ciao Mondo!"
user=> [Ctrl+D]

Script d'avvio

Salva il seguente script come 'clj' in una directory che sta nel tuo PATH:

#!/bin/bash
CLOJURE=/usr/share/java/clojure.jar
JLINE=/usr/share/java/jline.jar
for i in $CLOJURE $JLINE do
  if [ ! -e "$i"  ]; then
    echo "File not found: $i"
    exit 1
  fi
done
if [ -z "$1" ]; then
  java -cp $CLOJURE:$JLINE jline.ConsoleRunner clojure.main
else
  CLASS=$1
  shift
  java -cp $CLOJURE clojure.lang.Script $CLASS -- $*
fi