2010年11月14日

Scalaってホントに来るかなぁ

最近、自宅で軽い処理を書くときはScalaを使っている。そろそろScalaをメインの言語として使うようにしてみようか、という想いも抱くようになってきた。

使っている人たちの評判もいいし、記述量は確かに減るし、いろんな概念が組み込まれているので書いていて勉強になるし、機能不足で困ることもない。

Scalaの特徴をまとめると、こんな感じだろうか。まだ学習中だから間違ってる部分もありそうだけど。



・記述量が少なくて済む

Javaの半分のコード量で書ける、というのがScalaの売り。実際に書いてるとものによっては半分以下になる場合もある。これは一般的なスクリプト言語と比べても、それほど差がない。

※参考 本当に Scala は Java の半分のコーディング量で済むのか?
http://d.hatena.ne.jp/itoasuka/20091007/1254884868

おまけに関数型的な書き方もできる。いや、オマケではなくてこっちがメインか。とりあえず「強力な」という枕詞が使えそうな書き方をいくつも用意しているので、書いていて気分が良いものではある。

ただ、八方美人というか、ちゃんぽんというか、「Scala的」という概念はあると思うのだけど、自分の学習が追いつかない部分もあって、何やら「混合物」的なソースが出来上がってしまうことが多い。これは言語的にそういう性質を持っている部分もあると思う。ので、何かの宗教に入っている人には向かない一品かもしれない。

そういえばグイドはScalaはイマイチって言ってたような。確かにグイドの宗派とは相容れない感じはする。



・処理速度はそれなりに高速

記述が軽い割に処理速度が高速。下記のURLを見ると、Cが1.08、C++が1.09、Java6が1.72とすると、Scalaが2.04となっている。ちなみにGoが4.54、V8のJavaScrpiptが7.19、Pythonが47.52、Rubyが63.78。

※参考 Ubuntu : IntelR Q6600R one core Computer Language Benchmarks Game
http://shootout.alioth.debian.org/u32/which-programming-languages-are-fastest.php

まぁ、言語には得手不得手があるから内容によって速度は異なるけど、とりあえずスクリプト言語と比べれば音速になることは間違いない。

趣味で大容量データを扱うことが多いので(たまに億単位の行とか扱う)、スクリプト言語では処理時間的に辛い、けどC++はめんどくさいし、Javaも記述量が多くて面倒、なんて自分にとっては程よい選択肢だと思う。

まぁ、数秒で終わる処理はRubyとかPython使った方が楽だけど。



・Javaの機能がそのまま使える

「こういう機能が用意されてない」と感じることはほとんどない。だってJavaにあるから。呼び方も普通にimportしてnewすれば使えてしまう。

年齢の若いプログラミング言語にありがちな「あのDBMS使った時の挙動が云々」ということもあまり心配ない。用意されたDBの機能はJDBCのラッパーだし。JDBCに全幅の信頼を置いているわけではないけど、少なくとも運用実績は十分だと声を大にして言える。

まぁ、それに甘えてというか、Scala自体の機能は今ひとつ取り揃えが悪い気もしなくもない。この辺は流行って開発者が増えればきっと解消されると思う。



・IDEがちょいとイケてない

Eclipseのプラグインを使っているのだけど、コード補完が今ひとつだったり、コンパイラの呼び出しがちょっともたついたりと、あまり快適ではない。Build automaticallyのチェックは外すくらい快適ではない。

fscを直叩きした時よりも手間取っている感があるのだけど(かといってscalacするほど遅くもない)、何をやっているのだろう。

自分がまだScalaに十分に慣れていないというのもあるけど、Eclipseの性能差のせいでJavaの方が軽快に書けると感じる時もある。

Scalaが敬遠されるとしたら、コンパイルとCLASSPATHが面倒という話が多そうな気がするので、その辺を解決してくれるIDEの性能っていうのは、流行するかどうかに大きな影響がありそうだなぁと。

なんかいいIDEないかなぁ。今度、他のも試してみよう。



・知名度はまだ低い

TIOBEのランクによると、2010/11/13時点で50位。Prolog(44位)やErlang(45位)よりも下でした。ということで、Scala使いの数は現状ではあまり多くないことが想像されます。

※参考 TIOBE Programming Community Index for November 2010
http://www.tiobe.com/index.php/content/paperinfo/tpci/

これから徐々に順位を上げていくと思うけど、最終的にどの程度までいけるのか。Lua(22位)くらいか。それともPascal(15位)くらいか。Ruby(10位)くらいまでいける素養があるのか。

個人的にはトップ10まで来る言語だと予想してます。Java技術者っていうScalaに流れ易い人員の数が多いし、既存のリソースの再利用+連携も可能ってことを考えると、ビジネス的にも利用価値はあるし。

Groovyは一向に来ないし、Noopもさして話題になってないし、JRubyはRuby1.9より実行速度遅いし。となるとJava資産を受け継ぐのはScalaしかないよなぁ、と。Javaの開発がここのところモタついているのも追い風だと思うし。まぁ、その辺はOracleの力の入れ方次第って面もあるけど。



・バージョンが変わっても過去の資産がそれなりに使える

新しい言語だと、バージョンが変わるとソースが動かなくなるという話がけっこうある。で、せっかくその言語で評判の良いライブラリを作っても、バージョンが変わるたびにメンテナンスが入るなんてことも。

その点はJava的な技術の特権というか、classファイルになってしまえば全部一緒ということで、JARで固めたライブラリは新しいバージョンからでも利用可能(なはず)。そういう意味では、「まだ言語仕様揺れるんじゃね?」ということをそれほど恐れなくても良い気もする。



というわけで、IDEのモタつき以外は今のところ不満は抱えてないし、今後は今までRubyとPythonでやってたことも極力Scalaでやるようにして、もう少し様子を見てみたいと思う。

来るかなぁ。どうかなぁ。Twitter頑張れって感じかなぁ。