プログラミング言語内の正規表現リテラルについて

プログラミング言語内の正規表現リテラルが是か非か、 そんな議論にいまさらながら参加してます。 ただしどちらかの立場に立って擁護したいというわけではなく、 話を抽象化というか一般化して問題の本質にせまります。

今週始めに「プログラミング言語内に正規表現リテラルが必要かどうか」という論争がtwitterの一部で盛り上がっておりました。私個人の意見としては以下の発言に集約されております。

つまり言語の良さなどドメイン(≒用途)で決まるのだから、その設定次第で結論はどちらにでもできてしまう、というわけですね。

でも、まてよ

夜中に目が覚めてまどろんでいるところで「でも、まてよ」と思える考え方が去来しました。この問題はもっと一般化して定義できるよな、と。そう考えることでまた違ったもののの見方を得られるんじゃないか、ということです。

ここまで引っ張りましたがこの問題は一般化するとこうなります。

(汎用)言語に用途特化言語(=DSL)を組み入れるべきかどうか

正規表現はまごうことなきDSLです。対してホストとなるプログラミング言語は汎用言語ですね。この一般化におかしなところはなさそうです。こうしてみると組み込みDSLが得意な、日常的なプログラミング言語の利用者に正規表現リテラルの擁護者が多い気がしてきますねw

さて、このように一般化を経て問題を抽象化できれば、別の具体的な問題を設定して、それを元に違った角度から考察できるようになります。例えばこう。

日本語に英語を混ぜて用いるべきかどうか

あーなんか国粋主義的な主張になってきました。ただしこれは具体化としては正しくありません。なぜながら英語はDSLではなく日本語と等しく汎用言語です。こういう議論のすり替えはよくありません。

まじめなはなしIT畑に身をおいていると英語も多く飛び交うので、ルー大柴のような英語交じりの日本語文があっても特に抵抗はありません。しかし結構な数の日本人にとっては英語どころかカタカナ語が混ざるだけで文の意味がわからなくなってしまうという点には留意する必要があります。

では切り口をほんの少し変えて別の具体化をしてみましょう。

日常会話に専門用語を組み入れるべきか

これはよくあるシチュエーションじゃないでしょうか。家電量販店で店員さんが繰り出す専門用語混じりのセールスにキョトンとなってるお客さんとか、せっかくのデートの最中に彼の語る意味不明なIT用語に急速に興味を失う彼女とか、何気ない世間話で自分が見てないドラマやアニメのセリフや知らない流行り言葉を差し込まれて反応できなかったりとか。

にゃんぱす~

ここまで考えるとその是非ははっきりします。製品についてしっかり予習してきたお客さんに対して話すならば、家電量販店の店員さんは専門用語を使ってもうまくセールスが回ります。もともとIT系に興味津々な彼女さんであれば、そういう話をしても引かれません。のんのんびよりを見ている相手にならばいきなり「にゃんぱす~」と挨拶することも可能です。

言語とは最終的に相手、受取り手、読み手を必要とします。すなわち言葉を発する以上は相手がそれをどう解釈するかについて意図が存在するということになります。意図が不明瞭ならば発言は生じず、またそれを達成できないような発言は避けてしかるべきです。ちょっと抽象的すぎますね。

そしてフリダシへ

ではこの指針を持って元の問題に戻ってみましょう。

プログラミング言語内に正規表現リテラルを組み入れるべきかどうか

実は「プログラミング言語」の受取り手には幾つか異なる立場があります。

  • その言語でプログラムを書く人
  • それを動かすコンピュータ
  • それで作られた機能を使う人
  • (蛇足的に)言語設計者

まぁコンピュータと設計者はどうでも良い気もしますが、項目が少なくて寂しかったので足しときました。なので今は書く人と使う人に分けちゃいましょう。ただし気をつけなければならないのは、実際には書く人と使う人は綺麗には分けられません。DSLなんてのはそこの境界を取り払う試みの一つとも言えるのですし。

なのでかなり乱暴ではありますが、最初の議論の参加者がどちらの立場なのか、想像しながら読むとまた違った味わいがあるかもしれません。フレーム中はそこを外していたから取り留めのない議論になってしまった感があります。

まぁどっちみちたいしたことではないんですけど (・ω<)

眠気が戻ってきたのでここでおしまい。