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.
From Python  to Scala Sébastien Pierre, ffunction inc.@Montréal Python, April 2010         www.ffctn.com                  ...
Stuff I love about Python●    Expressive (and compact)●    Simple to learn●    Lots of smartly designed libraries         ...
Stuff that I miss in Python●    Closures (with syntax)●    Easy concurrency (model and syntax)●    … a compiler !!        ...
Scala - overview                   ffunction                   inc.
The language●    JVM-based, compiled + « interpreted »●    Functional + OO (post-functional)●    ~6 years old●    used by ...
The library●    Anything in Java●    Immutable types library (safe for concurrent apps)●    Concurrency + actor model●    ...
The feel●    Make do with braces●    map/filter/apply (and fold)●    ~25% more lines than with Python●    Very good DSL-ab...
Scala – basics                 ffunction                 inc.
Rich types        Scala               PythonArray   Array(1,2,3,4)      (1,2,3,4]Tuple   (1,2,3,4)           (1,2,3,4)List...
Closures[1,2,3] map            { i => i + 1 }{i:Int => i + 1 }                       # 1-param normal(i:Int) => { i + 1 } ...
Classes + traitsclass A {…}                   ffunction                   inc.
Classes + traits class A  {…}  class Bextends A   {…}                   ffunction                   inc.
Classes + traits class A  {…} class Bextends A   trait T with T      {…}  {…}                      ffunction              ...
Classes + traits class A      trait U  {…}          {…} class B              trait Textends A            extends U  with T...
Classes + traits class A      trait U  {…}          {…} class B              trait Textends A            extends U  with T...
Batteries includedscala.xml.XML.load(     "http://ffunction.posterous.com/rss.xml")  "item"  "title" toListList[scala.xml....
Interpreterscala> println(  List("Hello","world !") match {    case head :: tail =>         tail.foldLeft(head)(          ...
Scala – the sublime**SUBLIME : pleasure + pain, according to the Romantics                                                ...
The almost ML-grade type systemval f:List[Int] = List[1,2,3]val m:Map[String,List[Int]] = Map(    “a” → [1,2,3],    “b” → ...
Multiple method dispatchdef merge(                       def merge(   a:Map[String,Object],             a:List[Object],   ...
Pattern-matchingval sum = {   _ match {      case head :: tail >         head + sum (tail)      case Nil >         0   }} ...
Actorsimport scala.actors.Actor._actor { while (true) {println ("Hello from A") ; Thread.sleep(1)}}actor { while (true) {p...
Message-passingimport scala.actors.Actor._val repeater = actor {    while (true) {       receive {          case msg:Strin...
Le mot de la fin                   ffunction                   inc.
Scala is cool !●    Very powerful●    Hard to learn, long time to master●    Amazing complement to Python for research &  ...
Merci !  www.ffctn.comsebastien@ffctn.com                      ffunction                      inc.
Upcoming SlideShare
Loading in …5
×

From Python to Scala

3,606 views

Published on

Published in: Technology
  • Be the first to comment

From Python to Scala

  1. 1. From Python to Scala Sébastien Pierre, ffunction inc.@Montréal Python, April 2010 www.ffctn.com ffunction inc.
  2. 2. Stuff I love about Python● Expressive (and compact)● Simple to learn● Lots of smartly designed libraries ffunction inc.
  3. 3. Stuff that I miss in Python● Closures (with syntax)● Easy concurrency (model and syntax)● … a compiler !! ffunction inc.
  4. 4. Scala - overview ffunction inc.
  5. 5. The language● JVM-based, compiled + « interpreted »● Functional + OO (post-functional)● ~6 years old● used by Twitter, FourSquare ffunction inc.
  6. 6. The library● Anything in Java● Immutable types library (safe for concurrent apps)● Concurrency + actor model● Quality community-contributed libraries ffunction inc.
  7. 7. The feel● Make do with braces● map/filter/apply (and fold)● ~25% more lines than with Python● Very good DSL-ability● Fast ! ffunction inc.
  8. 8. Scala – basics ffunction inc.
  9. 9. Rich types Scala PythonArray Array(1,2,3,4) (1,2,3,4]Tuple (1,2,3,4) (1,2,3,4)List List(1,2,3,4) (1,2,3,4)Map Map(“a”>1, “b”>2) {“a”:1, “c”:2}Set Set(1,2,3,4) set(1,2,3,4) ffunction inc.
  10. 10. Closures[1,2,3] map { i => i + 1 }{i:Int => i + 1 } # 1-param normal(i:Int) => { i + 1 } # n-param normal[1,2,3] map { _ + 1 } # implicit argsval f = { i:Int => i + 1} ffunction inc.
  11. 11. Classes + traitsclass A {…} ffunction inc.
  12. 12. Classes + traits class A {…} class Bextends A {…} ffunction inc.
  13. 13. Classes + traits class A {…} class Bextends A trait T with T {…} {…} ffunction inc.
  14. 14. Classes + traits class A trait U {…} {…} class B trait Textends A extends U with T {…} {…} ffunction inc.
  15. 15. Classes + traits class A trait U {…} {…} class B trait Textends A extends U with T {…} {…} ffunction inc.
  16. 16. Batteries includedscala.xml.XML.load( "http://ffunction.posterous.com/rss.xml") "item" "title" toListList[scala.xml.Node] = List(<title xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:atom="http://www.w3.org/2005/Atom">Notes on creating a multi­touch interface</title>, <title xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:atom="http://www.w3.org/2005/Atom">Formations en interface &amp; visualisation</title>, <title xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:atom="http://www.w3.org/2005/Atom">Hello, world !</title>) ffunction inc.
  17. 17. Interpreterscala> println( List("Hello","world !") match { case head :: tail => tail.foldLeft(head)( (a:String,b:String)=>{a+", " +b})})Hello, world ! ffunction inc.
  18. 18. Scala – the sublime**SUBLIME : pleasure + pain, according to the Romantics ffunction inc.
  19. 19. The almost ML-grade type systemval f:List[Int] = List[1,2,3]val m:Map[String,List[Int]] = Map( “a” → [1,2,3], “b” → [4,5,6])type JSONable = { def toJSON():String } > ensure constraints at compile-type, speed up programs ffunction inc.
  20. 20. Multiple method dispatchdef merge( def merge( a:Map[String,Object], a:List[Object], b:Map[String,Object] b:List[Object]):Map[String,Object] ):List[Object] > makes it easy to specialize (existing) libraries ffunction inc.
  21. 21. Pattern-matchingval sum = { _ match { case head :: tail > head + sum (tail) case Nil > 0 }} > amazing for message-based communication and list manipulation ffunction inc.
  22. 22. Actorsimport scala.actors.Actor._actor { while (true) {println ("Hello from A") ; Thread.sleep(1)}}actor { while (true) {println ("Hello from B") ; Thread.sleep(1)}}Hello from A Hello from A Hello from A Hello from A Hello from A Hello from AHello from A Hello from A Hello from A Hello from A Hello from A Hello from AHello from B Hello from B Hello from B Hello from B Hello from B Hello from BHello from A Hello from A Hello from A Hello from A Hello from A Hello from AHello from B Hello from B Hello from B Hello from B Hello from B Hello from BHello from A Hello from A Hello from A Hello from A Hello from A Hello from AHello from B Hello from B Hello from B Hello from B Hello from B Hello from BHello from A Hello from A Hello from A Hello from A Hello from A Hello from AHello from B Hello from B Hello from B Hello from B Hello from B Hello from BHello from A Hello from A Hello from A Hello from A Hello from A Hello from AHello from B Hello from B Hello from B Hello from B Hello from B Hello from BHello from A Hello from A Hello from A Hello from A Hello from A Hello from AHello from B Hello from B Hello from B Hello from B Hello from B Hello from BHello from A Hello from A Hello from A Hello from A Hello from A Hello from A ffunction inc.
  23. 23. Message-passingimport scala.actors.Actor._val repeater = actor { while (true) { receive { case msg:String => println(this + ">" + msg) ; reply (msg)}}}actor { repeater ! "ping" while (true) { receive { case msg:String => println(this + ">" + msg) ; reply (msg)}}} ffunction inc.
  24. 24. Le mot de la fin ffunction inc.
  25. 25. Scala is cool !● Very powerful● Hard to learn, long time to master● Amazing complement to Python for research & performance-critical and scalable projects● Easy to interface with Python ! ffunction inc.
  26. 26. Merci ! www.ffctn.comsebastien@ffctn.com ffunction inc.

×