Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Polyglot Programming @ CONFESS

2,624 views

Published on

Published in: Technology

Polyglot Programming @ CONFESS

  1. 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. 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. 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. 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. 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. 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. 7. Truth   o  edit  Master  /tle  style  Click  tor  myth?   Is  Java  ofenly  referred  as  overengineered?  
  8. 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. 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. 10. Click  to  edit  Master  /tle  style    The  JVM  is  a  great  place  to   work  however  Java  makes   it  painful  some/mes...  
  11. 11. Click  to  edit  Master  /tle  style   What  can  we  do  about  it?!  
  12. 12. Click  to  edit  Master  /tle  style  
  13. 13. Click  to  edit  Master  /tle  style   Disclaimer   (this  is  not  a  bash-­‐the-­‐other-­‐languages  talk)  
  14. 14. Click  to  edit  Master  /tle  style  Reduced  Verbosity  
  15. 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. 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. 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. 18. Standard  Beans  Click  to  edit  Master  /tle  style  class Bean { String name}
  19. 19. Standard  Beans  Click  to  edit  Master  /tle  style  class Bean(var name:String)class Bean { @scala.reflect.BeanProperty var name: String}
  20. 20. Standard  Beans  Click  to  edit  Master  /tle  style  (defstruct Bean :name)
  21. 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. 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. 23. Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  def adder = { a , b -> a + b }
  24. 24. Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  val adder = (a:Int, b:Int) => a + b
  25. 25. Closures  dit   Func/ons)  Click  to  e(or  Master  /tle  style  (defn adder [a b] (+ a b))
  26. 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. 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. 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. 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. 30. Click  to  edit  Master  /tle  style  Java  Interoperability  
  31. 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. 32. Click  to  edit  Master  /tle  style   OK,  so...   What  else  can  these  languages  do?  
  33. 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. 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. 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. 36. Clojure   edit  Master  /tle  style  Click  to     Data  as  code  and  viceversa     Immutable  structures     STM     Not  an  exhaus/ve  list  of  features!  
  37. 37. Click  to  edit  Master  /tle  style  Demo  
  38. 38. Click  to  edit  Master  /tle  style  Other  places  where  you‘ll  find  Polyglot  Programming  
  39. 39. Web  to  edit  Master  /tle  style  Click  app  development     XML     SQL     JavaScript     JSON     CSS     Flash/Flex/Ac/onScript  
  40. 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. 41. Build  tsystems   aster  /tle  style  Click   o  edit  M   Gradle,  Gant  -­‐>  Groovy     Rake  -­‐>  Ruby/JRuby     Maven3  -­‐>  XML,  Groovy,  Ruby  
  42. 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. 43. Resources   Master  /tle  style  Click  to  edit  
  44. 44. Click  to  edit  Master  /tle  style  Q  &  A  
  45. 45. Click  to  edit  Master  /tle  style   hBp://people.canoo.com/share  
  46. 46. Click  to  edit  Master  /tle  style  Thank  you!  

×