![Page 1: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/1.jpg)
THE ADVENTUROUS DEVELOPERS GUIDE TO JVM LANGUAGES
SIMON MAPLE @SJMAPLE
Monday, 30 September 13
![Page 2: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/2.jpg)
Monday, 30 September 13
![Page 3: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/3.jpg)
YOUR SPEAKER
SIMON MAPLE @SJMAPLE
Monday, 30 September 13
![Page 4: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/4.jpg)
MY AUDIENCE
0
25
50
75
100
Heard of the Language Used the languageJava Scala Groovy Clojure Ceylon Kotlin Xtend
Monday, 30 September 13
![Page 5: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/5.jpg)
JAVA
“Most people talk about Java the language, and this may sound odd coming from me, but I could hardly care less. At the core of the Java ecosystem is the JVM.”
James Gosling,creator of the Java programming language (2011, TheServerSide)
Monday, 30 September 13
![Page 6: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/6.jpg)
JAVA THE JVM
“Most people talk about Java the language, and this may sound odd coming from me, but I could hardly care less. At the core of the Java ecosystem is the JVM.”
James Gosling,creator of the Java programming language (2011, TheServerSide)
Monday, 30 September 13
![Page 7: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/7.jpg)
LANGUAGES BUILT FOR THE JVM
Monday, 30 September 13
![Page 8: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/8.jpg)
LANGUAGES PORTED TO THE JVM
Monday, 30 September 13
![Page 9: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/9.jpg)
R.I.P ?
Monday, 30 September 13
![Page 10: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/10.jpg)
Monday, 30 September 13
![Page 11: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/11.jpg)
Monday, 30 September 13
![Page 12: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/12.jpg)
JAVA 8
1. DON’T BREAK BINARY COMPATIBILITY
2. AVOID INTRODUCING SOURCE INCOMPATIBILITIES
3. MANAGE BEHAVIORAL COMPATIBILITY CHANGES
Monday, 30 September 13
![Page 13: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/13.jpg)
LET’S EXPERIMENT
Monday, 30 September 13
![Page 14: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/14.jpg)
Monday, 30 September 13
![Page 15: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/15.jpg)
COMPANION CLASS
THERE IS NO STATIC
import HttpServer._ // import statics from companion object
Monday, 30 September 13
![Page 16: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/16.jpg)
VARIABLES
THERE IS NO FINAL
val name: Type = initializer // immutable value
var name: Type = initializer // mutable variable
Monday, 30 September 13
![Page 17: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/17.jpg)
CASE CLASScase class Status(code: Int, text: String)
case method @ ("GET" | "HEAD") => ... case method => respondWithHtml( Status(501, "Not Implemented"), title = "501 Not Implemented", ) body = <H2>501 Not Implemented: { method } method</H2> ...
Monday, 30 September 13
![Page 18: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/18.jpg)
STRINGS
val header = s""" |HTTP/1.1 ${status.code} ${status.text} |Server: Scala HTTP Server 1.0 |Date: ${new Date()} |Content-type: ${contentType} |Content-length: ${content.length} """.trim.stripMargin + LineSep + LineSep
Monday, 30 September 13
![Page 19: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/19.jpg)
NULL
def toFile(file: File, isRetry: Boolean = false): Option[File] = if (file.isDirectory && !isRetry) toFile(new File(file, DefaultFile), true)
else if (file.isFile)Some(file)
else None
Monday, 30 September 13
![Page 20: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/20.jpg)
COMPLEXITY
Monday, 30 September 13
![Page 21: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/21.jpg)
Monday, 30 September 13
![Page 22: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/22.jpg)
Monday, 30 September 13
![Page 23: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/23.jpg)
Monday, 30 September 13
![Page 24: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/24.jpg)
Monday, 30 September 13
![Page 25: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/25.jpg)
JAVA SUPERCHARGED!
Monday, 30 September 13
![Page 26: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/26.jpg)
NULL
def streetName = user?.address?.street
Monday, 30 September 13
![Page 27: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/27.jpg)
ELVIS LIVES
def displayName = user.name ?: "Anonymous"
Monday, 30 September 13
![Page 28: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/28.jpg)
CLOSURES
square = { it * it }
[ 1, 2, 3, 4 ].collect(square) // [1, 4, 9, 16]
Monday, 30 September 13
![Page 29: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/29.jpg)
COLLECTIONS
def names = ["Ted", "Fred", "Jed", "Ned"]
5p[5 println names //[Ted, Fred, Jed, Ned]
def shortNames = names.findAll { it.size() <= 3 }
shortNames.each { println it } // Ted // Jed // Ned
Monday, 30 September 13
![Page 30: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/30.jpg)
GROOVY 2.0 - DYNATIC
void someMethod() {}
void test() {
sommeeMethod()}
Monday, 30 September 13
![Page 31: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/31.jpg)
GROOVY 2.0 - DYNATIC
void someMethod() {}
void test() {
sommeeMethod()}
import groovy.transform.TypeChecked
@TypeChecked
Monday, 30 September 13
![Page 32: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/32.jpg)
GROOVY 2.0 - DYNATIC
void someMethod() {}
void test() {
sommeeMethod()}
// compilation error: // cannot find matching method sommeeMethod()
import groovy.transform.TypeChecked
@TypeChecked
Monday, 30 September 13
![Page 33: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/33.jpg)
Monday, 30 September 13
![Page 34: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/34.jpg)
Founder/CEO Jevgeni “Hosselhuff” Kabanov gets ready to save more Java developers from redeploy madness with JRebel
YEH, WE SAVE LIVES
Monday, 30 September 13
![Page 35: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/35.jpg)
Monday, 30 September 13
![Page 36: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/36.jpg)
REPL
<Python user> Can you believe these JVM geeks think this is impressive?<Perl user> Tell me about it! Welcome to the 90s<Python user> Yeh, “Hey the 20th century called to say they wanted their code back”!<Groovy user> Hey, we do this too!
Monday, 30 September 13
![Page 37: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/37.jpg)
FUNCTIONAL PRINCIPLES1. LITTLE OR NO SIDE EFFECTS
2. FUNCTIONS SHOULD ALWAYS RETURN THE SAME RESULT IF CALLED WITH THE SAME PARAMETERS
3. NO GLOBAL VARIABLES
4. FUNCTIONS AS FIRST ORDER CITIZENS
5. LAZY EVALUATION OF EXPRESSIONS
Monday, 30 September 13
![Page 38: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/38.jpg)
WHOA!
(defn send-html-response "Html response" [client-socket status title body] (let [html (str "<HTML><HEAD><TITLE>" title "</TITLE></HEAD><BODY>" body "</BODY></HTML>")] send-http-response client-socket status "text/html" (.getBytes html "UTF-8")) ))
Monday, 30 September 13
![Page 39: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/39.jpg)
LET’S GET FUNCTIONAL
(defn process-request "Parse the HTTP request and decide what to do" [client-socket] (let [reader (get-reader client-socket) first-line (.readLine reader) tokens (clojure.string/split first-line #"\s+")] (let [http-method (clojure.string/upper-case (get tokens 0 "unknown"))] (if (or (= http-method "GET") (= http-method "HEAD")) (let [file-requested-name (get tokens 1 "not-existing") [...]
Monday, 30 September 13
![Page 40: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/40.jpg)
INTEROP
(ns clojure-http-server.core (:require [clojure.string]) (:import (java.net ServerSocket SocketException) (java.util Date) (java.io PrintWriter BufferedReader InputStreamReader BufferedOutputStream)))
Monday, 30 September 13
![Page 41: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/41.jpg)
Monday, 30 September 13
![Page 42: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/42.jpg)
LET’S EXPERIMENT
Monday, 30 September 13
![Page 43: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/43.jpg)
Monday, 30 September 13
![Page 44: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/44.jpg)
LET’S EXPERIMENT
Monday, 30 September 13
![Page 45: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/45.jpg)
Monday, 30 September 13
![Page 46: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/46.jpg)
LET’S EXPERIMENT
Monday, 30 September 13
![Page 47: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/47.jpg)
SUMMARY
FUNCTIONS ARE FIRST CLASS CITIZENS
AND SHOULD BE TREATED AS SUCH!
Monday, 30 September 13
![Page 48: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/48.jpg)
SUMMARY
STATICALLY TYPED LANGUAGES ROCK
Monday, 30 September 13
![Page 49: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/49.jpg)
SUMMARY
EVERYONE’S SYNTAX SUCKS...
Monday, 30 September 13
![Page 50: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/50.jpg)
SUMMARY
EVERYONE’S SYNTAX SUCKS...
TO SOMEONE ELSE.
Monday, 30 September 13
![Page 51: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/51.jpg)
SUMMARY
THE JVM IS AWESOME
Monday, 30 September 13
![Page 52: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/52.jpg)
BE ADVENTUROUS!
Monday, 30 September 13
![Page 53: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/53.jpg)
YOU, ONE HOUR LATER
0
25
50
75
100
Heard of the Lang
Java Scala Groovy Clojure Ceylon Kotlin Xtend
Monday, 30 September 13
![Page 54: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/54.jpg)
REBEL LABS == AWESOME
99.9% NON-PRODUCT RELATED
TECH REPORTS WRITTEN BY OUR DEVELOPERS
Monday, 30 September 13
![Page 55: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/55.jpg)
REBEL LABS == AWESOME
JAVA 8, CONTINUOUS DELIVERY,
APP SERVER DEBATE, JVM WEB FRAMEWORKS,
PRODUCTIVITY REPORTS...
Monday, 30 September 13
![Page 56: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/56.jpg)
REBEL LABS == AWESOME
AND...
THE ADVENTUROUS DEVELOPERS GUIDE TO JVM LANGUAGES
Monday, 30 September 13
![Page 57: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/57.jpg)
RESOURCES
HTTPSERVER EXAMPLES OF EACH LANGUAGE ON GITHUBhttps://github.com/zeroturnaround/jvm-languages-report
THE ADVENTUROUS DEVELOPERS GUIDE TO JVM LANGUAGEShttp://zeroturnaround.com/rebellabs/devs/the-adventurous-developers-guide-to-jvm-languages/
Monday, 30 September 13
![Page 58: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/58.jpg)
RESOURCES
SIMON MAPLE@SJMAPLE
Monday, 30 September 13
![Page 59: The Adventurous Developers Guide to JVM Languages](https://reader033.vdocuments.site/reader033/viewer/2022052315/554f3d3db4c905471e8b4b36/html5/thumbnails/59.jpg)
Monday, 30 September 13