48
13/04/2010 13/04/2010 www.parisjug.org www.parisjug.org www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

  • Upload
    yoh82

  • View
    444

  • Download
    3

Embed Size (px)

Citation preview

Page 1: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010

www.parisjug.orgwww.parisjug.org

www.parisjug.org

Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Page 2: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010

www.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Nicolas Jozwiak

Xebia

Photo

Logo

Page 3: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010

www.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Romain Maton

Xebia

Twitter : rmat0n

Logo

Page 4: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 44www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

CitationsCitations

James Gosling (Java) : During a meeting in the Community Corner, a participant asked an interesting question: "Which Programming Language would you use now on 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 Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy.

Charles Nutter (JRuby) : Scala is most likely candidate to replace Java, compared to Groovy 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.

Page 5: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 55www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

SommaireSommaireLes origines de Scala ?

Qu'y a-t-il sous le capot ? Quelques exemples

L'outillage et les frameworks

Pourquoi faut-il s'y intéresser ?

Difficultés/Challenges

Les freins à son adoption

Le futur ?

Qui l'utilise ?

Conclusion

Page 6: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 66www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les originesLes originesCréateur : Martin Odersky

Professeur de méthodes de programmation à l'EPFL (École Polytechnique Fédérale de Lausanne)

Page 7: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 77www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Scala... ça décolle !Scala... ça décolle !

Page 8: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 88www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Groovy loin devantGroovy loin devant

Page 9: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 99www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Et la route est encore longueEt la route est encore longue

Page 10: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 1010www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

ScalaScala

C'est un compromis entre la programmation orientée objet 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é

Page 11: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 1111www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

ScalaScala

La non nullité, Scala prônera

L'immutabilité, Scala prônera

Tout objet, Scala sera

1+1 <=> (1).+(1)

Page 12: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 1212www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Quelques exemplesQuelques exemples

Inférence

val listStr:Array[String] = new Array[String]val listStr = new Array[String]

Déclaration de fonctions

def 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)

Page 13: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 1313www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Quelques exemplesQuelques exemples

Listes

Collections.sort(...)list.filter({x:Int => x%2==0})list.map({x:Int => x*2})

Support XML natif class HelloWorld { def hello = <span>Welcome Juggers for

Scala’s presentation ! {new java.util.Date}</span>}

Page 14: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 1414www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Passer de l'objet au fonctionnelPasser de l'objet au fonctionnel

List<Integer> listInteger = new LinkedList<Integer>();for (Integer number : list) {

if (number % 2 == 0) listInteger.add(number);}

Predicate predicateNumber = new Predicate () { @Override

public boolean evaluate (Object o) { Integer number = (Integer) o; return n % 2 == 0;}

}

CollectionUtils.filter(list, predicateNumber);

val listNumber = list.filter(_%2 == 0);

Page 15: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 1515www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Quelques exemplesQuelques exemples

Calculer (3+4) * (4+2)

Round(FixingIndex("Euribor 06 Mois", DateFixing("Prefixe", -2, 0, "Ouvré", "XX-XX"), Spot()), 0.01) + SnowBall()

Page 16: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 1616www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Quelques exemplesQuelques exemples

Expression 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 Scala

var expression = Multiply(Add(Const(3), Const(4)), Add(Const(4), Const(2)));

val v = new Visiteur();v.evaluate(expression);

Calculer (3+4) * (4+2)

En Java

Page 17: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 1717www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Pattern matchingPattern matchingabstract class Expr

case class Const(n: Int) extends Exprcase class Add(l: Expr, r: Expr) extends Exprcase 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) }

Page 18: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 1818www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Pattern visiteurPattern visiteur

Page 19: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 1919www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Pattern visiteurPattern 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); }}

Page 20: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 2020www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Pattern visiteurPattern 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()); } ....}

Page 21: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 2121www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

API ActorsAPI Actors

Un actor, c'est :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)

Page 22: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 2222www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Avant : threadsAvant : threads

Page 23: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 2323www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Après : actorsAprès : actors

Page 24: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 2424www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les ActorsLes Actors

val printActor = actor { loop { react { case _ => println(text) } }}

printActor ! "foo" printActor ! "bar"

Page 25: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 2525www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les ActorsLes Actors

val pong = new Pong val ping = new Ping(100000, pong)

ping.start pong.start

Page 26: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 2626www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les ActorsLes Actors

class Ping(count: int, pong: Actor) extends Actor { def act() { pong ! Ping loop { react { case Pong => pong ! Ping } } }}

Page 27: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 2727www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les ActorsLes Actors

class Pong extends Actor { def act() { loop { react { case Ping => sender ! Pong } } }}

Page 28: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 2828www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les TraitsLes Traits

Définition : interfaces permettant de définir des

méthodes/variables abstraites, mais

aussi des méthodes concrètes

Page 29: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 2929www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les TraitsLes 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 !]]>

Page 30: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 3030www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les TraitsLes Traitsabstract 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"); }}

Page 31: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 3131www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les TraitsLes Traits

myCar = new MyCar with ElectricalCar with LogCarmyCar.drive

=> Entree peage Drive an oil car electricial car Sortie peage

var myCar = new MyCarmyCar.drive => Drive an oil car

myCar = new MyCar with ElectricalCarmyCar.drive=> Drive an oil car electricial car

Page 32: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 3232www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

OutillageOutillage

Plugin Eclipse

Coloration syntaxique, markers

Compatabilité java / scala, trait, fonction...

Difficulté au niveau configuration projet

Plante très souvent

Refactoring quasi impossible

Page 33: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 3333www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

OutillageOutillage

Plugin IntelliJ

Complétion très bien géréeParfois lent à la compilation

Configuration de projet simple

Très bonne gestion de l'inférence

Page 34: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 3434www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

OutillageOutillage

Plugin NetBeans

Plugin en version Beta

Installation laborieuse du plugin

Page 35: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 3535www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les frameworksLes 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] }}

Page 36: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 3636www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les frameworksLes frameworks

Tolérance aux pannes

Let it crash ! Don't try to prevent it, but manage it !

Stratégies de redémarrage

Simplification des remote actors

2 à 3 fois plus rapides que les actors Scala

Nombreux modules : Comet, REST, Security, Spring, Guice, AMQP, Scheduler...

: Actors++ !

Page 37: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 3737www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les frameworksLes frameworks

Simple, concis, ajax, comet... focus sur le métier

Tourne sur tomcat, jetty, weblogic...

Pas de code dans les pages HTML

Logique gérée dans le code Scala

Snippet = tag librairies

Mapping assez poussé (BD, model, snippet et pages HTML)

Page 38: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 3838www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Pourquoi faut-il s'y intéresser ?Pourquoi faut-il s'y 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

Page 39: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 3939www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Difficultés/ChallengesDifficultés/Challenges

Enrichissement personnel

=> ça fait marcher le cerveau !

Nouveau paradigme

Penser fonctionnel, ça prend du temps

Page 40: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 4040www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Les freins à son adoptionLes freins à son adoption

Peut devenir assez vite complexe

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

Problème de maîtrise du langage

Courbe d'apprentissage

Scala dans des parties business critical

Intégration avec Java

Page 41: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 4141www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Le futurLe 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

Page 42: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 4242www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Qui utilise Scala ?Qui utilise Scala ?

Page 43: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 4343www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

ConclusionConclusion

Essayez-le !!!

Page 44: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 4444www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Bibliographie / liensBibliographie / liens

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

http://www.artima.com/scalazine

http://www.codecommit.com/blog/

Programming in Scala: A Comprehensive Step-by-step Guide (Martin Odersky)

Programming Scala: Tackle Multicore Complexity on the JVM (Venkat Subramaniam)

Page 45: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

www.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Questions / Réponses

Page 46: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 4646www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

SponsorsSponsors

Page 47: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

www.parisjug.org

Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Merci de Merci de votre votre

attention!attention!

Page 48: 13 04 2010 Scala au Paris JUG (Nicolas Jozwiak, Romain Maton)

13/04/201013/04/2010 SCALASCALA 4848www.parisjug.orgwww.parisjug.orgCopyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

LicenceLicence

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