Scalaのコンパイル速度の話が聞きたいだろうし、するつもりだ
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

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

  • 1 views
Uploaded on

Scala Compilerのベンチマークをとってみた ...

Scala Compilerのベンチマークをとってみた

https://github.com/kiris/scalac-benchmarks

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1
On Slideshare
1
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Scalaの コンパイル速度の話 が聞きたいだろう し、するつもりだ
  • 2. 自己紹介 • @kiris • 以下略
  • 3. 今日の内容
  • 4. どんなコードが 遅いのか?
  • 5. なぜ遅いのか?
  • 6. どう対処 するべきなのか?
  • 7. もう一度言う
  • 8. Scalaの コンパイル速度の話 が聞きたいだろう し、するつもりだ
  • 9. 準備はいいね?
  • 10. Scalaコンパイルの ベンチマークを とってみた話
  • 11. ベンチマーク環境
  • 12. ハードウェア • MacBook Pro Retina, 15-inch, Mid 2014 • 2.8 GHz Intel Core i7 • 16 GB 1600 MHz DDR3
  • 13. ソフトウェア • Mac OS X 10.9.5(13F34) • Java v1.7.0_67 HotSpot(TM) 64-Bit Server VM • Scala v2.11.4
  • 14. 使用したツール • svm • 複数のScalaのバージョン切り替え • avgtime • D言語製のシンプルなベンチマークツール • ruby • Scalaのコードジェネレータとして
  • 15. ベンチマーク内容 • コードジェネレートしたコードでベンチマーク • avgtimeでscalacコマンドを10回実行 • 今日の業務時間中などに実施
  • 16. ここで問題
  • 17. コンパイルに何ミリ秒かかる? class Class1 class Class2 class Class3 class Class4 class Class5 … class Class2048
  • 18. Slackに解答を 書いてみよう
  • 19. 答え
  • 20. 結果 • 平均: 8029ms • 最小: 7459ms • 最大: 9059ms • ちなみに某Scalaプロジェクトは 2077 classのファイル
  • 21. 推移 20,000ms 16,000ms 12,000ms 8,000ms 4,000ms 0ms 1 2 4 8 16 32 64 128 256 512 1024 2048 4096
  • 22. 推移 20,000ms 16,000ms 12,000ms 8,000ms 4,000ms 0ms 2.11.4 2.10.4 2.9.3 2.8.2 final 1 2 4 8 16 32 64 128 256 512 1024 2048 4096
  • 23. いろんなパターン 試してみた
  • 24. 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
  • 25. 遅くなる要因 • Implicitなどの型推論 • 無名クラスの大量生成(ラムダなども含む) • マクロ ※特に遅い
  • 26. 詳細を探る • -verboseオプション • 各phaseのベンチマークがとれる • typer(型付け) phaseにコストがかかる印象 • Javaプロファイラ
  • 27. ではどう対処 するべきか?
  • 28. 金の弾丸 • 札束で殴る • まず良いCPU、次にSSD • これだけで大きく改善する
  • 29. ツールに頼る • fsc • JVMの起動が遅い • sbt • インクリメンタルコンパイル • 並列コンパイルも効果あるらしい • IntelliJ IDEA • コンパイル回数が圧倒的に減る
  • 30. 逆に考えるんだ • ingress • twitter • sbt-musical
  • 31. コードの最適化は 最終手段
  • 32. 最後におまけ
  • 33. 福音
  • 34. Dottyめっちゃ早い • オダスキー先生達が開発中の新Scalaコンパイラ • 試したら2倍から3倍くらい早くなった • 既存のコンパイラの置換えになるかは不明