Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Scalaの

コンパイル速度の話

が聞きたいだろう
し、するつもりだ
VOYAGE GROUP 社内LT大会発表資料
自己紹介
• @kiris
• 以下略
今日の内容
どんなコードが

遅いのか?
なぜ遅いのか?
どう対処

するべきなのか?
もう一度言う
Scalaの

コンパイル速度の話

が聞きたいだろう
し、するつもりだ
準備はいいね?
Scalaコンパイルの

ベンチマークを

とってみた話
ベンチマーク環境
ハードウェア
• MacBook Pro Retina, 15-inch, Mid 2014
• 2.8 GHz Intel Core i7
• 16 GB 1600 MHz DDR3
ソフトウェア
• Mac OS X 10.9.5(13F34)
• Java v1.7.0_67 

HotSpot(TM) 64-Bit Server VM
• Scala v2.11.4
使用したツール
• svm
• 複数のScalaのバージョン切り替え
• avgtime
• D言語製のシンプルなベンチマークツール
• ruby
• Scalaのコードジェネレータとして
ベンチマーク内容
• コードジェネレートしたコードでベンチマーク
• avgtimeでscalacコマンドを10回実行
• 今日の業務時間中などに実施
ここで問題
コンパイルに何ミリ秒かかる?
class Class1
class Class2
class Class3
class Class4
class Class5
…
class Class2048
Slackに解答を

書いてみよう
答え
結果
• 平均: 8029ms
• 最小: 7459ms
• 最大: 9059ms
• ちなみに某Scalaプロジェクトは

2077 classのファイル
推移
0ms
4,000ms
8,000ms
12,000ms
16,000ms
20,000ms
1 2 4 8 16 32 64 128 256 512 1024 2048 4096
推移
0ms
4,000ms
8,000ms
12,000ms
16,000ms
20,000ms
1 2 4 8 16 32 64 128 256 512 1024 2048 4096
2.11.4 2.10.4 2.9.3 2.8.2 final
いろんなパターン

試してみた
ManyWhiteBoxMacros-01024
ManyBlackBoxMacros-01024
ManyMaps-01024
ManyImplicitConversions-01024
ManyAnonymousClasses-01024
ManyTraitsWithTheMethodMixin-01024
ManyImplicitParameters-01024
ManyImplicitValues-01024
ManyObjects-01024
ManyClasses-01024
ManyTraitsMixin-01024
ManyMethods-01024
ManyTypeParams-01024
0ms 10000ms 20000ms 30000ms 40000ms
遅くなる要因
• Implicitなどの型推論
• 無名クラスの大量生成(ラムダなども含む)
• マクロ ※特に遅い
詳細を探る
• -verboseオプション
• 各phaseのベンチマークがとれる
• typer(型付け) phaseにコストがかかる印象
• Javaプロファイラ
ではどう対処

するべきか?
金の弾丸
• 札束で殴る
• まず良いCPU、次にSSD
• これだけで大きく改善する
ツールに頼る
• fsc
• JVMの起動が遅い
• sbt
• インクリメンタルコンパイル
• 並列コンパイルも効果あるらしい
• IntelliJ IDEA
• コンパイル回数が圧倒的に減る
逆に考えるんだ
• ingress
• twitter
• sbt-musical
コードの最適化は

最終手段
最後におまけ
福音
Dottyめっちゃ早い
• オダスキー先生達が開発中の新Scalaコンパイラ
• 試したら2倍から3倍くらい早くなった
• まだ不完全なのであくまで目安で(́・ω・`)
• 既存のコンパイラの置換えになるかもまだ不明

More Related Content

Scalaのコンパイル速度の話が聞きたいだろうし、するつもりだ