13042010 scala paris jug (nicolas jozwiak, romain maton)

Download 13042010 Scala Paris JUG (Nicolas Jozwiak, Romain Maton)

If you can't read please download the document

Upload: yoh82

Post on 24-Jun-2015

1.224 views

Category:

Technology


1 download

TRANSCRIPT

  • 1.

2. Nicolas Jozwiak Xebia 3. Romain Maton Xebia Twitter : rmat0n 4. Citations James Gosling (Java) : During a meeting in the Community Corner, a participant asked an interesting question: "Which Programming Language would you usenowon top of JVM, except Java?" The answer was surprisingly fast and very clear :Scala. James Strachan (Groovy) : I'm very impressed with it ! I can honestly say if someone had shown me the Programming Scalabook by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probablyhave never created Groovy . Charles Nutter (JRuby) :Scala is most likely candidate to replace Java, compared toGroovy and JRuby. While Scala is not a dynamic language, it has many of the characteristics of popular dynamic languages, through its rich and flexible type system, its sparse and clean syntax, and its marriage of functional and object paradigms. 5. Sommaire

  • Les origines de Scala ?

6. Qu'y a-t-il sous le capot ? Quelques exemples 7. L'outillage et les frameworks 8. Pourquoi faut-il s'y intresser ? 9. Difficults/Challenges 10. Les freins son adoption 11. Le futur ? 12. Qui l'utilise ? 13. Conclusion 14. Les origines

  • Crateur : Martin Odersky
  • Professeur de mthodes de programmation l'EPFL (cole Polytechnique Fdrale de Lausanne)

15. Scala... a dcolle ! 16. Groovy loin devant 17. Et la route est encore longue 18. Scala

  • C'est un compromis entre la programmation oriente objet et la programmation fonctionnelle
  • Oriente Objet :Structuration des donnes et richesse des APIs

19. Fonctionelle :Moindre verbosit et composition de fonctions 20. Scalable, programmation concurrente et parallle 21. Scala est excutable sur une JVM 22. 100% compatible avec Java 23. Statiquement typ 24. Scala

  • La non nullit, Scala prnera

25. L'immutabilit, Scala prnera 26. Tout objet, Scala sera 27. 1+1 (1).+(1) 28. Quelques exemples Infrence val listStr : Array [ String ] =new Array [ String ] val listStr=new Array [ String ] Dclaration de fonctions def multiply ( x : Int ,y : Int ) =x * y Multiply (2, 10) def multiply ( x : Int )( y : Int ) =x * y Multiply (2)(10) defdouble = multiply(2) double (10) 29. Quelques exemples Listes Collections. sort (...) list.filter({x:Int => x%2==0}) list.map({x:Int => x*2}) Support XML natif class HelloWorld{ def hello= Welcome Juggersfor Scalas presentation ! { newjava.util.Date} } 30. Passer de l'objet au fonctionnel List listInteger =newLinkedList(); for(Integer number : list) { if(number % 2 == 0) listInteger.add(number); } Predicate predicateNumber =newPredicate () { @ Override public booleanevaluate (Object o) { Integer number = (Integer) o; returnn % 2 == 0; } } CollectionUtils .filter( list , predicateNumber); vallistNumber = list.filter(_%2 == 0); 31. Quelques exemples Calculer (3+4) * (4+2) Round(FixingIndex("Euribor 06 Mois", DateFixing("Prefixe", -2, 0, "Ouvr", "XX-XX"), Spot()), 0.01) + SnowBall() 32. Quelques exemples Expression expression=newMultiply( newAdd( newConst(3),newConst(4)), newAdd( newConst(4),newConst(2))); ExpressionVisiteureval =newEvaluateVisiteur(); expression.evaluate(eval);

    • En Scala

var expression=Multiply(Add(Const(3), Const(4)),Add(Const(4), Const(2))); val v=newVisiteur(); v.evaluate(expression); Calculer (3+4) * (4+2)

    • En Java

33. Pattern matching abstract class Expr case class Const ( n :Int )extends Expr case class Add ( l :Expr ,r :Expr )extends Expr case class Multiply ( l :Expr ,r :Expr )extends Expr class Visiteur{ def evaluate ( e :Expr ):Int=e match{ case Const ( n ) =>n case Add ( l ,r ) =>evaluate ( l )+ evaluate ( r ) case Multiply ( l ,r ) =>evaluate ( l )* evaluate ( r ) } 34. Pattern visiteur 35. Pattern visiteur public abstract classExpression { abstractObject evaluate(ExpressionVisiteur v); } public classAddextendsExpression { privateExpressionexpr1 ; privateExpressionexpr2 ; publicAdd(Expression expr1, Expression expr2) { this . expr1= expr1; this . expr2= expr2; } publicObject evaluate(ExpressionVisiteur v) { returnv.visitAdd( expr1 ,expr2 ); } } 36. Pattern visiteur public interfaceExpressionVisiteur { Object visitConst( intc); Object visitAdd( Expressionexpr1,Expressionexpr2); Object visitMult( Expressionexpr1,Expressionexpr2); } public classEvaluateVisiteurimplementsExpressionVisiteur { publicObject visitConst( intconstante) { return newInteger(constante); } publicObject visitAdd(Expression expr1, Expression expr2) { return newInteger(((Integer) expr1.evaluate( this )).intValue()+ ((Integer) expr2.evaluate( this )).intValue()); } .... } 37. API Actors

  • Un actor, c'est :
  • Un objet qui vit dans la JVM

38. Pile de messages type mailbox 39. Il reoit des messages, et il rpond 40. Soit 1 thread par actor 41. Soit un pool de threads (plusieurs millions dactors) 42. Remote actor (jvm distantes) 43. Avant : threads 44. Aprs : actors 45. Les Actors val printActor=actor{ loop { react{ c ase _=>println ( text ) } } } printActor ! "foo" printActor ! "bar" 46. Les Actors val pong=newPong val ping=newPing(100000,pong ) ping .start pong .start 47. Les Actors class Ping ( count :int ,pong :Actor )extends Actor{ def act () { pong !Ping loop { react { casePong =>pong ! Ping } } } } 48. Les Actors class Pong extends Actor{ def act () { loop { react { casePing =>sender ! Pong} } } } 49. Les Traits

  • Dfinition : interfaces permettant de dfinir des

mthodes/variables abstraites, mais aussi des mthodes concrtes 50. Les Traits trait XML{ def toString ():String def toXML ():String="" + toString ()+ "" } class MyObject{ override def toString () ="Hello Paris JUG !" } var myObject=newMyObjectwithXML println (myObject.toXML) => Hello Paris JUG ! 51. Les Traits abstract class Car{ def drive () = { print ( "Drive an" ); } } trait OilCar extends Car{ override def drive= { super . drive (); println ( " oil car" ); } } class MyCar extends OilCar{ } trait ElectricalCar extends OilCar{ override def drive= { super .drive(); println ( " electrical car" ); } } trait LogCar extends Car{ abstract override def drive= { println ( "Entree peage" ); super .drive println ( "Sortie peage" ); } } 52. Les Traits myCar=newMyCarwithElectricalCarwithLogCar myCar . drive => Entree peage Drive an oil car electricial car Sortie peage var myCar=newMyCar myCar . drive=> Drive an oil car myCar=newMyCarwithElectricalCar myCar . drive => Drive an oil car electricial car 53. Outillage Plugin Eclipse Coloration syntaxique, markers Compatabilit java / scala, trait, fonction... Difficult au niveau configuration projet Plante trs souvent Refactoring quasi impossible 54. Outillage Plugin IntelliJ Compltion trs bien gre Parfois lent la compilation Configuration de projet simple Trs bonne gestion de l'infrence 55. Outillage Plugin NetBeans Plugin en version Beta Installation laborieuse du plugin 56. Les frameworks

  • : tester en Scala en DSL !!!

classStackSpecextendsFlatSpecwithShouldMatchers { "A Stack"should"pop values in last-in-first-out order"in { valstack =newStack[Int] stack.push(1) stack.push(2) stack.pop() should equal (2) stack.pop() should equal (1) } it should"throw NoSuchElementException if an empty stack ispopped" in{ valemptyStack =newStack[String] evaluating { emptyStack.pop() } should produce[NoSuchElementException] } } 57. Les frameworks

    • Tolrance aux pannes
  • 58. Let it crash ! Don't try to prevent it, but manage it !

59. Stratgies de redmarrage 60. Simplification des remote actors 61. 2 3 fois plus rapides que les actors Scala 62. Nombreux modules : Comet, REST, Security, Spring, Guice, AMQP, Scheduler... : Actors++ ! 63. Les frameworks

    • Simple, concis, ajax, comet... focus sur le mtier
  • 64. Tourne sur tomcat, jetty, weblogic...

65. Pas de code dans les pages HTML 66. Logique gre dans le code Scala 67. Snippet = tag librairies 68. Mapping assez pouss (BD, model, snippet et pages HTML) 69. Pourquoi faut-il s'y intresser ?

    • Code plus concis
  • 70. Dveloppement plus rapide (peut-tre pas tout de suite)

71. Tests encore plus mtier 72. Gestion plus simple des problmes de modlisation 73. Gestion de la concurrence 74. Difficults/Challenges

    • Enrichissement personnel
  • 75. => a fait marcher le cerveau !

76. Nouveau paradigme 77. Penser fonctionnel, a prend du temps 78. Les freins son adoption

    • Peut devenir assez vite complexe
    • Problme de matrise du langage
    • Courbe d'apprentissage
    • Scala dans des parties business critical
    • Intgration avec Java

def foo ( l :List [ int ]):int= (0 /: l ){_ + _} 79. Le futur

  • Quelques nouveauts de Scala 2.8 :
  • Nouvelle API collection

80. REPL amlior (compltion...) 81. Paramtres nomms et par dfaut 82. Nouveaux contrles (breakable and break) 83. Pas de compatibilit binaire avec 2.7 84. Qui utilise Scala ? 85. Conclusion Essayez-le !!! 86. Bibliographie / liens

  • http://www.scala-lang.org/

87. http://www.artima.com/scalazine 88. http://www.codecommit.com/blog/ 89. Programming in Scala: A Comprehensive Step-by-step Guide ( Martin Odersky ) 90. Programming Scala: Tackle Multicore Complexity on the JVM ( Venkat Subramaniam ) 91. Questions / Rponses 92. Sponsors 93. Merci de votre attention! 94. Licence

  • http://creativecommons.org/licenses/by-nc-sa/2.0/fr/