プログラミング言語の後付け仕様による微妙な制約
JavaScript は、当初正規表現を扱えなかったのですが、やっぱり正規表現は使いたいよね〜、ということで Perl から正規表現リテラルをインポートしました。
その結果、以下のような微妙な制約が生まれてしまいました。
/* 正規表現リテラルがコメントの終わりと判定されてしまう! var foo = "foo".match(/fo*/); */
誰も気がつかなかったのでしょうか。それとも気がついていてなお、Perl の正規表現リテラルにこだわったのでしょうか。
この微妙な制約を回避する有効な手段は、C スタイルのブロックコメントを使用するのをやめて、常に C++ スタイルのラインコメントを使用することです。
C++ は、テンプレートがやはり後付けで追加されたのですが、ここにもまた微妙な制約が潜んでいます。
// >> とくっつけて書くと、シフト演算子として判定されてしまう! vector<pair<int, int> > foo;
テンプレートの閉じ括弧が連続する場合、常にスペースを開ければいいだけの話ですが、美しくないですよね。
これは、コンパイラががんばれば解決できる問題だと思うんだけど、なかなかそうはならない。