言語アップデート -scala編-
Post on 20-Jun-2015
4.177 Views
Preview:
DESCRIPTION
TRANSCRIPT
言語アップデート– Scala 編-
水島 宏太
(@kmizu)
自己紹介
@kmizu http://twitter.com/kmizu
id:kmizushima
http://d.hatena.ne.jp/kmizushima
他称 Scala Bot Scala辻斬り
自称 Scala 辻ヒーラー
Scalaって何?
はおいといて
採用企業
TwitterLinkedIn
EDF Trading
Foursquare
Siemens
Novell
Amazon.com
VMWare
GridGain
Remember the Milk
...
最近のScala
最近過ぎるのも何なので2.9から
Scala 2.9
目玉機能
1. 並列コレクション
implicit parallelism
def psum[T:Numeric](t: Traversable[T]): T =
t.par.sum
コレクションのparメソッド呼ぶだけでOK
勝手に複数コアに処理を割り振ってくれる
N倍速(N=CPUコア数)になる程都合良くはない
何故?
タスクスケジューリングのためのオーバーヘッド
特に、内部的に待ち合わせが必要な処理
...
でも
並列化のための記述コストがほとんどかからない
⇒簡単に導入可能
注意点
不変コレクション and 副作用無しの処理が基本
⇒並列化されていることは「見えない」
可変コレクション or 副作用ありの処理
⇒並列化されていることが「見えて」しまう
並列化されない処理
コレクションの「前の要素の処理結果」を使って
処理を行う処理
foldLeft
foldRight
reduceLeft
reduceRight
...
とりあえず、使ってみませう
2. プロセス呼び出しライブラリ
Scalaの弱点(I/O,プロセス処理が面倒)の
一つが改善
import scala.sys.process._
"ls" run
たったこれだけ
リダイレクトも簡単
import scala.sys.process._
import java.io_
"ls" #> new File("hoge.txt") run
もちろんパイプ処理も
import scala.sys.process._
"ls" #| "sort" run
プロセスの標準出力の取得も簡単
import scala.sys.process._
val lsResult = Process("ls") !!
//lsResult: String
import scala.sys.process._
val lines = Process("ls") lines
// lines: Stream[String]
3. scala.Dynamic
導入に当たって意見が分かれた
何故?
Rubyのmethod_missingのようなものだから
型安全性を部分的に破壊できる
Scala的な思想にそぐわない
...
-Xexperimental付けた場合のみ有効
class MethodNamePrinter extends Dynamic {
def applyDynamic(name: String)(args: Any*): Any = {
println(
name + "(" + args.mkString(", ") + ") invoked"
)
}
}
val printer = new MethodNamePrinter
printer.foo // foo() invoked
printer.hoge // hoge() invoked
O/Rマッパーとかある種のDSLで有効
多用すべからず
2.9の新機能はこれくらいにして
Scala本家の最近の動向
2011前半: Typesafe社設立
Scalaの商用サポート
Scala IDE for Eclipse開発移管
「全部込み」パッケージの提供
+ 今のところScala + Akka + α
+ 将来的にはEclipse+ sbtが入る
(たぶん)
Typesafe(Scalaチームの方向)
2011/08/29 Scala 2.9.1 final
ポイント
REPLの起動が高速化
5倍くらい速くなった
7秒 -> 1秒(筆者環境)
元が遅かったという話も
コンパイルも高速化
1.5倍くらい
基本的にはメンテナンス
リリース
2.9.0とバイナリ互換
2011/09/13
Scala IDE for Eclipse
2.0.0 beta 10
sbtベースのビルド
マネージャ
セミコロン推論の表示
とか色々
Scala 2.9.1 finalベース
Scala IDE for Eclipse
は普通に使える子
↑昔は要らない子だった
だが
IntelliJ IDEA
の方が先を行ってる
言語横断のリファクタリング
Java -> Scala 変換
Import補完
Implicit conversion補完
...
最近のScala界の流れ
RESTful HTTPサービス
ライブラリの流行
(≠フレームワーク)
PartialFunctionの活用
Unfiltered
BlueEyes
not MVC
というかViewが無い
型クラスの流行
昔からScalaには
型クラス(相当)があった
あまり活用されて
なかった
Scala 2.8で
いくつか型クラスが入った
ここ1~2年で型クラス
を使ったライブラリが色々
Scalaz <- 型クラスライブラリ
sjson
...
More Functional
昔はScalaで手続き型
プログラミングしてる
ライブラリが多かった
最近のライブラリは
「More Functional」
副作用を可能な限り排除
オブジェクト(関数)合成
永続データ構造の活用
sbt (特に0.10系)
Specs2
Scalaz
Unfiltered
BlueEyes
宣伝(1)
通称コップ本 第二版 2011/09/27 発売予定
Scala 2.8対応+付録Scala 2.9記事(by @kmizu)
宣伝(2)
こんなキーワードにピンと来たら(ry
Cakeパターン, CONCEPTパターン, 限定継続
現場でのScala, Javaとの連携
top related