カラクリスタ

「輝かしい青春」なんて失かった人のブログ

言及 (2013-12-17)

正規表現が構文として必要かどうかという話から

概要: これ読んだ感想


まあ上記の議論の内容はリンク先を読んでもらうとして。

上記リンク先の議論は、

  1. プログラミング言語には正規表現リテラルが欲しい派
  2. プログラミング言語正規表現リテラルがなくても何とかなるよ派
  3. そもそも正規表現なんてあんまり使わないよ派
  4. 君たちは何を言ってるんだい? ワケが分からないよ派 (俺の感想)

という感じで入り乱れてて、本当に議題がぶれてて何がなんだか、 って感想を受けたんですが、とりあえず、

について僕の考えをまとめてみたいと思います。

プログラミング言語には正規表現リテラルが必要か?

僕としては、

  • ぶっちゃけあると便利だけど、なくてもなんとかなるよ派
  • むしろ正規表現そのものの互換性が大事だよ派

です。

つか確かに Perl だと一行で済むような正規表現に match させるコードを、 golangpython で書くとちょっと冗長になりがちなのは確かです。

あと、複数の正規表現を用意して、それを switch case 系の構文でまわす、 とかだと、PerlRuby の様に、正規表現リテラルがあった方が、 コードを書くという意味では楽と言えば楽です。

ただし、僕が思うのは、正規表現を動的に生成、特に、 外部からの入力を元に正規表現を組み立てる場合、 PerlRuby 等の正規表現リテラルを持つ言語だと、 Validation が面倒? じゃないかなーと思う面は確かにあります。

というのも、golang だとregexp.Compileコンパイルエラーとかを、 プログラムが死なずにとれたりしますが、Perl だとその辺り、 Try::Tinyで例外を catch しないとダメポっぽいので、 それがちょっと面倒だなぁと僕は思います。

正規表現リテラルの有無よりも、言語間の正規表現の互換性の方が大事じゃね?

ぶっちゃけ僕が最初 Perl or Javascript から golang に趣味が移ったときにこまったのは、

でした。

っていうか本当に、

Perl だとこう表現できるのに、golang だとこれができない! どうすんだよこれ……

みたいなのに何回も遭遇したので、その辺りの経験から言うと、 正規表現リテラルが有る or 無いよりも、

の方が重要なんじゃないかなぁと僕は思います。

正規表現リテラルの有無は、言語設計方針の問題だと思う

あと正直、正規表現リテラルがあると便利だとか、 あるいは無くても良いとかなんとかって言う話は、

によるモノが大きくて、その辺りについては外部がとやかく言っても、 仕方が無いというか、あんまり意味ないんじゃない? とか正直思います。

上記のリンク先の話だと

Dart: Structured web apps

正規表現リテラルが欲しい! という話から始まってると思うのですが、 Dart の設計者の方針が、

正規表現リテラルは特に設けない

という方針であるとすれば、ま、 それはそれで受け入れるしかないんじゃないかなぁと。

僕としては、その辺り郷に入れば郷に従えじゃないですけど、 自分が言語にあわせて設計等を切り替えていく、 ってのが必要になるんではないかなーと思います。

というワケで以上。

まあ上記リンク先の議論の論点があまりつかめてないので、言ってることがとんちんかんになってる可能性もなきにしもあらずですが、僕としての考え方は、大体こんな感じです。

ま、僕としては、特定の言語に正規表現リテラルが無いのであれば、 まずそれを受け入れ、その上でどうやったら適切にコーディングできるか、というのを考えてった方が良いのではないかなぁと思います。

という訳で、

正規表現が構文として必要かどうかという話から - Togetter まとめ

を読んだ感想としては以上です。

ただまあ正直、上記リンク先の議論の内容はあんまりつかめてないです。はい。

FIXME