Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
-
Upload
hiqinternational -
Category
Technology
-
view
622 -
download
0
description
Transcript of Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
![Page 1: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/1.jpg)
STOCKHOLM14 APRIL, 2011
![Page 2: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/2.jpg)
![Page 3: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/3.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/4.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/5.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/6.jpg)
Minns ni 1997?6
![Page 7: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/7.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/8.jpg)
Lösningen då:8
![Page 9: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/9.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/10.jpg)
Några kandidater…10
![Page 11: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/11.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/12.jpg)
En ska bort...12
![Page 13: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/13.jpg)
13
Saker att beakta
• Verktygsstöd
• Antal användare
• ”Momentum”
![Page 14: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/14.jpg)
Och en till...14
![Page 15: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/15.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/16.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/17.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/18.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/19.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/21.jpg)
21
”Ett nytt språk säger du...?”
![Page 22: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/22.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/24.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/25.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/26.jpg)
26
Statisk
typning
![Page 27: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/27.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/28.jpg)
Scalable language
![Page 29: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/29.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/30.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/31.jpg)
31
Men...
Är Scala så svårt egentligen?
![Page 32: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/32.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/33.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/34.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/35.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/36.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/37.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/38.jpg)
Scala är objektorienterat
och
funktionellt
Scala – en hybrid
![Page 39: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/39.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/40.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/41.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/42.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/43.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/44.jpg)
Scalable language
![Page 45: Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en](https://reader033.fdocuments.net/reader033/viewer/2022060201/559ab1fd1a28abbf378b4620/html5/thumbnails/45.jpg)
TACK!