BCH8SX1622 開発セット 添付CDの使い方...5 1-4 コンパイル 【 コンパイル準備 】 本開発セットでは添付の「コンパイラー」でサンプルCソースプログラムをコンパイルし、H8SXマ
Scalaのコンパイル速度の話が聞きたいだろうし、するつもりだ
-
Upload
yoshiaki-iwanaga -
Category
Technology
-
view
13.756 -
download
5
description
Transcript of Scalaのコンパイル速度の話が聞きたいだろうし、するつもりだ
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
• sbt-musical
コードの最適化は最終手段
最後におまけ
福音
Dottyめっちゃ早い
• オダスキー先生達が開発中の新Scalaコンパイラ
• 試したら2倍から3倍くらい早くなった
• まだ不完全なのであくまで目安で(́・ω・`)
• 既存のコンパイラの置換えになるかもまだ不明