Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why Clojure over other JVM Lisps: Kawa, Armed Bear or SISC?

The JVM already had three Lisps before Clojure arrived on the scene: Kawa, Armed Bear and SISC.

What gap does Clojure fill that was left by those Lisps?

like image 250
uzo Avatar asked Sep 11 '09 21:09

uzo


People also ask

Why is Clojure not Lisp?

Clojure is a Lisp-1 and is not intended to be code-compatible with other dialects of Lisp, since it uses its own set of data structures incompatible with other Lisps. As a Lisp dialect, Clojure supports functions as first-class objects, a read–eval–print loop (REPL), and a macro system.

Does clojure run on JVM?

Clojure is the result of all this. It's a LISP functional programming language running on the JVM designed for concurrent programs.

Is clojure Lisp?

Clojure is a dialect of Lisp, and shares with Lisp the code-as-data philosophy and a powerful macro system. Clojure is predominantly a functional programming language, and features a rich set of immutable, persistent data structures.

What makes clojure different?

Immutable data structures Clojure has features of an object-oriented language. So, it initially includes a set of immutable (unchangeable) structures and methods for working with them. They look like common JavaScript arrays, Hash Maps. But any operation can't change their values.


2 Answers

Kawa, ABCL, and SISC are reimplementations of existing languages that are quite long in the tooth. They are excellent if for some reason you want to use standard Scheme or standard Common Lisp on the JVM.

Clojure is a new language. It doesn't fill a gap. It adds entirely new possibilities. It favors a purely functional approach- Scheme and CL are both multi-paradigm. Clojure borrows heavily from the design of various FP languages (ML, Haskell).

And yes you could add concurrency support to other Lisps, but that's entirely missing the point. Clojure was designed from the very beginning as concurrent language. So much so that writing concurrent programs is trivial in Clojure - not rocket science as it is in non-functional languages (Scheme, CL not excluded). Look at this way:

People say that C lets you write fast programs by default.

Well, Clojure lets you write concurrent programs by default.

like image 133
dnolen Avatar answered Sep 22 '22 05:09

dnolen


  1. "Clojure is a Lisp not constrained by backwards compatibility" (that's from the Clojure website). It's a fresh start. It's progress. Use the ideas that make Lisp/Scheme powerful but rethink them around the Java platform.

  2. Clojure will always be the most recent Clojure. With any other language ported to the JVM, the JVM version might always be playing catch-up. If you don't need the Java Platform why use SISC over another Scheme? If you do, why not use the one Lisp (Clojure) that was designed specifically for it?

  3. Designed with concurrency in mind.

like image 29
Mark Bolusmjak Avatar answered Sep 24 '22 05:09

Mark Bolusmjak