on scala slides - osdc 2009

33
On Scala Or: Why Static Typing Doesn't Have to Suck

Upload: michael-neale

Post on 15-Jan-2015

1.374 views

Category:

Technology


0 download

DESCRIPTION

A presentation by Tom Lee and Michael Neale at OSDC conference, Brisbane, 2009. Why scala sucks less.

TRANSCRIPT

Page 1: On Scala Slides - OSDC 2009

On ScalaOr: Why Static Typing Doesn't Have

to Suck

Page 2: On Scala Slides - OSDC 2009

Your Designated Presenter Units

Michael Neale • Employed by Red Hat

o Works on various jboss projectso Talks a lot

• Developer behind Drools 

Thomas Lee • Works for Shine Technologies

o Groundskeeper• Sporadic open source contributor guy

Page 3: On Scala Slides - OSDC 2009

On Java ...

Page 4: On Scala Slides - OSDC 2009

The Language Is Like, So 1991

Page 5: On Scala Slides - OSDC 2009

But The VM is Okay

Page 6: On Scala Slides - OSDC 2009

And there are libraries for everything

Page 7: On Scala Slides - OSDC 2009

On Scala ...

Page 8: On Scala Slides - OSDC 2009

What We Want To Say

"I want a mapping of String keys to Integer values"

Page 9: On Scala Slides - OSDC 2009

What We Have To Say in Java

HashMap<String, Integer> map = new HashMap<String, Integer>();

Page 10: On Scala Slides - OSDC 2009

What We Can Say in Scala

val map = new HashMap[String, Int]

Page 11: On Scala Slides - OSDC 2009

What we want to say

"I want stuff to happen when the user click a button"

Page 12: On Scala Slides - OSDC 2009

What we have to say in Java

import javax.swing.JButton;import java.awt.event.ActionListenerimport java.awt.event.ActionEvent

JButton button = new JButton("Click Me!");button.addActionListener(new ActionListener(){  public void actionPerformed(ActionEvent e) {    // stuff();  }});

Page 13: On Scala Slides - OSDC 2009

What we can say in Scala

import scala.swing.Buttonimport scala.swing.events.ButtonClicked  val button = new Button("Click Me!")button.reactions += {    case ButtonClicked(e) => // stuff()}

Page 14: On Scala Slides - OSDC 2009

But what about Ruby/Python/Perl?!!1!

Page 15: On Scala Slides - OSDC 2009

Scala types are statically checked

Page 16: On Scala Slides - OSDC 2009

Sun JVM: no GIL / green threads / etc.

Page 17: On Scala Slides - OSDC 2009

But Scala is comparably expressive

Page 18: On Scala Slides - OSDC 2009

An example: Ruby and Scala

"Both a house and a car can be sold, but are not related."

Page 19: On Scala Slides - OSDC 2009

What we say in Ruby

class House; def value; 400000; end; endclass Car; def value; 30000; end; endclass BankAccount  def initialize(balance); @balance = balance; end  def credit(amount); @balance += amount; endend def sell(acct, asset); acct.credit(asset.value); endbank_acct = BankAccount.new(0)sell(bank_acct, House.new)sell(bank_acct, Car.new)

Page 20: On Scala Slides - OSDC 2009

What we say in Scala

class House { def value = 400000 }class Car { def value = 30000 }class BankAccount(var balance : Int)   def credit(balance : Int) =    this.balance += balance}

object BankApp extends Application {  def sell(acct:BankAccount, asset:{def value : Int}) =    acct.credit(asset.value)  val bankAcct = new BankAccount(0)  sell(bankAcct, new House)  sell(bankAcct, new Car)}

Page 21: On Scala Slides - OSDC 2009

The best of both worlds?

Page 22: On Scala Slides - OSDC 2009

Other cool Scala stuff

Page 23: On Scala Slides - OSDC 2009

Actors for concurrency

val actor = actor { loop { receive {   case Message(m) => ...   case Another(m) => reply { answer }}}}

actor ! Message("hello")val answer = actor !? Another("ola")

//its just a library ! other options: STM etc...

Page 24: On Scala Slides - OSDC 2009

Actors for concurrency

Page 25: On Scala Slides - OSDC 2009

Pattern matching

val v = something match {  case Something(s) => whatever(s)  case m: SomeClass => whatever(m)  case (42, "hey") => 42  case _ => "Nothing matched"}

//compiler can warn for non exhaustive match

Page 26: On Scala Slides - OSDC 2009

Pattern matching

Page 27: On Scala Slides - OSDC 2009

Implicits

implicit def extendClass(c: LegacyClass) = EnhancedClass(c)

//demo !

//used to enhance stuff

//use wisely !

Page 28: On Scala Slides - OSDC 2009

Functional Programming

closures/lambdas 

(i: Int, s: String) => println(s + (i + 1))

val func = (i : Int) => .... 

val nums = (1 to 100) filter (_ < 50)

def log(message: => String) = ....

val immutableList = List(1, 2, 3)

def calcSomething : Option[Result] = ...calcSomething match { case Result => ... } //no NPE !

Page 29: On Scala Slides - OSDC 2009

Functional Programming

• fold*• map• filter• lazy sequences

Page 30: On Scala Slides - OSDC 2009

Functional Programming

Page 31: On Scala Slides - OSDC 2009

Dynamic language-like?

Duck typing => Structural typing

Monkey patching => Implicit methods

A shell !

Page 32: On Scala Slides - OSDC 2009

Who is using it? 

• Twitter• Foursquare• EDF Trading• Siemens• ... and others!

Page 33: On Scala Slides - OSDC 2009

Questions?