『Scalaスケーラブルプログラミング第3版』読了

- 作者: Martin Odersky,Lex Spoon,Bill Venners,羽生田栄一,水島宏太,長尾高弘
- 出版社/メーカー: インプレス
- 発売日: 2016/09/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
読了しました。いわゆるコップ本。手を動かした結果は以下のレポジトリに置きました。
注意点
まず最初に手を動かすにあたっての注意点が1つ。 2.12.8 ではパーザコンビネータとSwingに関しては別ライブラリを追加する必要がありました。 過去のバージョンでは標準ライブラリとして添付されていたものが分離したようです。
$ scala -version Scala code runner version 2.12.8 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
https://github.com/hkdnet/cup-book/blob/4c855822a4711b2677507f0018f240a43eb1c28d/build.sbt#L14-L15
// build.sbt libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2" libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "2.1.1"
感想
Scala 面白いですね。強力な言語だなーと思いました。
特に言語機能として面白いのは implicit ですかね。最初見たときはこれなにが起きてるかわけがわからんのでは……と思ったのですが、4つのリーズナブルな制約のもとでならそんなに変なことにならなそうでした。import
をどこにでもかけてそれがレキシカルに参照されるので、読んだ当初は Ruby の refinements っぽいなーという気持ちになりました1。
あと trait に、「これを継承するなら継承するやつはこの型でなければならない」ということを明示できるのは面白かった。
PFDSやTaPLをやんわり読んでいるおかげでかなりスッと腹落ちしやすかったという感じはあります。純粋関数型の Deque とか出てくるし。償却時間とか言い出すし。共変・反変、Top/Bot あたりも出てくるし2。学んだことが別の本に出てくると嬉しいですね。

- 作者: Chris Okasaki,稲葉一浩,遠藤侑介
- 出版社/メーカー: KADOKAWA
- 発売日: 2017/04/28
- メディア: 単行本
- この商品を含むブログ (1件) を見る

- 作者: Benjamin C. Pierce,住井英二郎,遠藤侑介,酒井政裕,今井敬吾,黒木裕介,今井宜洋,才川隆文,今井健男
- 出版社/メーカー: オーム社
- 発売日: 2013/03/26
- メディア: 単行本(ソフトカバー)
- クリック: 68回
- この商品を含むブログ (11件) を見る
一方でなんかちょっと深入りしてないトピックもありそうでした。上述の variance の +
-
を書けるところのルールとかはかなり難しそうですし。あとパス依存型もさっと出てきて引っ込んでいったのであまりよくわかっていない。パス依存型のほうは言われて気づいたのでそういえばよくわからねえな、くらいのわかってなさです。
コップ本を20章まで読み終わったんだけど、variance annotationsとpath-dependent typeはこの本だけではちょっと理解仕切れないな。。
— y.kaneko (@spikeolaf) May 4, 2019
あとコレクションを自前実装するところ、制約が多くて実装者に知識を要求するなーという印象。まあいくつかの triat を無視しててもあとで必要になったときに実装すればいいのかもですが。
もともと Scala 学習のモチベは elasticmq のソースを読むところだったのですがそっちは全然手がついてません。たぶんこの本では触れられてなかったトピックとして、 Akka とかのことを知る必要がありそう。
elasticmq を読むモチベは仕事で使うからだったのですが、まあなんやかんやあって仕事で使わなくなったのでこの先学習するかはまた気分次第ですね。 別件でCコンパイラとかやってたらCPUの気持ちが知りたくなってきたのでまた別の分野に手を出すかもしれません。