kunskapsbaren 2011 stockholm - scala och andra nya språk i jvm:en

45
STOCKHOLM 14 APRIL, 2011

Upload: hiqinternational

Post on 06-Jul-2015

622 views

Category:

Technology


0 download

DESCRIPTION

Manne Fagerlinds slides från Kunskapsbaren 2011 i Stockholm. Ämnet var "Scala och andra språk i JVM:en".

TRANSCRIPT

Page 1: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

STOCKHOLM14 APRIL, 2011

Page 2: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
Page 3: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

VAD KAN MAN GÖRA MED SCALA SOM MAN INTE

KAN GÖRA MED JAVA?

Page 4: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

VAD KAN MAN GÖRA MED JAVA SOM MAN INTE

KAN GÖRA MED ASSEMBLER?

Page 5: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

VAD ÄR LÄTTARE ATT GÖRA MED SCALA ÄN

MED JAVA?

En vettigare fråga…

Page 6: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

Minns ni 1997?6

Page 7: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

Andra problem 1997…7

För svårt att programmera

För många plattformar

För farligt att köra kod i

webbläsaren

Page 8: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

Lösningen då:8

Page 9: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

Vilka problem har vi idag?9

För dålig produktivitet

För svårt att underhålla kod

Krav på parallellisering

Page 10: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

Några kandidater…10

Page 11: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

11

Exempel på Clojure-kod

(def fib-seq

(concat

[0 1]

((fn rfib [a b]

(lazy-cons (+ a b) (rfib b (+ a b)))) 0 1)))

Page 12: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

En ska bort...12

Page 13: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

13

Saker att beakta

• Verktygsstöd

• Antal användare

• ”Momentum”

Page 14: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

Och en till...14

Page 15: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

15

En typisk Java-klass

public class Customer {

private String firstName;

private String lastName;

public void setLastName(String lastName) {

this.lastName = lastName;

}

public String getLastName() {

Return lastName;

}

/.../

}

Page 16: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

16

Motsvarande Ruby-klass

class Customer

attr_accessor :firstName, :lastName

end

Page 17: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

17

”Statisk typning ger brus”

final HashMap<String, String> capitals =

new HashMap<String,String>();

capitals.put(”Japan”, ”Tokyo”);

capitals.put(”Sweden”, ”Stockholm”);

capitals.put(”UK”, ”London”);

Page 18: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

18

Dynamisk typning

Variabler och fält har ingen typ

Exempel (Ruby):

product_number = ”VG-1296H”

product_number = 14

@parent = File.new(”C:\\”)

@parent = Dad.new(”Homer”, ”Simpson”)

Page 19: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

19

Dynamiska språk - metaprogrammering

Exempel från Ruby on Rails:

class Customer < ActiveRecord::Base

end

new_one = Customer.new

new_one.first_name = ”Homer”

new_one.last_name = ”Simpson”

Page 20: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

20

Öppna klasser

Också från Ruby on Rails:

due_date = 5.days_from_now

Hur är detta möjligt!?

class Fixnum

def days_from_now

/.../

end

end

Page 21: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

21

”Ett nytt språk säger du...?”

Page 22: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

22

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||

open(Q,$0);while(<Q>){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/\|

/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"\n";

#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|

”Kan du bara lägga till en feature i den här koden...”

Page 23: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

23

Håller det i längden?

class Customer < ActiveRecord::Base

end

new_one = Customer.new

new_one. ?

Page 24: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

24

Groovy + Grails

class Customer {

String firstName

String lastName

Integer age

}

newOne = new Customer();

Page 25: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

25

Skillnader mot Ruby on Rails

Groovy är mycket mer likt Java

Grails är mer explicit

Groovy kan vara statiskt typat

Grails har betydligt bättre prestanda

Page 26: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

26

Statisk

typning

Page 27: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

27

Fördelar med statisk typning

• Fel fångas i kompilatorn, inte i produktion...

• Lättare att orientera sig i okänd kod

• Lättare att bygga utvecklingsverktyg

• Bättre prestanda

Page 28: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

Scalable language

Page 29: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

29

Smärtfri integration med Java

val formatter = new java.text.SimpleDateFormat()

val thisIsAJavaString = ”You know all my methods!”

Page 30: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

30

Scala - ”type inference”

val productNumber = ”VG-1296H”

// följande rad ger fel!

productNumber = 14

val capitals = List(”Stockholm”, ”London”, ”Oslo”)

// Jfr Java:

// final List<String> countries =

// Arrays.asList(”Japan”, ”Sweden”, ”UK”);

Page 31: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

31

Men...

Är Scala så svårt egentligen?

Page 32: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

32

Exhibit 1

class Customer(var firstName: String, var lastName:

String, val birthDate: Date) {

override def toString() = firstName + ” ” + lastName

}

Page 33: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

33

Exhibit 1 – i Java

public class Customer {

private String firstName;

private String lastName:

private final Date birthDate;

public Customer(String firstName, String lastName,

Date birthDate) {

/.../

}

public void setFirstName(String firstName) {

this.firstName = firstName;

}

FORTSÄTTNING FÖLJER...

Page 34: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

34

Exhibit 1 – i Java (del 2)

public String getFirstName() {

return firstName;

}

public Date getBirthDate() {

return birthDate;

}

public String toString() {

Return firstName + ” ” + lastName;

}

/* getter och setter för lastName får inte plats */

}

Page 35: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

35

Exhibit 2

val books = List(”Coq Rouge”, ”Ulysses”, ”Papillon”,

”Pippi Långstrump”)

books.foreach(println)

val booksStartingWithP = books.filter(_.startsWith(”P”))

Page 36: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

36

Exhibit 2 – i Java

List<String> books = Arrays.asList(”Coq

Rouge”, ”Ulysses”, ”Papillon”, ”Pippi Långstrump”)

for (String book : books) {

System.out.println(book);

}

List<String> booksStartingWithP = new

ArrayList<String>();

for (String book : books) {

if (book.startsWith(”P”)) {

booksStartingWithP.add(book);

}

}

Page 37: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

37

Exhibit 3

case class Rational(numer: Int, denomin: Int) {

def *(that: Rational) = Rational(numer * that.numer,

denomin * that.denomin)

override def toString = nomin + "/" + denomin

}

println(Rational(5, 3) * Rational(7, 9))

Page 38: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

Scala är objektorienterat

och

funktionellt

Scala – en hybrid

Page 39: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

39

Varför är detta bra?

delat data

Funktioner förändrar inte tillstånd

Därför säkert att parallellisera dem

Page 40: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

40

Funktioner är värden

var stringMatches = (s: String) => s.startsWith(”P”)

if (stringMatches(”Palle”)) println(”matches”)

books.filter(stringMatches)

// anonym funktion

books.filter(_.startsWith(”P”))

Page 41: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

val är det vanliga – var undantag

Funktionell stil uppmuntras

List, Set och Map normalt oföränderliga

Nästan allting returnerar ett värde!

Page 42: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

42

(Nästan) allting returnerar ett värde

val descriptionOfRational =

rational match {

case Rational(x, 1) => x.toString

case Rational(1, 2) => "one half"

case _ => rational.toString

}

println(if (age < 18) ”child” else ”adult”)

Page 43: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

43

Stolen with pride...

Actors – tämligen objektorienterat

API för parallella system

Skamlös stöld från Erlang

Bygger på meddelanden mellan virtuella processer

Page 44: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

Scalable language

Page 45: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

TACK!