Download - これまでのScala これからのScala (20100904 Scala座#01 )

Transcript
Page 1: これまでのScala これからのScala (20100904 Scala座#01 )

これまでのScala

これからのScala

12010/09/04Scala座 #01

2010年9月4日土曜日

Page 2: これまでのScala これからのScala (20100904 Scala座#01 )

ID:yuroyoroゆろよろ

2

自己紹介

2010年9月4日土曜日

Page 3: これまでのScala これからのScala (20100904 Scala座#01 )

Scalaの普及活動してまう

•CodeZineで記事書いたり

•Scala発火村やったり

•本も書いてるとこで。

3

2010年9月4日土曜日

Page 4: これまでのScala これからのScala (20100904 Scala座#01 )

今日のおはなし

•これまで編✓ Scalaって?

✓ Scala Way✓ 事例的なアレ

•これから編✓ 2.8についてkwsk

✓ Beyond 2.8

4

2010年9月4日土曜日

Page 5: これまでのScala これからのScala (20100904 Scala座#01 )

これまで編

5

2010年9月4日土曜日

Page 6: これまでのScala これからのScala (20100904 Scala座#01 )

Scalaって?

2010年9月4日土曜日

Page 7: これまでのScala これからのScala (20100904 Scala座#01 )

JVM上で動作する、

オブジェクト指向 + 関数型の

静的型付けである、

ハイブリッド言語

by Maartin Odersky

2010年9月4日土曜日

Page 8: これまでのScala これからのScala (20100904 Scala座#01 )

オブジェクト指向

+

関数型

ハイブリッド言語

8

2010年9月4日土曜日

Page 9: これまでのScala これからのScala (20100904 Scala座#01 )

「大事なことなので

2回言いました」

9

2010年9月4日土曜日

Page 10: これまでのScala これからのScala (20100904 Scala座#01 )

クラスファイルを生成して

JVMで動作する

JVMscalaのソースをコンパイルするとclassファイルが生成される

コンパイル

.scala.scala

.scala.class

war

.scala.class

scalaLibrary.jar

2010年9月4日土曜日

Page 11: これまでのScala これからのScala (20100904 Scala座#01 )

「Javaとどう違うのん?」

2010年9月4日土曜日

Page 12: これまでのScala これからのScala (20100904 Scala座#01 )

Less typingを目指した言語仕様

2010年9月4日土曜日

Page 13: これまでのScala これからのScala (20100904 Scala座#01 )

型推論

scala> val list = List("foo","bar","baz")list: List[java.lang.String] = List(foo, bar, baz)

2010年9月4日土曜日

Page 14: これまでのScala これからのScala (20100904 Scala座#01 )

ファーストクラス関数と

クロージャ

scala> list map{ s => s * 2 }

res6: List[String] = List(foofoo, barbar, bazbaz)

2010年9月4日土曜日

Page 15: これまでのScala これからのScala (20100904 Scala座#01 )

パターンマッチ

scala> list.headOption match{ ¦ case Some( s ) => s * 2 ¦ case None => "" ¦ }res9: String = foofoo

2010年9月4日土曜日

Page 16: これまでのScala これからのScala (20100904 Scala座#01 )

traitによるMix-in

scala> case class Person(name:String,age:Int) extends ¦ Ordered[Person]{ ¦ def compare(that:Person) = ¦ if(name.compare(that.name) == 0) ¦ age.compare(that.age) ¦ else name.compare(that.name)defined class Person

scala> Person("ozaki",18) > Person("ozaki",20)res4: Boolean = false

2010年9月4日土曜日

Page 17: これまでのScala これからのScala (20100904 Scala座#01 )

Read-Eval-Print Loop

対話型評価環境

17

2010年9月4日土曜日

Page 18: これまでのScala これからのScala (20100904 Scala座#01 )

すぐに動作確認できる

18

2010年9月4日土曜日

Page 19: これまでのScala これからのScala (20100904 Scala座#01 )

REPL

2010年9月4日土曜日

Page 20: これまでのScala これからのScala (20100904 Scala座#01 )

すぐに動作確認できる

20

2010年9月4日土曜日

Page 21: これまでのScala これからのScala (20100904 Scala座#01 )

「大事なことなので(ry」

21

2010年9月4日土曜日

Page 22: これまでのScala これからのScala (20100904 Scala座#01 )

テスト書く → REPLで確認

コード書く

テストする ←

「サイクルがLL」

2010年9月4日土曜日

Page 23: これまでのScala これからのScala (20100904 Scala座#01 )

Specs

"A full stack"->-(fullStack) should {

behave like "A non-empty stack below full capacity"

"throw an exception when sent #push" in {

stack.push(11) must throwAn[Error]

}

}

2010年9月4日土曜日

Page 24: これまでのScala これからのScala (20100904 Scala座#01 )

TDDと黄金の回転

24by @t_wada2010年9月4日土曜日

Page 25: これまでのScala これからのScala (20100904 Scala座#01 )

「ScalaはLLですからっ!!(キリッ」

2010年9月4日土曜日

Page 26: これまでのScala これからのScala (20100904 Scala座#01 )

Scalaのコードはこんな感じ

2010年9月4日土曜日

Page 27: これまでのScala これからのScala (20100904 Scala座#01 )

27

Hashtag検索import scala.xml._

import scala.io.Source

object HashTagSearch {

def main( args:Array[String] ){ val url =

"http://search.twitter.com/search.atom?q=%s".format( args.head )

XML.load( new java.net.URL( url ) ) \\ "entry" map{ e =>

"%s:%s" format( e \\ "author" \\ "name" text , e \\ "content" text)

} foreach{ println }

}

}2010年9月4日土曜日

Page 28: これまでのScala これからのScala (20100904 Scala座#01 )

28

OneLinerにしてみた

scala.xml.XML.load(new java.net.URL

("http://search.twitter.com/

search.atom?q=scalaza01")) \\ "entry"

map{e => "%s:%s" format(e \\ "author"

\\ "name" text,e \\ "content" text)}

foreach{ println }

2010年9月4日土曜日

Page 29: これまでのScala これからのScala (20100904 Scala座#01 )

Scala Way

2010年9月4日土曜日

Page 30: これまでのScala これからのScala (20100904 Scala座#01 )

関数型的にも

手続き的にも

30

2010年9月4日土曜日

Page 31: これまでのScala これからのScala (20100904 Scala座#01 )

valとvar

31

2010年9月4日土曜日

Page 32: これまでのScala これからのScala (20100904 Scala座#01 )

immutableとmutable

32

2010年9月4日土曜日

Page 33: これまでのScala これからのScala (20100904 Scala座#01 )

高階関数とfor/while

33

2010年9月4日土曜日

Page 34: これまでのScala これからのScala (20100904 Scala座#01 )

パターンマッチとif/else

34

2010年9月4日土曜日

Page 35: これまでのScala これからのScala (20100904 Scala座#01 )

Optionとnull

35

2010年9月4日土曜日

Page 36: これまでのScala これからのScala (20100904 Scala座#01 )

手続き型から

関数型へ

36

2010年9月4日土曜日

Page 37: これまでのScala これからのScala (20100904 Scala座#01 )

ケーススタディ01

Charの出現回数の

カウント

37

2010年9月4日土曜日

Page 38: これまでのScala これからのScala (20100904 Scala座#01 )

手続き型的に書いてみると

def countChar(s:String,c:Char) = { var cnt = 0 for( x <- s ){ if( x == c ) cnt = cnt + 1 } cnt}

2010年9月4日土曜日

Page 39: これまでのScala これからのScala (20100904 Scala座#01 )

「すごく…ダサいです…。」

39

2010年9月4日土曜日

Page 40: これまでのScala これからのScala (20100904 Scala座#01 )

関数型では…

40

2010年9月4日土曜日

Page 41: これまでのScala これからのScala (20100904 Scala座#01 )

入出力をリストで

考える

41

2010年9月4日土曜日

Page 42: これまでのScala これからのScala (20100904 Scala座#01 )

コレクションのfor

ローカル変数のvar

42

2010年9月4日土曜日

Page 43: これまでのScala これからのScala (20100904 Scala座#01 )

高階関数に

変換可能

43

2010年9月4日土曜日

Page 44: これまでのScala これからのScala (20100904 Scala座#01 )

関数型的に書いてみると

def countChar(s:String,c:Char) = s filter{ c == } size

2010年9月4日土曜日

Page 45: これまでのScala これからのScala (20100904 Scala座#01 )

45

•入力 = Charのリスト

•出力 = リストのうち、charに該当するものを抽出したリストのサイズ

2010年9月4日土曜日

Page 46: これまでのScala これからのScala (20100904 Scala座#01 )

「すごく…短いです…。」

46

2010年9月4日土曜日

Page 47: これまでのScala これからのScala (20100904 Scala座#01 )

ケーススタディ02

簡易cat

47

2010年9月4日土曜日

Page 48: これまでのScala これからのScala (20100904 Scala座#01 )

手続き型的に書いてみると

def cat(name:String) = {

val f = new JFile(name)

if(f.exists && f.isFile)

Source.fromFile(f).mkString

else

"No such file : %s" format(name)

}

2010年9月4日土曜日

Page 49: これまでのScala これからのScala (20100904 Scala座#01 )

関数型とオブジェクト指向の

エッセンスを

49

2010年9月4日土曜日

Page 50: これまでのScala これからのScala (20100904 Scala座#01 )

ケースクラス

Option

パターンマッチ

50

2010年9月4日土曜日

Page 51: これまでのScala これからのScala (20100904 Scala座#01 )

ケースクラスの導入

abstract class Path

case class File(name:String,file:JFile) extends Path

case class Dir(name:String,file:JFile) extends Path

2010年9月4日土曜日

Page 52: これまでのScala これからのScala (20100904 Scala座#01 )

Optionの導入

def file(name:String) = new JFile(name) match {

case f if f.exists && f.isFile => Some(File(name,f))

case f if f.exists && f.isDirectory => Some(Dir(name,f))

case _ => None

}

2010年9月4日土曜日

Page 53: これまでのScala これからのScala (20100904 Scala座#01 )

パターンマッチにしてみる

def cat(name:String) = path(name) collect {

case File(name,f) => Source.fromFile(f).mkString

case Dir(name,f) => "%s is directory" format(name)

} getOrElse("No such file : %s" format(name))

2010年9月4日土曜日

Page 54: これまでのScala これからのScala (20100904 Scala座#01 )

「長くなってね?」

54

2010年9月4日土曜日

Page 55: これまでのScala これからのScala (20100904 Scala座#01 )

WARNING:

仕様変更発生

55

2010年9月4日土曜日

Page 56: これまでのScala これからのScala (20100904 Scala座#01 )

「行番号つけて♥」

56

2010年9月4日土曜日

Page 57: これまでのScala これからのScala (20100904 Scala座#01 )

「grepも作って♥」

57

2010年9月4日土曜日

Page 58: これまでのScala これからのScala (20100904 Scala座#01 )

ケーススタディ03

簡易grep

58

2010年9月4日土曜日

Page 59: これまでのScala これからのScala (20100904 Scala座#01 )

手続き型的に書いてみると

def grep(name:String,pattern:String) =

“もうマンドクセ”

2010年9月4日土曜日

Page 60: これまでのScala これからのScala (20100904 Scala座#01 )

traitを導入

60

2010年9月4日土曜日

Page 61: これまでのScala これからのScala (20100904 Scala座#01 )

テキストを持つtraittrait Text {

val content:String

val name:String

def formatLine( n:Int,s:String) =

"%s:%3d:%s" format (name, n+1, s)

def withLineNumber = content.lines.zipWithIndex

def formatWithLineNumber =

withLineNumber.map{ case (s,n) => formatLine(n,s)}

}

2010年9月4日土曜日

Page 62: これまでのScala これからのScala (20100904 Scala座#01 )

行番号付きでcatするtrait

trait Cat extends Text{

def cat = formatWithLineNumber foreach{ println }

}

2010年9月4日土曜日

Page 63: これまでのScala これからのScala (20100904 Scala座#01 )

grepするtrait

trait Grep extends Text {

def grep(pattern:String) = {

val r = pattern.r

withLineNumber collect{

case (s,n) if r.findAllIn(s).nonEmpty =>

formatLine(n,s)

} foreach{ println }

}

}

2010年9月4日土曜日

Page 64: これまでのScala これからのScala (20100904 Scala座#01 )

traitをケースクラスにabstract class Path {

def cat:Unit

def grep(pattern:String):Unit

}

case class File(name:String,file:JFile) extends Path with Cat with Grep{

val content = Source.fromFile(file).mkString

}

case class Dir(name:String,file:JFile) extends Path {

def cat = file.list.foreach{ println } def grep(pattern:String) = file.list.map{ s => path(name+“/”+s) }.

toSeq.flatten.foreach{ f => f.grep(pattern) }

}

2010年9月4日土曜日

Page 65: これまでのScala これからのScala (20100904 Scala座#01 )

WARNING:

仕様変更発生

65

2010年9月4日土曜日

Page 66: これまでのScala これからのScala (20100904 Scala座#01 )

「URLからcat/grepしたい♥」

66

2010年9月4日土曜日

Page 67: これまでのScala これからのScala (20100904 Scala座#01 )

ケースクラスを追加でおk

case class URL(name:String) extends

Path with Cat with Grep{

val content =

Source.fromURL(new java.net.URL(name)).mkString

}

2010年9月4日土曜日

Page 68: これまでのScala これからのScala (20100904 Scala座#01 )

ケーススタディ04

untilを作ってみる

68

2010年9月4日土曜日

Page 69: これまでのScala これからのScala (20100904 Scala座#01 )

def until( p: => Boolean)(f: => Unit) = while( !p ) f

p : 条件

f : 繰り返す処理

2010年9月4日土曜日

Page 70: これまでのScala これからのScala (20100904 Scala座#01 )

制御構文のように見えるscala> var cnt = 0

cnt: Int = 0

scala> until(cnt > 5 ){ println(cnt);cnt = cnt + 1 }

0

1

2

3

4

5

2010年9月4日土曜日

Page 71: これまでのScala これからのScala (20100904 Scala座#01 )

ケーススタディ05

#librahack

71

2010年9月4日土曜日

Page 72: これまでのScala これからのScala (20100904 Scala座#01 )

import com.yuroyoro.util.net._

object LibraHack {

def crawl( keyword:Sting) = {

val qs = "hidKensakuF=1&Page=1&lang=jpn&sel1=1&key1=%s&sel2=2&key2=&sel3=3&key3=&sel4=4&key4=&andor=0&SortKubun=1&isbn=&bookz=1&taiz=1&year-from=&year-to=&GengoKubun=no" format( encodeURL(keyword) )

val res = new HttpConnection( "http://www.library.okazaki.aichi.jp/tosho/asp/Book_Kensaku_g.asp").

method(HttpPost).

param( "Accept" -> "application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5").

param( "User-Agent" -> "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; ja-jp) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8").

param( "Content-Length" -> qs.length.toString ).

body( qs ).

asSource

}

}

2010年9月4日土曜日

Page 73: これまでのScala これからのScala (20100904 Scala座#01 )

タイーホされるので

ここまでです

73

2010年9月4日土曜日

Page 74: これまでのScala これからのScala (20100904 Scala座#01 )

事例的なアレ

2010年9月4日土曜日

Page 75: これまでのScala これからのScala (20100904 Scala座#01 )

「どこかつかってんの?」

2010年9月4日土曜日

Page 76: これまでのScala これからのScala (20100904 Scala座#01 )

‣Twitter‣FourSquare‣LinkedIn‣Novel Pulse‣Électricité de France Trading

‣Xebia‣XMPie(Xerox)‣Sony Pictures Imageworks

‣Siemens‣GridGain‣AppJet‣Reaktor‣Triental‣Sygneca‣HD Holdings‣SAIC Mimesis Republic

‣WattsOn

2010年9月4日土曜日

Page 77: これまでのScala これからのScala (20100904 Scala座#01 )

2010年9月4日土曜日

Page 78: これまでのScala これからのScala (20100904 Scala座#01 )

みんな大好きついったーもScalaで動いてます

2010年9月4日土曜日

Page 79: これまでのScala これからのScala (20100904 Scala座#01 )

ついったーのバックエンドはScalaがいっぱい

2010年9月4日土曜日

Page 80: これまでのScala これからのScala (20100904 Scala座#01 )

Kestrel memcacheを話す分散メッセージキュー

Gizzard 分散DBのためのsharding framework

2010年9月4日土曜日

Page 81: これまでのScala これからのScala (20100904 Scala座#01 )

Twitter Streaming API Architecture http://www.slideshare.net/jkalucki/chirp-2010streamingapiarchpost

Streaming APIのbackend

2010年9月4日土曜日

Page 82: これまでのScala これからのScala (20100904 Scala座#01 )

2010年9月4日土曜日

Page 83: これまでのScala これからのScala (20100904 Scala座#01 )

2010年9月4日土曜日

Page 84: これまでのScala これからのScala (20100904 Scala座#01 )

84

2010年9月4日土曜日

Page 85: これまでのScala これからのScala (20100904 Scala座#01 )

Lift Web Framework

2010年9月4日土曜日

Page 86: これまでのScala これからのScala (20100904 Scala座#01 )

‣ フルスタック

‣ ajax/cometサポート

‣ view firstなアプローチ

2010年9月4日土曜日

Page 87: これまでのScala これからのScala (20100904 Scala座#01 )

PHPからScala/Liftへ3ヶ月で移行

2010年9月4日土曜日

Page 88: これまでのScala これからのScala (20100904 Scala座#01 )

CodeZineに記事書いたのでそちらを

2010年9月4日土曜日

Page 89: これまでのScala これからのScala (20100904 Scala座#01 )

これから編

89

2010年9月4日土曜日

Page 90: これまでのScala これからのScala (20100904 Scala座#01 )

2.8についてkwsk

2010年9月4日土曜日

Page 91: これまでのScala これからのScala (20100904 Scala座#01 )

2010/07/15Scala 2.8.0 final正式リリース

2010年9月4日土曜日

Page 92: これまでのScala これからのScala (20100904 Scala座#01 )

‣package object

‣名前付き/デフォルトパラメータ

‣コレクションライブラリ再設計

‣@specializeによる最適化

2010年9月4日土曜日

Page 93: これまでのScala これからのScala (20100904 Scala座#01 )

‣限定継続サポート

‣末尾再帰最適化

‣break/continue‣ScalaSwingをblushup

‣REPLが便利に

‣implicitの解決を最適化

‣XML,Actorに機能追加

…etc

2010年9月4日土曜日

Page 94: これまでのScala これからのScala (20100904 Scala座#01 )

名前付き/デフォルトパラメータ

scala> def foo( s:String = "hoge" , n:Int = 1 ) =

¦ println("%s:%2d" format(s,n))

foo: (s: String,n: Int)Unit

scala> foo()

hoge: 1

scala> foo("aaa")

aaa: 1

scala> foo(n = 3 )

hoge: 3

scala> foo(n = 5 , s = "bar")

bar: 5

引数省略

第2引数省略

名前付きで呼び出し

2010年9月4日土曜日

Page 95: これまでのScala これからのScala (20100904 Scala座#01 )

scala> case class 彼女(firstName:String,lastName:String,age:Int)

defined class 彼女

scala> val nene = 彼女(" 姉ヶ崎","寧々",18)

nene: 彼女 = 彼女(姉ヶ崎,寧々,18)

scala> val 俺の嫁 = nene.copy( firstName = "尾崎")

俺の嫁: 彼女 = 彼女(尾崎,寧々,18)

ケースクラスのcopy (2.8で追加)

2010年9月4日土曜日

Page 96: これまでのScala これからのScala (20100904 Scala座#01 )

コレクションライブラリ再設計

✓ほとんどのAPIがtraitに✓Traversable,Iterable

✓mapなどが元の型を保持するようになった

✓collect/scanLeftなど便利なAPIが追加された

2010年9月4日土曜日

Page 97: これまでのScala これからのScala (20100904 Scala座#01 )

scala> Map("a" -> 1, "b" -> 2 ,"c" -> 3).map{ case (k,v) => (k*2,v*2) }

res1: Iterable[(String, Int)] = ArrayBuffer((aa,2), (bb,4), (cc,6))

2.7まで

scala> Map("a" -> 1, "b" -> 2 ,"c" -> 3).map{ case (k,v) => (k*2,v*2) }

res12: scala.collection.immutable.Map[String,Int] = Map((aa,2), (bb,4), (cc,6))

2.8

2010年9月4日土曜日

Page 98: これまでのScala これからのScala (20100904 Scala座#01 )

scala> val l = Seq("foo","bar","baz")

l: Seq[java.lang.String] = List(foo, bar, baz)

scala> l collect{ case s if s.startsWith("b") => s * 2 }

res14: Seq[String] = List(barbar, bazbaz)

TraversableLike#collect[B](pf: PartialFunction[A, B]): Seq[B]

PartialFunctionを利用してfilterとmapをまとめて行うようなもの

2010年9月4日土曜日

Page 99: これまでのScala これからのScala (20100904 Scala座#01 )

scala> l.scanLeft("hoge"){ (b,a) => "%s:%s" format (a,b) }

res31: Seq[java.lang.String] = List(hoge, foo:hoge, bar:foo:hoge, baz:bar:foo:hoge)

scala> (1 to 10).scanLeft(0){ (b,a) => b + a }

res36: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55)

TraversableLike#scanLeft[B, That](z: B)(op: (B, A) => B)(implicit bf: CanBuildFrom[Seq[A], B, That]): That

foldLeftのようにそれまでの計算結果をもとにリストを生成する

イメージ的にfoldLeft + map

2010年9月4日土曜日

Page 100: これまでのScala これからのScala (20100904 Scala座#01 )

Package object

✓packageにメソッドや変数を定義できる

✓package毎にPreDefを定義できる

✓package objectの定義はpackage内部のどこからでも参照できる

✓Pythonの__init__.pyに近い?

2010年9月4日土曜日

Page 101: これまでのScala これからのScala (20100904 Scala座#01 )

package com.yuroyoro.util

package object net {

type URL = java.net.URL

type HttpConnection =

java.net.HttpURLConnection

def queryStrings[A,B]( params:(A,B) *) =

params.map{ case ( k, v ) =>

"%s=%s" format(k,v) }.toList.mkString("&")

}

2010年9月4日土曜日

Page 102: これまでのScala これからのScala (20100904 Scala座#01 )

scala> import com.yuroyoro.util.net._

import com.yuroyoro.util.net._

scala> queryStrings( "foo" -> "hoge","bar" -> "fuga")

res0: String = foo=hoge&bar=fuga

2010年9月4日土曜日

Page 103: これまでのScala これからのScala (20100904 Scala座#01 )

@specializeによる最適化

✓プリミティブ型に対するboxing/unboxingを回避

✓@specializeが付与されたパラメータは、プリミティブ型をとるメソッド等がオーバーライドされて生成される

2010年9月4日土曜日

Page 104: これまでのScala これからのScala (20100904 Scala座#01 )

class Cell[@specialized(Int) A](var v:A ){

def apply:A = v

def update(x:A) = v = x

}

2010年9月4日土曜日

Page 105: これまでのScala これからのScala (20100904 Scala座#01 )

public class Cell extends java.lang.Object implements scala.ScalaObject{

public java.lang.Object v;

public java.lang.Object v();

public void v_$eq(java.lang.Object);

public java.lang.Object apply();

public void update(java.lang.Object);

public int v$mcI$sp();

public void v$mcI$sp_$eq(int);

public int apply$mcI$sp();

public void update$mcI$sp(int);

public boolean specInstance$();

public Cell(java.lang.Object);

}

int専用の定義が生成されてる

2010年9月4日土曜日

Page 106: これまでのScala これからのScala (20100904 Scala座#01 )

Beyond 2.8

2010年9月4日土曜日

Page 107: これまでのScala これからのScala (20100904 Scala座#01 )

2010/9 - 2010/10Scala 2.8.1

小規模なBugfix

2010年9月4日土曜日

Page 108: これまでのScala これからのScala (20100904 Scala座#01 )

GitHub

mirrorができましたhttp://github.com/scala/

scala

2010年9月4日土曜日

Page 109: これまでのScala これからのScala (20100904 Scala座#01 )

2010/12 - 2011/1Scala 2.9

2010年9月4日土曜日

Page 110: これまでのScala これからのScala (20100904 Scala座#01 )

Parallel collection

2010年9月4日土曜日

Page 111: これまでのScala これからのScala (20100904 Scala座#01 )

‣並列処理可能なcollection

‣2.8のcollection APIと互換

‣従来のcollectionは1コアしか

使わない

‣Parallel collectionはコア数で

スケール

‣nightly buildには入ってる

2010年9月4日土曜日

Page 112: これまでのScala これからのScala (20100904 Scala座#01 )

http://www.scala-lang.org/node/7285

2010年9月4日土曜日

Page 113: これまでのScala これからのScala (20100904 Scala座#01 )

Scala 3.0

2010年9月4日土曜日

Page 114: これまでのScala これからのScala (20100904 Scala座#01 )

mdd support

2010年9月4日土曜日

Page 115: これまでのScala これからのScala (20100904 Scala座#01 )

すいません

2010年9月4日土曜日

Page 116: これまでのScala これからのScala (20100904 Scala座#01 )

Scala 3.0 could include: unification of tuples + function args, better

type inference, union types

Virtual classes still on the "research" roadmap, but has no owner

Multimethods: definitely a research project. Unlikely to happen, unless someone implements it and nothing breaks.

@jorgescala

2010年9月4日土曜日

Page 117: これまでのScala これからのScala (20100904 Scala座#01 )

Virtual Class ?MultiMethods ?

2010年9月4日土曜日

Page 118: これまでのScala これからのScala (20100904 Scala座#01 )

よくわかんないので誰か教えてください

2010年9月4日土曜日

Page 119: これまでのScala これからのScala (20100904 Scala座#01 )

- A.D 2010

時代はマルチコアコア数を使い切らないアプリケーションは

パフォーマンスが頭打ちになる

2010年9月4日土曜日

Page 120: これまでのScala これからのScala (20100904 Scala座#01 )

そこで並行プログラミング

Message Passing = Actor

そしてParallel collection

2010年9月4日土曜日

Page 121: これまでのScala これからのScala (20100904 Scala座#01 )

Scalaは

マルチコア時代を見据えて進化していく…

2010年9月4日土曜日

Page 122: これまでのScala これからのScala (20100904 Scala座#01 )

まとめ

2010年9月4日土曜日

Page 123: これまでのScala これからのScala (20100904 Scala座#01 )

型安全で

2010年9月4日土曜日

Page 124: これまでのScala これからのScala (20100904 Scala座#01 )

LLのようにさくさくと

2010年9月4日土曜日

Page 125: これまでのScala これからのScala (20100904 Scala座#01 )

オブジェクト指向で

2010年9月4日土曜日

Page 126: これまでのScala これからのScala (20100904 Scala座#01 )

関数型で

2010年9月4日土曜日

Page 127: これまでのScala これからのScala (20100904 Scala座#01 )

マルチコア時代に適応した

2010年9月4日土曜日

Page 128: これまでのScala これからのScala (20100904 Scala座#01 )

簡潔に書ける言語

2010年9月4日土曜日

Page 129: これまでのScala これからのScala (20100904 Scala座#01 )

それがScala

2010年9月4日土曜日

Page 130: これまでのScala これからのScala (20100904 Scala座#01 )

ご清聴ありがとうございました!

2010年9月4日土曜日