プログラミング言語の後付け仕様による微妙な制約

JavaScript は、当初正規表現を扱えなかったのですが、やっぱり正規表現は使いたいよね〜、ということで Perl から正規表現リテラルをインポートしました。

その結果、以下のような微妙な制約が生まれてしまいました。

/*
正規表現リテラルがコメントの終わりと判定されてしまう!

var foo = "foo".match(/fo*/);

*/

誰も気がつかなかったのでしょうか。それとも気がついていてなお、Perl正規表現リテラルにこだわったのでしょうか。

この微妙な制約を回避する有効な手段は、C スタイルのブロックコメントを使用するのをやめて、常に C++ スタイルのラインコメントを使用することです。


C++ は、テンプレートがやはり後付けで追加されたのですが、ここにもまた微妙な制約が潜んでいます。

// >> とくっつけて書くと、シフト演算子として判定されてしまう!
vector<pair<int, int> > foo;

テンプレートの閉じ括弧が連続する場合、常にスペースを開ければいいだけの話ですが、美しくないですよね。

これは、コンパイラががんばれば解決できる問題だと思うんだけど、なかなかそうはならない。