言語アップデート -Scala編-

4,614 views

Published on

函数プログラミングの集い2011 in Tokyo の言語アップデートにおける発表スライドです。超高速でScalaの新し目の話題を提供することに特化してて、コードは少なめです。

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,614
On SlideShare
0
From Embeds
0
Number of Embeds
30
Actions
Shares
0
Downloads
32
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

言語アップデート -Scala編-

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

×