13/04/2010                                                                                                                ...
13/04/2010                                                                                                                ...
13/04/2010Romain MatonXebiaTwitter : rmat0n                                                                               ...
CitationsCharles Nutter (JRuby) : Scala is most likely candidate to replaceJava, compared to Groovy and JRuby. While Scala...
SommaireLes origines de Scala ?Quy a-t-il sous le capot ? Quelques exemplesLoutillage et les frameworksPourquoi faut-il sy...
Les originesCréateur : Martin Odersky Professeur de méthodes de programmation à lEPFL (École Polytechnique Fédérale de Lau...
Scala... ça décolle !   13/04/2010                              SCALA                                                     ...
Groovy loin devant  13/04/2010                              SCALA                                                         ...
Et la route est encore longue    13/04/2010                              SCALA                                            ...
ScalaCest un compromis entre la programmation orientéeobjet et la programmation fonctionnelle  Orientée Objet : Structurat...
ScalaLa non nullité, Scala prôneraLimmutabilité, Scala prôneraTout objet, Scala sera                  1+1 <=> (1).+(1)    ...
Quelques exemplesInférenceval listStr:Array[String] = new Array[String]val listStr = new Array[String]Déclaration de fonct...
Quelques exemplesListesCollections.sort(...)list.filter({x:Int => x%2==0})list.map({x:Int => x*2})Support XML natifclass H...
Passer de lobjet au fonctionnelList<Integer> listInteger = new LinkedList<Integer>();for (Integer number : list) {      if...
Quelques exemplesRound(FixingIndex("Euribor 06 Mois",DateFixing("Prefixe", -2, 0, "Ouvré", "XX-XX"), Spot()), 0.01)+ SnowB...
Quelques exemples                       Calculer (3+4) * (4+2)    En JavaExpression expression = new Multiply(new Add(new ...
Pattern matchingabstract class Exprcase class Const(n: Int) extends Exprcase class Add(l: Expr, r: Expr) extends Exprcase ...
Pattern visiteur   13/04/2010                              SCALA                                                          ...
Pattern visiteurpublic abstract class Expression {    abstract Object evaluate(ExpressionVisiteur v);}public class Add ext...
Pattern visiteurpublic interface ExpressionVisiteur {    Object visitConst(int c);    Object visitAdd(Expression expr1, Ex...
API ActorsUn actor, cest : Un objet qui vit dans la JVM Pile de messages type mailbox Il reçoit des messages, et il répond...
Avant : threads  13/04/2010                              SCALA                                                            ...
Après : actors   13/04/2010                              SCALA                                                            ...
Les Actors  val printActor = actor {    loop {       react {          case _ => println(text)       }    }  }  printActor ...
Les Actors     val pong = new Pong     val ping = new Ping(100000, pong)     ping.start     pong.start  13/04/2010        ...
Les Actorsclass Ping(count: int, pong: Actor) extends Actor {   def act() {      pong ! Ping      loop {         react {  ...
Les Actors  class Pong extends Actor {     def act() {        loop {          react {             case Ping => sender ! Po...
Les TraitsDéfinition : interfaces permettant de définir des                 méthodes/variables abstraites, mais           ...
Les Traitstrait XML {  def toString(): String  def toXML(): String = "<![CDATA[" + toString() + "]]>"}class MyObject {  ov...
Les Traitsabstract class Car {                                                    trait ElectricalCar extends OilCar {   d...
Les Traitsvar myCar = new MyCarmyCar.drive=> Drive an oil carmyCar = new MyCar with ElectricalCarmyCar.drive=> Drive an oi...
Outillage                       Plugin Eclipse                                                                      Colora...
Outillage                    Plugin IntelliJ                                                                              ...
Outillage                    Plugin NetBeans                Installation laborieuse du plugin       Plugin en version Beta...
Les frameworks                                         : tester en Scala en DSL !!!class StackSpec extends FlatSpec with S...
Les frameworks                                                   : Actors++ !Tolérance aux pannesLet it crash ! Dont try t...
Les frameworksSimple, concis, ajax, comet... focus sur le métierTourne sur tomcat, jetty, weblogic...Pas de code dans les ...
Pourquoi faut-il sy intéresser ? Code plus concis Développement plus rapide (peut-être pas tout de suite) Tests encore plu...
Difficultés/ChallengesEnrichissement personnel => ça fait marcher le cerveau !Nouveau paradigmePenser fonctionnel, ça pren...
Les freins à son adoption Problème de maîtrise du langage Peut devenir assez vite complexe  def foo(l: List[int]): int = (...
Le futur  Quelques nouveautés de Scala 2.8 :   Nouvelle API collection   REPL amélioré (complétion...)   Paramètres nommés...
Qui utilise Scala ?    13/04/2010                              SCALA                                                      ...
Conclusion               Essayez-le !!!  13/04/2010                                 SCALA                                 ...
Bibliographie / lienshttp://www.scala-lang.org/http://www.artima.com/scalazinehttp://www.codecommit.com/blog/Programming i...
Questions /               Réponses                                             www.parisjug.orgCopyright © 2008 ParisJug. ...
Sponsors  13/04/2010                              SCALA                                                                   ...
Merci de votre    attention!                                                                                              ...
Licence  http://creativecommons.org/licenses/by-nc-sa/2.0/fr/  13/04/2010                                  SCALA          ...
Upcoming SlideShare
Loading in …5
×

Paris JUG - Scala

952 views

Published on

Scala presentation given at Paris JUG (April 13th, 2010)

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
952
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Paris JUG - Scala

  1. 1. 13/04/2010 www.parisjug.org www.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  2. 2. 13/04/2010 PhotoNicolas JozwiakXebia Logo www.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  3. 3. 13/04/2010Romain MatonXebiaTwitter : rmat0n Logo www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  4. 4. CitationsCharles Nutter (JRuby) : Scala is most likely candidate to replaceJava, compared to Groovy and JRuby. While Scala is not adynamic language, it has many of the characteristics of populardynamic languages, through its rich and flexible type system, itssparse and clean syntax, and its marriage of functional and objectparadigms.James Strachan (Groovy) : Im very impressed with it ! I canhonestly say if someone had shown me the Programming Scalabook by by Martin Odersky, Lex Spoon & Bill Venners back in2003 Id probably have never created Groovy.James Gosling (Java) : During a meeting in the CommunityCorner, a participant asked an interesting question: "WhichProgramming Language would you use now on top of JVM,except Java?"The answer was surprisingly fast and very clear : Scala. 13/04/2010 SCALA www.parisjug.org 4 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  5. 5. SommaireLes origines de Scala ?Quy a-t-il sous le capot ? Quelques exemplesLoutillage et les frameworksPourquoi faut-il sy intéresser ?Difficultés/ChallengesLes freins à son adoptionLe futur ?Qui lutilise ?Conclusion 13/04/2010 SCALA www.parisjug.org 5 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  6. 6. Les originesCréateur : Martin Odersky Professeur de méthodes de programmation à lEPFL (École Polytechnique Fédérale de Lausanne) 13/04/2010 SCALA www.parisjug.org 6 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  7. 7. Scala... ça décolle ! 13/04/2010 SCALA www.parisjug.org 7 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  8. 8. Groovy loin devant 13/04/2010 SCALA www.parisjug.org 8 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  9. 9. Et la route est encore longue 13/04/2010 SCALA www.parisjug.org 9 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  10. 10. ScalaCest un compromis entre la programmation orientéeobjet et la programmation fonctionnelle Orientée Objet : Structuration des données et richesse des APIs Fonctionelle : Moindre verbosité et composition de fonctions Scalable, programmation concurrente et parallèle Scala est exécutable sur une JVM 100% compatible avec Java Statiquement typé 13/04/2010 SCALA www.parisjug.org 10 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  11. 11. ScalaLa non nullité, Scala prôneraLimmutabilité, Scala prôneraTout objet, Scala sera 1+1 <=> (1).+(1) 13/04/2010 SCALA www.parisjug.org 11 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  12. 12. Quelques exemplesInférenceval listStr:Array[String] = new Array[String]val listStr = new Array[String]Déclaration de fonctionsdef multiply(x:Int, y:Int) = x*yMultiply(2, 10)def multiply(x:Int)(y:Int) = x*yMultiply(2)(10)def double = multiply(2)double(10) 13/04/2010 SCALA www.parisjug.org 12 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  13. 13. Quelques exemplesListesCollections.sort(...)list.filter({x:Int => x%2==0})list.map({x:Int => x*2})Support XML natifclass HelloWorld { def hello = <span>Welcome Juggers for Scala’s presentation ! {new java.util.Date}</span>} 13/04/2010 SCALA www.parisjug.org 13 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  14. 14. Passer de lobjet au fonctionnelList<Integer> listInteger = new LinkedList<Integer>();for (Integer number : list) { if (number % 2 == 0) listInteger.add(number);}val listNumber = list.filter(_%2 ==0); Predicate predicateNumber = new Predicate () { @Override public boolean evaluate (Object o) { Integer number = (Integer) o; return n % 2 == 0; } } CollectionUtils.filter(list, predicateNumber); 13/04/2010 SCALA www.parisjug.org 14 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  15. 15. Quelques exemplesRound(FixingIndex("Euribor 06 Mois",DateFixing("Prefixe", -2, 0, "Ouvré", "XX-XX"), Spot()), 0.01)+ SnowBall() Calculer (3+4) * (4+2) 13/04/2010 SCALA www.parisjug.org 15 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  16. 16. Quelques exemples Calculer (3+4) * (4+2) En JavaExpression expression = new Multiply(new Add(new Const(3), new Const(4)), new Add(new Const(4), new Const(2)));ExpressionVisiteur eval = new EvaluateVisiteur();expression.evaluate(eval); En Scalavar expression = Multiply(Add(Const(3), Const(4)), Add(Const(4), Const(2)));val v = new Visiteur();v.evaluate(expression); 13/04/2010 SCALA www.parisjug.org 16 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  17. 17. Pattern matchingabstract class Exprcase class Const(n: Int) extends Exprcase class Add(l: Expr, r: Expr) extends Exprcase class Multiply(l: Expr, r: Expr) extends Exprclass 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) } 13/04/2010 SCALA www.parisjug.org 17 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  18. 18. Pattern visiteur 13/04/2010 SCALA www.parisjug.org 18 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  19. 19. Pattern visiteurpublic abstract class Expression { abstract Object evaluate(ExpressionVisiteur v);}public class Add extends Expression { private Expression expr1; private Expression expr2; public Add(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } public Object evaluate(ExpressionVisiteur v) { return v.visitAdd(expr1, expr2); }} 13/04/2010 SCALA www.parisjug.org 19 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  20. 20. Pattern visiteurpublic interface ExpressionVisiteur { Object visitConst(int c); Object visitAdd(Expression expr1, Expression expr2); Object visitMult(Expression expr1, Expression expr2);}public class EvaluateVisiteur implements ExpressionVisiteur { public Object visitConst(int constante) { return new Integer(constante); } public Object visitAdd(Expression expr1, Expression expr2) { return new Integer(((Integer) expr1.evaluate(this)).intValue() + ((Integer) expr2.evaluate(this)).intValue()); } ....} 13/04/2010 SCALA www.parisjug.org 20 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  21. 21. API ActorsUn actor, cest : Un objet qui vit dans la JVM Pile de messages type mailbox Il reçoit des messages, et il répond… Soit 1 thread par actor Soit un pool de threads (plusieurs millions d’actors) Remote actor (jvm distantes) 13/04/2010 SCALA www.parisjug.org 21 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  22. 22. Avant : threads 13/04/2010 SCALA www.parisjug.org 22 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  23. 23. Après : actors 13/04/2010 SCALA www.parisjug.org 23 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  24. 24. Les Actors val printActor = actor { loop { react { case _ => println(text) } } } printActor ! "foo" printActor ! "bar" 13/04/2010 SCALA www.parisjug.org 24 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  25. 25. Les Actors val pong = new Pong val ping = new Ping(100000, pong) ping.start pong.start 13/04/2010 SCALA www.parisjug.org 25 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  26. 26. Les Actorsclass Ping(count: int, pong: Actor) extends Actor { def act() { pong ! Ping loop { react { case Pong => pong ! Ping } } }} 13/04/2010 SCALA www.parisjug.org 26 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  27. 27. Les Actors class Pong extends Actor { def act() { loop { react { case Ping => sender ! Pong } } } } 13/04/2010 SCALA www.parisjug.org 27 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  28. 28. Les TraitsDéfinition : interfaces permettant de définir des méthodes/variables abstraites, mais aussi des méthodes concrètes 13/04/2010 SCALA www.parisjug.org 28 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  29. 29. Les Traitstrait XML { def toString(): String def toXML(): String = "<![CDATA[" + toString() + "]]>"}class MyObject { override def toString() = "Hello Paris JUG !"}var myObject = new MyObject with XMLprintln(myObject.toXML)=> <![CDATA[Hello Paris JUG !]]> 13/04/2010 SCALA www.parisjug.org 29 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  30. 30. Les Traitsabstract class Car { trait ElectricalCar extends OilCar { def drive() = { override def drive = { print("Drive an"); super.drive(); } println(" electrical car");} } }trait OilCar extends Car { override def drive = { trait LogCar extends Car { super.drive(); abstract override def drive = { println(" oil car"); println("Entree peage"); } super.drive} println("Sortie peage"); } }class MyCar extends OilCar {} 13/04/2010 SCALA www.parisjug.org 30 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  31. 31. Les Traitsvar myCar = new MyCarmyCar.drive=> Drive an oil carmyCar = new MyCar with ElectricalCarmyCar.drive=> Drive an oil car electricial carmyCar = new MyCar with ElectricalCar with LogCarmyCar.drive=> Entree peage Drive an oil car electricial car Sortie peage 13/04/2010 SCALA www.parisjug.org 31 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  32. 32. Outillage Plugin Eclipse Coloration syntaxique, markers Refactoring quasi impossible Plante très souventCompatabilité java / scala, trait, fonction... Difficulté au niveau configuration projet 13/04/2010 SCALA www.parisjug.org 32 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  33. 33. Outillage Plugin IntelliJ Complétion très bien géréeParfois lent à la compilation Très bonne gestion de linférence Configuration de projet simple 13/04/2010 SCALA www.parisjug.org 33 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  34. 34. Outillage Plugin NetBeans Installation laborieuse du plugin Plugin en version Beta 13/04/2010 SCALA www.parisjug.org 34 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  35. 35. Les frameworks : tester en Scala en DSL !!!class StackSpec extends FlatSpec with ShouldMatchers { "A Stack" should "pop values in last-in-first-out order" in { val stack = new Stack[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 is popped" in { val emptyStack = new Stack[String] evaluating { emptyStack.pop() } should produce [NoSuchElementException] }} 13/04/2010 SCALA www.parisjug.org 35 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  36. 36. Les frameworks : Actors++ !Tolérance aux pannesLet it crash ! Dont try to prevent it, but manage it !Stratégies de redémarrageSimplification des remote actors2 à 3 fois plus rapides que les actors ScalaNombreux modules : Comet, REST, Security, Spring,Guice, AMQP, Scheduler... 13/04/2010 SCALA www.parisjug.org 36 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  37. 37. Les frameworksSimple, concis, ajax, comet... focus sur le métierTourne sur tomcat, jetty, weblogic...Pas de code dans les pages HTMLLogique gérée dans le code ScalaSnippet = tag librairiesMapping assez poussé (BD, model, snippet et pages HTML) 13/04/2010 SCALA www.parisjug.org 37 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  38. 38. Pourquoi faut-il sy intéresser ? Code plus concis Développement plus rapide (peut-être pas tout de suite) Tests encore plus métier Gestion « plus simple » des problèmes de modélisation Gestion de la concurrence 13/04/2010 SCALA www.parisjug.org 38 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  39. 39. Difficultés/ChallengesEnrichissement personnel => ça fait marcher le cerveau !Nouveau paradigmePenser fonctionnel, ça prend du temps 13/04/2010 SCALA www.parisjug.org 39 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  40. 40. Les freins à son adoption Problème de maîtrise du langage Peut devenir assez vite complexe def foo(l: List[int]): int = (0/:l){_+_} Courbe dapprentissage Intégration avec Java Scala dans des parties business critical 13/04/2010 SCALA www.parisjug.org 40 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  41. 41. Le futur Quelques nouveautés de Scala 2.8 : Nouvelle API collection REPL amélioré (complétion...) Paramètres nommés et par défaut Nouveaux contrôles (breakable and break) Pas de compatibilité binaire avec 2.7 13/04/2010 SCALA www.parisjug.org 41 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  42. 42. Qui utilise Scala ? 13/04/2010 SCALA www.parisjug.org 42 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  43. 43. Conclusion Essayez-le !!! 13/04/2010 SCALA www.parisjug.org 43 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  44. 44. Bibliographie / lienshttp://www.scala-lang.org/http://www.artima.com/scalazinehttp://www.codecommit.com/blog/Programming in Scala: A Comprehensive Step-by-step Guide (Martin Odersky)Programming Scala: Tackle Multicore Complexityon the JVM (Venkat Subramaniam) 13/04/2010 SCALA www.parisjug.org 44 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  45. 45. Questions / Réponses www.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  46. 46. Sponsors 13/04/2010 SCALA www.parisjug.org 46 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  47. 47. Merci de votre attention! www.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique
  48. 48. Licence http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ 13/04/2010 SCALA www.parisjug.org 48 Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas dUtilisation Commerciale – Partage des Conditions Initiales à lIdentique

×