• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
 

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

on

  • 788 views

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

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

Statistics

Views

Total Views
788
Views on SlideShare
771
Embed Views
17

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 17

http://kunskapsbaren.se 17

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en Presentation Transcript

    • STOCKHOLM 14 APRIL, 2011
    • VAD KAN MAN GÖRA MED SCALA SOM MAN INTEKAN GÖRA MED JAVA?
    • VAD KAN MAN GÖRA MED JAVA SOM MAN INTEKAN GÖRA MED ASSEMBLER?
    • En vettigare fråga…VAD ÄR LÄTTARE ATT GÖRA MED SCALA ÄNMED JAVA?
    • 6Minns ni 1997?
    • 7Andra problem 1997…För svårt att programmera För många plattformarFör farligt att köra kod iwebbläsaren
    • 8Lösningen då:
    • 9Vilka problem har vi idag?För dålig produktivitet För svårt att underhålla kodKrav på parallellisering
    • 10Några kandidater…
    • 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)))
    • 12En ska bort...
    • 13 Saker att beakta• Verktygsstöd• Antal användare• ”Momentum”
    • 14Och en till...
    • 15 En typisk Java-klasspublic class Customer { private String firstName; private String lastName; public void setLastName(String lastName) { this.lastName = lastName; } public String getLastName() { Return lastName; } /.../}
    • 16 Motsvarande Ruby-klassclass Customer attr_accessor :firstName, :lastNameend
    • 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”);
    • 18 Dynamisk typningVariabler och fält har ingen typExempel (Ruby):product_number = ”VG-1296H”product_number = 14@parent = File.new(”C:”)@parent = Dad.new(”Homer”, ”Simpson”)
    • 19 Dynamiska språk - metaprogrammeringExempel från Ruby on Rails:class Customer < ActiveRecord::Baseendnew_one = Customer.newnew_one.first_name = ”Homer”new_one.last_name = ”Simpson”
    • 20 Öppna klasserOckså från Ruby on Rails:due_date = 5.days_from_nowHur är detta möjligt!? class Fixnum def days_from_now /.../ end end
    • 21”Ett nytt språk säger du...?”
    • 22”Kan du bara lägga till en feature i den här koden...” #:: ::-| ::-| .-. :||-:: 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"; #.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|
    • 23 Håller det i längden?class Customer < ActiveRecord::Baseendnew_one = Customer.newnew_one. ?
    • 24 Groovy + Grailsclass Customer { String firstName String lastName Integer age}newOne = new Customer();
    • 25 Skillnader mot Ruby on RailsGroovy är mycket mer likt JavaGroovy kan vara statiskt typatGrails är mer explicitGrails har betydligt bättre prestanda
    • 26Statisktypning
    • 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
    • Scalable language
    • 29 Smärtfri integration med Javaval formatter = new java.text.SimpleDateFormat()val thisIsAJavaString = ”You know all my methods!”
    • 30 Scala - ”type inference”val productNumber = ”VG-1296H”// följande rad ger fel!productNumber = 14val capitals = List(”Stockholm”, ”London”, ”Oslo”)// Jfr Java:// final List<String> countries =// Arrays.asList(”Japan”, ”Sweden”, ”UK”);
    • 31 Men...Är Scala så svårt egentligen?
    • 32 Exhibit 1class Customer(var firstName: String, var lastName: String, val birthDate: Date) { override def toString() = firstName + ” ” + lastName}
    • 33 Exhibit 1 – i Javapublic 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...
    • 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 */}
    • 35 Exhibit 2val books = List(”Coq Rouge”, ”Ulysses”, ”Papillon”, ”Pippi Långstrump”)books.foreach(println)val booksStartingWithP = books.filter(_.startsWith(”P”))
    • 36 Exhibit 2 – i JavaList<String> books = Arrays.asList(”CoqRouge”, ”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); }}
    • 37 Exhibit 3case 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))
    • Scala – en hybridScala är objektorienteratochfunktionellt
    • 39 Varför är detta bra? delat dataFunktioner förändrar inte tillståndDärför säkert att parallellisera dem
    • 40 Funktioner är värdenvar stringMatches = (s: String) => s.startsWith(”P”)if (stringMatches(”Palle”)) println(”matches”)books.filter(stringMatches)// anonym funktionbooks.filter(_.startsWith(”P”))
    • Funktionell stil uppmuntrasval är det vanliga – var undantagList, Set och Map normalt oföränderligaNästan allting returnerar ett värde!
    • 42 (Nästan) allting returnerar ett värdeval 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”)
    • 43 Stolen with pride...Actors – tämligen objektorienteratAPI för parallella systemSkamlös stöld från ErlangBygger på meddelanden mellan virtuella processer
    • Scalable language
    • TACK!