Click  to  edit  Master  /tle  style  Polyglot  Programming  he  JVM  he  JVM  Or  how  I  learned  to  s...
About  t edit  Master  Click  to  he  Speaker   /tle  style  •  Java  developer  since  the  beginning  • ...
I  confess…  Click  to  edit  Master  /tle  style  <j:jelly  xmlns:j="jelly:core"                  	...
Some  o  edit  Master  /tle  style  Click  t facts  about  Java     Previous  name  was  Oak     –...
However...   Master  /tle  style  Click  to  edit    It‘s  already  in  its  teens    It  has  not  s...
More  o  edit  Master  /tle  style  Click  tso...     It  is  rather  verbose  when  compared  to  how ...
Truth   o  edit  Master  /tle  style  Click  tor  myth?   Is  Java  ofenly  referred  as  overengineer...
Truth   o  edit  Master  /tle  style  Click  tor  myth?   Can  you  build  a  Java  based  web  appl...
Truth   o  edit  Master  /tle  style  Click  tor  myth?   Did  James  Gosling  ever  say  he  was...
Click  to  edit  Master  /tle  style    The  JVM  is  a  great  place  to   work  however  Java  ma...
Click  to  edit  Master  /tle  style   What  can  we  do  about  it?!  
Click  to  edit  Master  /tle  style  
Click  to  edit  Master  /tle  style   Disclaimer   (this  is  n...
Click  to  edit  Master  /tle  style  Reduced  Verbosity  
Standard  Beans  Click  to  edit  Master  /tle  style  public class Bean { private String name; public String ...
Standard  Beans  Click  to  edit  Master  /tle  style  public class Bean { private String name; public String ...
Standard  Beans  Click  to  edit  Master  /tle  style  public class Bean { private String name; public String ...
Standard  Beans  Click  to  edit  Master  /tle  style  class Bean { String name}
Standard  Beans  Click  to  edit  Master  /tle  style  class Bean(var name:String)class Bean { @scala.reflect.Bea...
Standard  Beans  Click  to  edit  Master  /tle  style  (defstruct Bean :name)
Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  public interface Adder { int add(int a, int b...
Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  // JDK7 Lambdas proposal#(int a, int b)(a + b)#(...
Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  def adder = { a , b -> a + b }
Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  val adder = (a:Int, b:Int) => a + b
Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  (defn adder [a b] (+ a b))
Enhanced  switch  Click  to  edit  Master  /tle  style  char letterGrade(int grade) { if(grade >= 0 && grade <=...
Enhanced  Switch  Click  to  edit  Master  /tle  style  def letterGrade(grade) { switch(grade) { case 90..100...
Enhanced  Switch  Click  to  edit  Master  /tle  style  val VALID_GRADES = Set("A", "B", "C", "D", "F")def letterG...
Enhanced  Switch  Click  to  edit  Master  /tle  style  (defn letter-grade [grade] (cond (in grade 90 100) ...
Click  to  edit  Master  /tle  style  Java  Interoperability  
All  of  these  are  true  /tle  style  Click  to  edit  Master     Java  can  call  Groovy,  Scala  an...
Click  to  edit  Master  /tle  style   OK,  so...   What  else  can  these  langua...
All  of  them     Master  /tle  style  Click  to  edit     Na/ve  syntax  for  collec/on  classes     ...
Groovy  edit  Master  /tle  style  Click  to     Metaprogramming  (HOT!)  both  at  build/me  and  run/me	...
Scala  to  edit  Master  /tle  style  Click     Richer  type  system     Type  inference     PaBern ...
Clojure   edit  Master  /tle  style  Click  to     Data  as  code  and  viceversa     Immutable  struct...
Click  to  edit  Master  /tle  style  Demo  
Click  to  edit  Master  /tle  style  Other  places  where  you‘ll  find  Polyglot  Programming  
Web  to  edit  Master  /tle  style  Click  app  development     XML     SQL     JavaScript     JSO...
Next-­‐Gen  datastores  (tle  style  Click  to  edit  Master  / NoSQL)     FleetDB  -­‐>  Clojure     Fl...
Build  tsystems   aster  /tle  style  Click   o  edit  M   Gradle,  Gant  -­‐>  Groovy     Rake  -­‐> ...
Par/ng  thoughts   /tle  style  Click  to  edit  Master    Java  (the  language)  may  have  reached  its...
Resources   Master  /tle  style  Click  to  edit  
Click  to  edit  Master  /tle  style  Q  &  A  
Click  to  edit  Master  /tle  style   hBp://people.canoo.com/share  
Click  to  edit  Master  /tle  style  Thank  you!  
of 46

Polyglot Programming @ CONFESS

Published on: Mar 4, 2016
Published in: Technology      
Source: www.slideshare.net


Transcripts - Polyglot Programming @ CONFESS

  • 1. Click  to  edit  Master  /tle  style  Polyglot  Programming  he  JVM  he  JVM  Or  how  I  learned  to  stop  worrying  and  love  t in  t
  • 2. About  t edit  Master  Click  to  he  Speaker   /tle  style  •  Java  developer  since  the  beginning  •  True  believer  in  Open  Source  •  Groovy  commiBer  since  2007  •  Project  lead  of  the  Griffon  framework  •  Currently  working  for
  • 3. I  confess…  Click  to  edit  Master  /tle  style  <j:jelly  xmlns:j="jelly:core"                    xmlns:define="jelly:define"                    xmlns:my="myTagLib">     <define:taglib  uri="myTagLib">            <define:jellybean  name="foo"  className="MyTask"/>     </define:taglib>     Now  lets  use  the  new  tag     <my:foo  x="2"  y="cheese"/>    </j:jelly>
  • 4. Some  o  edit  Master  /tle  style  Click  t facts  about  Java     Previous  name  was  Oak     –  Bonus  points  for  knowing  its  real  name  before  that     Made  its  public  appearance  in  1995     C/C++  were  king  at  the  /me     Networking,  mul/threading  were  baked  right  into  the   language     Developers  came  for  the  applets  and  stayed  for  the   components  (JEE  and  all  that  jazz)
  • 5. However...   Master  /tle  style  Click  to  edit    It‘s  already  in  its  teens    It  has  not  seen  a  major  feature  upgrade  since  JDK5  was   released  back  in  2004  -­‐>  generics     (and  we  do  know  how  that  turned  out  to  be,  don’t  we?)    JDK7  was  been  delayed  again  (scheduled  for  Q3  2011)   Some  features  will  not  make  the  cut     (closures  are  in  apparently)
  • 6. More  o  edit  Master  /tle  style  Click  tso...     It  is  rather  verbose  when  compared  to  how  other  languages   do  the  same  task     Its  threading  features  are  no  longer  enough.     Concurrent  programs  desperately  cry  for  immutability  these  days
  • 7. Truth   o  edit  Master  /tle  style  Click  tor  myth?   Is  Java  ofenly  referred  as  overengineered?
  • 8. Truth   o  edit  Master  /tle  style  Click  tor  myth?   Can  you  build  a  Java  based  web  applica/on   (for  argument  sake  a  basic  TwiBer  clone)  in   less  than  a  day‘s  work  WITHOUT  an  IDE?
  • 9. Truth   o  edit  Master  /tle  style  Click  tor  myth?   Did  James  Gosling  ever  say  he  was   threatened  with  bodily  harm  should  operator   overloading  find  its  way  into  Java?
  • 10. Click  to  edit  Master  /tle  style    The  JVM  is  a  great  place  to   work  however  Java  makes   it  painful  some/mes...
  • 11. Click  to  edit  Master  /tle  style   What  can  we  do  about  it?!
  • 12. Click  to  edit  Master  /tle  style
  • 13. Click  to  edit  Master  /tle  style   Disclaimer   (this  is  not  a  bash-­‐the-­‐other-­‐languages  talk)
  • 14. Click  to  edit  Master  /tle  style  Reduced  Verbosity
  • 15. Standard  Beans  Click  to  edit  Master  /tle  style  public class Bean { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
  • 16. Standard  Beans  Click  to  edit  Master  /tle  style  public class Bean { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
  • 17. Standard  Beans  Click  to  edit  Master  /tle  style  public class Bean { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
  • 18. Standard  Beans  Click  to  edit  Master  /tle  style  class Bean { String name}
  • 19. Standard  Beans  Click  to  edit  Master  /tle  style  class Bean(var name:String)class Bean { @scala.reflect.BeanProperty var name: String}
  • 20. Standard  Beans  Click  to  edit  Master  /tle  style  (defstruct Bean :name)
  • 21. Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  public interface Adder { int add(int a, int b);}public class MyAdder implements Adder { public int add(int a, int b) { return a + b; }}
  • 22. Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  // JDK7 Lambdas proposal#(int a, int b)(a + b)#(int a, int b) { return a + b; }
  • 23. Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  def adder = { a , b -> a + b }
  • 24. Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  val adder = (a:Int, b:Int) => a + b
  • 25. Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  (defn adder [a b] (+ a b))
  • 26. Enhanced  switch  Click  to  edit  Master  /tle  style  char letterGrade(int grade) { if(grade >= 0 && grade <= 60) return ‘F‘; if(grade > 60 && grade <= 70) return ‘D‘; if(grade > 70 && grade <= 80) return ‘C‘; if(grade > 80 && grade <= 90) return ‘B‘; if(grade > 90 && grade <= 100) return ‘A‘; throw new IllegalArgumentException("invalidgrade "+grade);}
  • 27. Enhanced  Switch  Click  to  edit  Master  /tle  style  def letterGrade(grade) { switch(grade) { case 90..100: return ‘A‘ case 80..<90: return ‘B‘ case 70..<80: return ‘C‘ case 60..<70: return ‘D‘ case 0..<60: return ‘F‘ case ~"[ABCDFabcdf]": return grade.toUpperCase() } throw new IllegalArgumentException(invalidgrade ‘+grade)}
  • 28. Enhanced  Switch  Click  to  edit  Master  /tle  style  val VALID_GRADES = Set("A", "B", "C", "D", "F")def letterGrade(value: Any):String = value match { case x:Int if (90 to 100).contains(x) => "A" case x:Int if (80 to 90).contains(x) => "B" case x:Int if (70 to 80).contains(x) => "C" case x:Int if (60 to 70).contains(x) => "D" case x:Int if (0 to 60).contains(x) => "F" case x:String if VALID_GRADES(x.toUpperCase) =>x.toUpperCase()}
  • 29. Enhanced  Switch  Click  to  edit  Master  /tle  style  (defn letter-grade [grade] (cond (in grade 90 100) "A" (in grade 80 90) "B" (in grade 70 80) "C" (in grade 60 70) "D" (in grade 0 60) "F" (re-find #"[ABCDFabcdf]" grade)(.toUpperCase grade)))
  • 30. Click  to  edit  Master  /tle  style  Java  Interoperability
  • 31. All  of  these  are  true  /tle  style  Click  to  edit  Master     Java  can  call  Groovy,  Scala  and  Clojure  classes  as  if  they  were   Java  classes     Groovy,  Scala  and  Clojure  can  call  Java  code  without  breaking   a  sweat!     In  other  words,  interoperability  with  Java  is  a  given.      No  need  for  complicated  bridges  between  languages  (i.e.  JSR  223)
  • 32. Click  to  edit  Master  /tle  style   OK,  so...   What  else  can  these  languages  do?
  • 33. All  of  them     Master  /tle  style  Click  to  edit     Na/ve  syntax  for  collec/on  classes     Everything  is  an  object     Closures!     Regular  expressions  as  first  class  ci/zens     Operator  overloading
  • 34. Groovy  edit  Master  /tle  style  Click  to     Metaprogramming  (HOT!)  both  at  build/me  and  run/me     Builders     Healthy  ecosystem:  Grails,  Griffon,  Gant,  Gradle,  Spock,   Gaelyk,  Gpars,  CodeNarc,  etc...     Not  an  exhaus/ve  list  of  features!
  • 35. Scala  to  edit  Master  /tle  style  Click     Richer  type  system     Type  inference     PaBern  matching  (case  classes)     Actor  model     Traits     Not  an  exhaus/ve  list  of  features!
  • 36. Clojure   edit  Master  /tle  style  Click  to     Data  as  code  and  viceversa     Immutable  structures     STM     Not  an  exhaus/ve  list  of  features!
  • 37. Click  to  edit  Master  /tle  style  Demo
  • 38. Click  to  edit  Master  /tle  style  Other  places  where  you‘ll  find  Polyglot  Programming
  • 39. Web  to  edit  Master  /tle  style  Click  app  development     XML     SQL     JavaScript     JSON     CSS     Flash/Flex/Ac/onScript
  • 40. Next-­‐Gen  datastores  (tle  style  Click  to  edit  Master  / NoSQL)     FleetDB  -­‐>  Clojure     FlockDB  -­‐>  Scala     CouchDB,  Riak  -­‐>  Erlang     By  the  way,  watch  out  for  Polyglot  Persistence  ;-­‐)
  • 41. Build  tsystems   aster  /tle  style  Click   o  edit  M   Gradle,  Gant  -­‐>  Groovy     Rake  -­‐>  Ruby/JRuby     Maven3  -­‐>  XML,  Groovy,  Ruby
  • 42. Par/ng  thoughts   /tle  style  Click  to  edit  Master    Java  (the  language)  may  have  reached  its  maturity  feature   wise  (it’s  not  dead  though!)    Other  JVM  languages  have  evolved  faster    Polyglot  Programming  is  not  a  new  concept    Download  and  play  with  each  of  the  demoed  languages,   maybe  one  of  them  strikes  your  fancy
  • 43. Resources   Master  /tle  style  Click  to  edit
  • 44. Click  to  edit  Master  /tle  style  Q  &  A
  • 45. Click  to  edit  Master  /tle  style   hBp://people.canoo.com/share
  • 46. Click  to  edit  Master  /tle  style  Thank  you!

Related Documents