Picking a JVM Language: which one is right for you?

Venkat Subramaniam [email protected] @venkat_s How it started

Java Simple Powerful JDK Versatile Multi Platform Scalable GC Multithreaded JVM Performance

2 How it started

Simple Simpler than ++ Powerful JDK Versatile Multi Platform Scalable GC Multithreaded JVM Performance

3 How it evolved

Java Weakest link Powerful Widely used JDK Versatile Ubiquitous Multi Platform Scalable GC Multithreaded JVM Performance

4 Emergence

Ruby/ Groovy, Rails Scala JRuby, Exodus Renaissance 2000 2003 Where we’re now

Java Scala Groovy JRuby Clojure Powerful Widely used JDK Versatile Ubiquitous Multi Platform Scalable GC Multithreaded JVM Performance

6 What do these offer?

7 Productivity gain Ease Functional Style

Once we get past the learning curve 8 Typing Static Scala C++ Java

Strong Weak

Groovy

JRuby Perl Clojure Dynamic 9 Essence vs. Ceremony Essence Groovy JRuby Clojure Scala

Java8

Java

Ceremony 10 Functional Style Functional Purity and Style Clojure Scala JRuby Groovy Java8

Java

Non-Functional 11 Concurrency Facilitator Immutable Clojure Scala

JRuby Groovy Java8

Java

Shared Mutable State 12 Metaprogramming Metaprogramming Groovy JRuby Clojure

Scala

Java

Reflection 13 Fluency Fluent Scala JRuby Groovy

Clojure

Java8

Java

Not so fluent 14 How does this matter?

Internal DSL == Metaprogramming + Fluency

Groovy and JRuby shine here

15 What Made Lisp Special Paul Graham’s list 1. Conditionals 2. A function type 3. Recursion 4. Concept of variables 5. Garbage-collection 6. Composed of Expressions 7. A symbol type 8. Notation for tree of symbols

9. Whole Program always available 16 Evaluating Suitability

Sample only, don’t use these numbers literally

17