[#21225] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

14 messages 2003/08/22
[#21227] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — nobu.nakada@... 2003/08/22

なかだです。

[#21228] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — matz@... (Yukihiro Matsumoto) 2003/08/22

まつもと ゆきひろです

[#21281] 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

16 messages 2003/08/29
[#21285] Re: 大量メモリ消費攻撃に対する対応 — matz@... (Yukihiro Matsumoto) 2003/08/29

まつもと ゆきひろです

[#21288] Re: 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...> 2003/08/29

永井@知能.九工大です.

[#21306] Re: 大量メモリ消費攻撃に対する対応 — matz@... (Yukihiro Matsumoto) 2003/09/03

まつもと ゆきひろです

[ruby-dev:21050] Re: [Oniguruma] explicit capture

From: Tanaka Akira <akr@...17n.org>
Date: 2003-08-01 07:17:46 UTC
List: ruby-dev #21050
In article <5FD2F0CF7F5D7F44B00F36870B9E78B508DE505A@SBG-EX4>,
  kkosako@softbank.co.jp writes:

> この目的のためだけに新しいprefixを導入するというのは、
> 無理かもしれませんね。

ちょっと必要性が薄いように思います。

> prefixを付けないとすると、田中さんの提案の中で、
> ローカル変数を生成する構文とメソッドの導入が良いと思います。
>
>   /(?<name>...)/ = "abc"
>   /(?<name>...)/.vmatch("abc")

= に関しては、後から思いついた問題点として = が右辺の値を返すという流
儀に従うと使いにくいものになりそうということがあります。やはりマッチし
たかどうかも調べたいですから、真偽値を返して欲しいですよね。

また、vmatch のような(普通の形で呼び出す)メソッドはちょっと私の意図に
は沿わないです。

私の意図をまとめ直すと、

* capture したものを $~["name"] を経由せずに直接変数に代入したい

  /(?<name>...)/ =~ str
  name = $~["name"]

  というように name を 3回も書かなきゃいけないのは我慢できそうにない。

  番号なら、

  /(...)/ =~ str
  name = $1

  というように、繰り返しが無く、短く、$ の数も変わらないわけで、利点が
  番号を数えなくていいだけというのはちょっとひきあわない。

* でも、プログラマが意図しない変数に代入されるのは嫌だ

  var =~ str

  というように Regexp (の named capture)がリテラルとして見えない時には
  変数には代入しないで欲しい。

  とくに、ユーザ入力から Regexp を生成したりすると変数を好き勝手にいじ
  られかねないので少なくともデフォルトでは代入すべきでない。
  
というものなわけですが、後者の要求を満たそうとすると、どうしてもリテラ
ルとそれ以外の式を別に扱う必要があります。そのように式として評価すると
同じ値になるのに異なる扱いをするという仕掛けには、普通のメソッド呼び出
しという形式はあまりに普通すぎて、その特別扱いが違和感を生じるように思
います。

それに対し、= の左辺は評価される式じゃありませんから違和感がないわけで
すが、先に述べた通り他の = との返値に関する一貫性の問題があります。

で、もしかしたら、=~ や when が

  /(?<name>...)/ =~ "abc"

  case "abc"
  when /(?<name>...)/
  ...
  end

という形で使われた時を特別扱いするのがいいのではなかろうか、という気が
して来ました。これらは、形としてはメソッド呼び出しではないので、リテラ
ルの特別扱いによる違和感が少ないですし、新しい記法を導入しないので既存
の構文と自然に融合します。

また、ついでにいえば、現在の実装でも、/.../ =~ ... というのは特別扱い
されていて再定義が効かないので、再定義が効かなくなったと文句を言われる
こともない、というわけで。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread