Recommended: Sing it, brah! 5 fabulous songs for developers
JW's Top 5
Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
Computer languages reflect the goals, target audiences, and to some degree the personalities of their creators and their communities. As a result, even languages that are created with similar goals in mind may yield highly disparate final results, depending on how their communities understand those goals. Ruby, Clojure, and Ceylon are three such languages.
Ruby is the oldest of the three. Created in the mid-1990s, it didn't achieve widespread popularity until the 2000s. One reason for Ruby's growth is the work of Charles Nutter, who created jRuby, a port of Ruby to the Java virtual machine (JVM). Ruby is a dynamic, object-oriented language, whereas Clojure and Ceylon use a functional programming approach.
Clojure appeared in 2007, created by Rich Hickey. Although Clojure is new, it's a derivative of Lisp, the listy processing language specified in 1958, making it the second-oldest high-level language. Then there's Ceylon (the brainchild of Gavin King, the creator of the Hibernate ORM framework), which is on its second milestone prerelease.
In interviewing Ruby's Nutter, Clojure's Hickey, and Ceylon's King, I was surprised at how -- despite ending up with vastly divergent outcomes -- they share common goals and viewpoints. Each believe their language is designed to simplify the job of the developer, yet the approaches they each take toward achieving that simplicity vary wildly.
A key idea behind Ruby is to "feel as natural as possible, so you can do powerful things with Ruby but it doesn't get in your way," Nutter says. On the other hand, it "does not limit you to programs and development styles that fit into a strict statically typed world."
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 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":