Mon, 01 Apr
Perl, あるいは困ることについて

Q2 になったので月に1回くらいは日本語で書いてみることにした。

ここ数年で Perl に起こった良いことは2つある。

ひとつは PSGI/Plack, cpanminus, carton, cpanfile などいろいろ良いものが他言語から輸入されたことで、Perl で書かなくてはいけない時の面倒が軽減された。それぞれ Ruby でいうところの Rack, gem (1), Bundler, Gemfile に対応している。

もうひとつは Module Counts にみるライブラリ数の推移や、Moose の開発者で Perl 5 にメタオブジェクトプロトコルを入れるはずの Stevan Little が Perl is not Dead, it is a Dead End なんて言い出すくらい、だんだん衰退していることで、なんというか妥当な世代交代だと思う。

Perl で、たとえばなにかを JSON に出力しようとして

{ "enabled" : 1 }

とかになっちゃって、ああこの変数は真偽値として扱ってるけど boolean というのはないんだったと JSON::XS::true とか使うんだけど、だんだんそれを変換するのが面倒になって、どうせ JSON 使うだろと思って横着して MyApp::true = JSON::XS::true みたいにエイリアスはって中でも JSON::XS::true を持たせてみたりして、そうしたら Perl の MongoDB ライブラリにおける真偽値Ingy さんのほうの boolean なのでやっぱり横着しちゃだめだなあ、とかそういうのをみると2013年になにをしているんだろうという感は強い。

こういう話をすると「Perl には TIMTOWTDI というのがあってね…」といわれるかもしれない。それは知っていて、でも Web まわりは PSGI にまとまって良かったじゃないですか。真偽値もまとまると便利なんですよみなさん。

困らない人達

プログラミング言語比較にそんなに乗ってこない人々というのは世の中に存在していて、彼らの淡々と仕事をしている様は、それはそれでかっこいい。Steve Yegge は Egomania Itself でこんなことを書いている。

他の多くのプログラミング言語に対してやっているのと同じように、私は以前、Perlの技術的な弱点を長々とこき下ろしたことがあった。私はいつも驚きを感じ続けているのだが、Perlの連中というのは、唯一決して怒らない人たちだ。彼らはただ「ハハ、そうだね、坊や、お前正しいよ。確かに醜い。いやいや、うん、まあ、ともかく、俺仕事に戻んないと・・・」 これはすごいと思う。私は彼らにすごく敬意を感じるようになった。このことだけでも、Perlでのプログラミングに戻ろうかと思うに十分なほどだ。

怒らないのは良い。ただ、怒らない人のなかには困らない人もいて、それはそんなに良くない。

Perl プログラマの「Perl で別に困ってないし」という人の、PSGI/Plack のような新しめのものを試して便利ないし必須だと思っている人の、数年前のことを思い出してほしい。彼らのなかには PSGI がきまる前もそんなに困ってなくて、mod_perl にべったり依存したものを書いて、テストごとに Apache を起動してそれが遅いとも思わずにいた人もいるんじゃないだろうか。それは短気でも傲慢でもなく、別言語を知らないか、あるいは知っていても取り入れないという、悪い意味で怠惰ではないかと思う。

「困ってないですよ。これで足りてますよ。」というときに何と比較して困っていないのかは注意しないといけない。便利を知らないうちは不便を認識しないということはよくある。

私の困っていないこと

私にも困ってないことはいろいろある。

例えば、RSpec みたいなテスト定義むけ DSL が無いところでテストを書くこと。もっというと xUnit の setup, teardown も、共通部分があったら関数にくくりだしてというところで止まっていて、無くても困らない。例えば良い IDE が無い言語。Emacs と grep でなんでもやるのは違うんだろうなと思いつつも、慣れてしまっている。なお、このリストには長らく「デバッガが無いこと」が入っていたんだけど、これは JavaScript を書くときに Chrome Developer Tools のものを使うようになって、めでたく困れるようになった。

困っているけど、最終的に自分が変わって困らなくなるんじゃないかと思うものもある。Go が使っていない import をエラーにするのは触っていて少し面倒だったし、Python では、デバッグ中に if の中身をどこかにコピペして、インデントも直さないままコードを走らせたりしたくならないのかなと疑問に思う。でもこれらは自分の慣れている言語との差異につまづいているだけなんだろう。

2013年5月1日追記

はてなブックマークでたくさんブックマークされて (いま見た時点で 150!) うれしい。一方で、ちょっと相対的かつ優等生的な「みんなで学び合うことが大事です」みたいな方向にまとめすぎたと、コメントを読むと思う。だからブックマークしやすかったのかもしれないけど。

自分のなかでは

  • Perl で困っていない人々が他言語と比較検討した上でものをいっているかというと、そうとも限らないですよ。
  • なのでそういう人には、もっと細かく説明してみるなり、数字を積み重ねるなり、無視するなりするといいのではと思います。がんばって Perl やめましょう。
  • まあ Perl に限った話ではないけどね。

という話を書く予定だったんだけど、1番目を書いたことで2番目は自動的に導きだされるよね、という気持ちになって3番目のところを書きすぎた。