Ceylon, Nutter says, aims to be "an evolutionary 'better Java' that doesn't try to take a revolutionary leap forward (Scala) or completely change paradigms (Ruby)." Its creator, King, seems to agree; he considers "Ceylon to be an alternative to Java that interoperates well with Java." Ceylon focuses more on tooling and is itself developed using the Ceylon IDE. Due to their dynamic nature, "you'll never ever find a tool like Ceylon IDE for a language like Ruby, Python, or Smalltalk," he says.
Clojure's simplicity at first may appear more complex
Clojure is the most unique of the three. The syntax for Lisp was heavily influenced by lambda calculus (PDF). Like Ruby, Clojure is dynamically typed, but where Ruby is a more nominally imperative object-oriented programming language, Clojure is functional. Hickey's idea of simplicity doesn't exactly match up with King's and Nutter's. Clojure aims to remove "self-inflicted complexity derived from their programming languages, approaches, and tools," Hickey says.
Clojure's simplicity is fundamentally different from that in Ceylon or Ruby. The best way to understand Clojure's simplicity is by an example. Stuart Halloway, who runs a consulting company down the street from me, recently gave a talk to the New York City Clojure User's Group and provided a code sample of Clojure reflecting on the
java.lang.String class and printing out members named "last":
(describe String (named "last"))
He said that code could be "simplified" in Clojure to:
#(.startWith (str (:name %)) "last"))
Initially, the latter appears more complicated. To the uninitiated, it is at least harder to read. However, it introduces the least number of new concepts to the language. In the words of Clojure's Hickey, "Simplicity means lack of entanglement. For a programming language, it means delivering abstractions and mechanisms that each do one thing well, and can be composed as needed." The first example cannot be composed at all.