InfoQ に Scalazのcommiterの Rúnar Bjarnason さんが、ScalaDays2012のときにScalazなどについてインタビューをうけたのが、video付きで載ってます。*1
http://www.infoq.com/interviews/bjarnason-scalaz
最初、全部訳そうかと思ったけれど、ちょっとだけやってすぐに挫折したので、気になったところだけピックアップしつつ、自分の感想書くだけにします。
まず仕事についてのあたり
Rúnar Bjarnason is a software developer at Capital IQ, a global provider of data and analytics for financial professionals.
Capital IQ でググったら、サイトでてきましたが https://www.capitaliq.com/home.aspx これでいいんでしょうか?
ScalaとかHaskellとかF#で募集していたりするんですね。まぁやっぱり関数型言語 => 金融系 ってことでしょうか。
ちょっと話が逸れますが、そういえば他にも、 sjson 作ってたり、DSL in Action (日本語訳版 => ) という本出してたりする、Scala界隈で有名なdebasishg さんも、blogのところに
Debasish Ghosh is the chief technology evangelist at Nomura Research Institute Financial Technologies
って書いてあって思いっきり金融系ですね。
- In your work, you use Scala everyday?
- Yes, everyday
- Are you working on greenfield projects or integrating other projects? Do you have any problems interacting with people who are not familiar with functional programming?
- Yes, so I’m mostly doing, yes, greenfield projects There’s one big project that I’m working on, that’s totally greenfield; but at the end of the day, it’s supposed to interact with a larger application
毎日仕事でScala書いてるらしいです、素晴らしいですね。
I implemented the I/O monad; and I’m surprised how many people are using it because I just thought it might be handy to have and so I implemented it and stuck it in the library and now people are using it all over the place and it’s kind of interesting
IO monad について、「とりあえず実装してみただけなのに(?) 多くの人々が使うようになって驚いていてる」的な意味でいいんですかね?そんな経緯だったとは、ちょっと意外でした。
Haskellとの違いやMonadについて聞かれて、"that’s just a library issue; it’s not really a difference in the languages" (ライブラリの問題で本質的な言語としての違いではない) っていうこと言ってます。つまり、Haskellと違ってScalaの場合標準ライブラリには、MonadとかApplicativeとかFunctorの型クラスが入ってないけど、Scalazのように自分で実装すれば、同等のことができるので問題ないということだとおもいます。
個人的には、
「implicit parameterでtypeclassをエミュレートできるけど、Haskellと比べて何かしら根本的にやりづらい部分もあるのかなー」
とか思っていましたが、おもったより楽観的(?)というか、そのあたりはそれほど問題視していないらしいです。
ただ、大きな違いとして、1点だけ "laziness"(遅延評価) について挙げてます。
まぁそれはもっともなんですが、(よく言われるような?)
あたりは(遅延評価に比べれば)そんなに問題視してないんですかね?
次に
do you have any issues with Scala, anything that bugs you to see solved?
という質問に対して、いつくか挙げています
- I’d like type inference to be better
- I’d like to have kind variables; so I’d like to be able to talk about kinds in a way that is better than now and
- I’d like to be able to do a partial application of type constructors in a much more straight forward way
- もっと強力な型推論
- 値としてのkind(種)
- 型コンストラクタの部分適用
型推論が弱いっていうのは(他の関数型言語と比べれば)よくいわれることで、
など、まぁ挙げればきりがないです。*3
kind variables ってなんとなく言いたいことわかるけど、うまく説明できる自信がないので省きます(ぇ
最後の型コンストラクタの部分適用は、ちょうどこの前 @yuroyoro さんが blog で書いてたあれです。
Scalaにおける型パラメータの部分適用 について
これが、scalazのライブラリの中だと大量に出現してうざいので、もっと短く書けるようにしたい的な話ですね。
このあたりの型推論とか型コンストラクタの部分適用については、specs2の作者の @etorreborre さんも Iterator パターンの本質 の中で主張してましたね。
ただ、今挙げた3つの点に関しては、
I don’t have any major issues with Scala,
but these aren’t major complaints, these are just little annoyances; so I have to do a little more typing than I’d like in both senses of the word
と言っていて、そこまで大きな問題とは感じてないようです。
上記の3つの問題は*4よく聞く話として、個人的には、 Haskell だと typeclass の instance が deriving できるわけですが、少なくとも現状ScalaやScalazにその機能がない*5あたりとか気になるんですが、触れられてませんでした。あと、Haskell と比べた場合、最新の GHC 拡張とかわからないですけど、そのあたりで差がついてる(今後更に差がつく?)可能性がある気がするんですがどうなんでしょう。
他にも、ValidationやMonoidの説明や、マクロの話や、LensやComonadや、今書いてる functional programming in Scala の本の話など、色々話してます。そのあたりに興味ある人は、ぜひ全部読みましょう。
*1:ところで、公開されてからだいぶ経過してますが、InfoQさんこれ訳してくれないんでしょうか・・・
*2:ScalaでもIO型作ってみんながそれを使うようになればある程度可能だけれども、今のところ全然そういう文化や慣習がない
*3:やろうとしても、subtypingとかoverloadがあるので、そもそも他の関数型言語と同等のレベルまで型推論を強くできないらしい、という事情はありますが。けどやろうとすればもうちょっと強力にはできるらしいです
*4:どのくらい重要な問題かどうかは別として
*5:エミュレートしようとすればちょっとはできるのかもしれない (okomokさんのkenではやってる?)