まつもと ゆきひろです

In message "Re: [ruby-dev:43755] Re: [Ruby 1.9 - Bug #3456] bisarre comma"
    on Sun, 12 Jun 2011 00:17:05 +0900, Urabe Shyouhei <shyouhei / ruby-lang.org> writes:

|俺がこれはバグだと思うのは、括弧のあるなしで意味が変わるというのが凶悪だ
|という思うからです。なぜ
|  i(j,)
|  k l
|がOKで
|  i j,
|  k l
|がNGなのか、あきらかに混乱のもとです。

「演算子(この場合はコンマ)が行末にある時には継続」というルー
ルとの組み合わせで発生している現象ですね。このルールを知って
さえいればそんなに混乱しないと思うなあ。

|さらにいうと
|  i j, do end
|  k l
|も現状OKです。もはやわけわからん。

これも同様ですね。行末にコンマが来てないから。

|これは#5には書いてありませんが、追記すると、
|
|  i j, do end
|  i j, {  }
|  i j, -> { }
|
|はすべて合法で、かつ、すべて異なる解釈です。意味が分かりません。

全部違うものだから。異なる解釈である方が当然では。

|この行末に,を許そうとした変更はrevertしたほうがよいと思います。

なんかいろいろ言われてますが、はっきりとは書いてないがほのめ
かされてるのだと思う、

  括弧のないメソッド呼び出しの引数リストの末尾にコンマの存在
  を許すと、おそらくは意図していない行継続が起きてしまい、ユー
  ザーが驚く

点だけには同意します。変更したときにこの点には気がついてませ
んでしたし。上にある「混乱のもと」とか「わけわからん」とか
「意味が分かりません」というのは、つまり、このことを言いたかっ
たのかなあ。

で、同意したので、少なくとも「括弧のないメソッド呼び出し末尾
のコンマは許さない」という変更は行いましょう。今、yaccのルー
ルを見たら、revertするのは4行削るだけだけど、括弧のある場合
だけ許すとなるともうちょっと複雑になるなあ。まあ、ルールひと
つ増やすだけだけど。

                                まつもと ゆきひろ /:|)