「AWK != Perl」ってあえて言っちゃう
ゆうこ AWKを知ったのはどういったきっかけなんでしょうか。
斉藤 AWKはですね、もともと私、大学の学生寮に住んでて、そこでいろんな大学の学生さんがいたんですが、東大の文学部の友人がパソコン好きで、パソコン雑誌を見てたんですね。
かまぷ その当時のパソコンて、ちなみにどんなパソコンなんですか。
斉藤 PC-9801の、何ですかね……まだ16bitです。32bitではない。それで、彼がそのパソコン雑誌の中に「面白い記事があるんだけど、知ってる?」って言って飛んできて、多分『月刊アスキー』だと思うんですけど、それを見ると、ダジャレ生成機みたいなものを作ってました。例えば「ふとんがふっとんだ」みたいに、「ふとん」と「ふっとん」という非常に似ている言葉同士を集めて、それで何か面白い言葉作れませんかっていうの。そして、文字と文字とが何文字離れているかという「文字間距離」などのアルゴリズムを紹介していた記事があって。当時は全然、文字間距離だとかAWKもわかんないし、ただなんかこの「AWK」という言語ってすごく面白いことができるんだと。
当時はWebも無かったので、今までプログラムっていうと、数字を計算したり、グラフを描いたりだとか、そういう世界だったのが、ああなんか、文系の世界に降りてきた言語かなと思って、非常に衝撃を受けましたね。
かまぷ AWKに出会う前は、どんなプログラムをやってたんですか。
斉藤 実は昔、プログラミング言語マニアで。いろんなものをかじってます。FortranだとかForthだとかCOBOLだとか、CだとかBASICだとか、もうほとんど。
かまぷ 手続き型。
斉藤 いろんなものをずっと触ってました。とはいえ、実際に使えるものってBASICとC言語ぐらいしかないのですが、C言語って、今とはちょっと別の意味でしんどくて。当時はパソコン自身がフロッピーディスクで動いてたんですよね。で、フロッピーディスクで動くとなると、Cコンパイラが入るか入らないか。
ゆうこ ああ、容量が。
斉藤 そういう世界で頑張るのが結構しんどい。そうすると、基本はBASIC使ってました。で、BASICやCって、面倒くさいところがあるんですよね。何かと言うと、普通に我々ってマウスダブルクリックでファイルを開くっていう、すごく単純な作業でファイルを見ることができるじゃないですか。ところがBASICやCは、ファイルを開くために手続きがいるんですよね。例えばPerlとかでも、とってもまじめに書くといろいろファイルオープンして、ファイルハンドラを指定して、ファイルをクローズするみたいな手続きがいるんですけど。
AWKは実はそれが全くなかった。波カッコでくくってあげると、自動的に引数に与えたファイルを自動的に開いてくれる。今まですごく面倒くさかった作業が、「なんでAWK使うとこんなに便利なんだ!」と衝撃受けましたね。
ゆうこ なるほどですね。
かまぷ 人に歴史あり、コンピュータに歴史ありですね。
斉藤 とりあえず、自分に合った言語を探してたんですよね。C言語がすごいとか、これからの主流になるとかってのは分かってたんですよ。ただやっぱり、当時はポインタを始めよく分からなかったので、もっと簡単な言語ってないのかなって、探してた。探してて、先ほど言ったFortranやCOBOL、当時は人工知能に向いてるって言われてたPascalやForthだとか、そういう言語も触りつつ、自分に合ってるのは何だろうなって探していました。
かまぷ で、もうAWKに出会ったらAWK一番。
斉藤 AWK一番ですね。
かまぷ 前田敦子みたいな感じ。
斉藤 不思議なぐらいで。なんかAWKユーザーってそういう人、結構多いんですよ。もうAWK一番だと。で、AWKとPerlってよく比較されるじゃないですか。よく似たプログラミング言語ですよと。できた年も、実は1年くらいしか違わないんですよ。違わないんだけど、AWKユーザーはPerlがどうも嫌いで、他の言語を敵視まではいかないですけど、「俺たちは違うんだ」みたいな感じで。
よくプログラムで否定する時ってあるじゃないですか。否定ってうのは、プログラムの条件文で、例えば無限ループを作りなさいみたいなのでもいいんですけど、絶対に条件を抜けないでほしい、というものを作る時に、わざと「AWK != Perl」って書いたりして。別にそう書かなくてもいいはずなのに。「我々はこいつらと違うんだ」というのでループを回すという。
かまぷ Perlだと勝手に抜けちゃうんですか。
斉藤 いや、「2つが違う間はループを抜けません、2つが一緒になったらこのループ抜けます」みたいな、そういう条件分岐を作るのに、「AWKとPerlは等しくない」という条件で、無限にループを回すという。
かまぷ あえて嫌味を言っちゃうのがAWKユーザー。
斉藤 AWK使いってAWKer(オーカー)っていうんですけど、AWKerのクセですね。たまにそういう人いますね。
かまぷ AWKとPerlの違いってひとことで言うとなんですか?
斉藤 今で言えば、ライブラリですね。やっぱりPerlのCPANの強力さはケタ違いですし。最近だとPythonや、他の言語でもライブラリが豊富にありますけど、AWKだけ実は整備されてないんですよね。
ゆうこ あるにはあるんですか。
斉藤 あるのはあるんですけど。なんでか考えてみたんですけど、結局簡単だから自分で作れちゃう。
ゆうこ なるほど、人に共有するまでもないと。
斉藤 ほとんどの場合、それぐらいできるでしょっていう。GNU AWKのメンテナーもそっけなくて、「何かこういうのない?」って聞いたら、「それって自分でできるよね」っていう回答をする。
ゆうこ 試される感じですね。