precogがソースコード公開した件

これ↓
https://github.com/precog/platform

Precogって何?誰?って思うかもしれませんが、Scala界隈では有名で、知らない人は、まず以前自分が書いたblog見てください

PrecogIOって会社に、Scalaのスゴイ人がいっぱいでヤバイ
こっちもprecogの話でてくる↓
northeast scala symposium 2013 の video を見た感想


このtweet↓

が、現時点で130くらいretweetされてることからも、すごい感じがします。

さて、なんでオープンソース化したのかはよくわかりませんが、ソースコード見てみると、かなり大部分を公開してる感じがします。
個人的には、northeast scala symposiumの話聞いていたり、(Precog社の人が主に開発して利用している)blueeyesというフレームワークソースコード読んでいて、公開されたものがそれに似ていたので、あまり驚きはなかったのですが、簡単に感想書いてみます。

  • まだ、Scala2.9系使ってる*1
  • もちろんnortheast scala symposiumのときに言っていた、akka, blueeyes, gll, sbt ,scalacheck, scalaz, shapeless, specs, spireは使ってる
  • Scalazは、全体的に使ってる(version 7.0.0)
    • core以外には、effectのモジュール使ってる。effectに依存してるのは、主にIOモナドを使うことが目的っぽい
    • それ以外(scalaz-concurrentや、scalaz-iterateeなど)は使ってない*2
    • Validation、scalazのEither、StreamT、Ordering、Monadなどが使われてる箇所多い
  • 使ってるspireのversion古い・・・(Scala2.9系を使っているからか)
  • gll https://github.com/djspiewak/gll-combinators *3は、予想通りquirrelという言語のパースで使われてる
    • なので、もちろん、Scala標準ライブラリのparser combinatorは使われていない*4
  • kafkaやzookeeperなども使ってるのか
  • 「blueeyesと似てる」と思ったのは、logがある程度多く仕込まれていたりする点や、(scalazやspireなどと比べて)細かいところが几帳面過ぎず、現実的に試行錯誤してるなぁー、というのが読み取れるようなところが
  • Precogのblogなどで散々書いてたのでこれも予想通りだが、mongodb使ってる*5
  • blueeyesと同様に、パフォーマンス必要なところ(?)などは、関数型にこだわっているわけではなく、一部Javaっぽい書き方もされている。
    • (パフォーマンスが理由かどうかはわからないが)たとえば、loggingなどにWriterモナドなどはつかっていない
  • okapiesさんが訳したCake Pattern: The Bakery from the Black Lagoonで言及されているような、cake patternが使われてる箇所がそれなりにあるので、興味のある人は読もう
  • 内容に関係ないですけど「yggdrasil」というモジュールがあって「え、なんて読むの・・・」と思いググったら、北欧神話に登場する1本の架空の木だそうです。命名が中二病っぽくていいですね(?)。gjallerhorn、ragnarok、muspelheimなど他の読み方が謎なものも大概は北欧神話みたいです
  • 一番コミットしてるのはdjspiewak、二番目がnuttycom

  • slf4s, logback, googleのguava, javax.mail, commons-io,jdbc, servlet, など、ある程度Javaのライブラリもそのまま使ってる部分もある
  • shapelessは使ってるけど、それほど多く使われてるわけではない*6
  • シリアライズやデシリアライズの仕組みが独自にやってるみたいで、分散処理の根幹に関わる部分だろうし、その辺読んでみると面白いかもしれない
  • パフォーマンステスト用のモジュールとか、フロントエンド(?)のモジュール(accountsやauthって名前ついてるやつなど)など、ほとんどの部分がこのリポジトリ1つにまとまってる感じがある
  • ソースコードを読んでるぶんには面白いけど、「一部をライブラリとして使う」というのは、無理そう


ダラダラと箇条書きでかいてみましたが、こんなところでしょうか。まだまだ読めてない部分あるので、やる気がでたらもっとじっくり読んでみます。みんなも読みましょう。cake patternやscalazに興味がある人は特に勉強になるとおもいます。あとは、分散処理とか言語処理系*7とか、そういうのに興味がある人にオススメ
(逆に、そういうのに興味がない人にとっては、結構ソースコード量多くてどこから読めばいいか分からなくて、ハードルが高いかもしれない)

*1:以前言ってたので知ってた

*2:scalaz-iterateeがboxing多すぎってdisってたので、ある意味予想通り

*3:djspiewakが作ってる、parser combinator library

*4:Scala標準ライブラリのparser combinatorは、Scalaz派閥などからは、それほど評判よくないです

*5:しかし、その部分のソースコード一部submoduleになってて、現状公開されてない?

*6:まぁそうりゃそうでしょうね・・・

*7:quirrelというモジュールが、独自言語のparserとcompiler、mimirというモジュールがそのoptimizer