What are the differences between Clojure, Scheme/Racket and Common Lisp?

They all have a lot in common:

  • Dynamic languages
  • Strongly typed
  • Compiled
  • Lisp-style syntax, i.e. code is written as a Lisp data structures (forms) with the most common pattern being function calls like: (function-name arg1 arg2)
  • Powerful macro systems that allow you to treat code as data and generate arbitrary code at runtime (often used to either “extend the language” with new syntax or create DSLs)
  • Often used in functional programming style, although have the ability to accommodate other paradigms
  • Emphasis in interactive development with a REPL (i.e. you interactively develop in a running instance of the code)

Common Lisp distinctive features:

Clojure distinctive features:

  • Largest library ecosystem, since you can directly use any Java libraries
  • Vectors [] and maps {} used as standard in addition to the standard lists () – in addition to the general usefullness of vectors and maps some believe this is a innovation which makes generally more readable
  • Greater emphasis on immutability and lazy functional programming, somewhat inspired by Haskell
  • Strong concurrency capabilities supported by software transactional memory at the language level (worth watching: http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey)

Scheme distinctive features:

Leave a Comment