読者です 読者をやめる 読者になる 読者になる

カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

言及

Development Thinking

概要: これ読んだ感想


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

上記リンク先の議論は、

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

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

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

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

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

僕としては、

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

です。

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

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

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

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

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

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

  • PerlやJavascriptとのgolangの正規表現の非互換性

でした。

っていうか本当に、

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

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

  • 言語間の正規表現の互換性が有る or 無い

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

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

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

  • プログラミング言語設計者のその言語の設計方針

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

上記のリンク先の話だと

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

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

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

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

というワケで以上。

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

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

という訳で、

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

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