堀之内です。

# ruby-math だけの話でなくなって来たように思いますので、
   ruby-listにも振ります。末尾にこれまでのメール(2通)を付けておきます。

> fallbackを用意することそのものには反対しないのですが(という
> かむしろ賛成なのです)、その方法は hoge.sin で良いのだろうか
> という点について決めかねているというのが本当のところです。
> 
> もしかしたら、Guy Decouxがプロトタイプを作ったようなマルチメ
> ソッド(引数の型によって分岐するメソッド)を導入した方が良いの
> ではないかと思うところもあります。

寡聞でこれは知りませんが、勝手に推測すると、あるクラスの sin メ
ソッドを実行する関数へのポインターを Math に登録出来るような仕組
みがあって、sin にそのクラスのオブジェクトが引数として渡ってきた
場合、登録された関数を呼び出すということでしょうか。そうしないで 
math.c 作成時に対応するケースを決めてしまうと柔軟でないですし。

hoge.sin は rescue とか ruby の言葉で語りやすくて、こちらは(っ
て勝手な推測に基づいてますが) C の言葉でのほうが語りやすいです
ね。とすると、効率は後者のほうがいいということになるのでしょうか?
いずれにしても、どうやら ruby というものの今後の発展のさせ方の基
本方針に関わる選択のようですので、私がこれと勝手に決められるレベ
ルのことじゃないようですね。もう少し議論が出てきて煮詰まるのを期
待します。ひょっとして過去にもう議論が積み重ねられてて、私が知ら
ないだけかもしれませんが。

--
堀之内 武  (horinout / kurasc.kyoto-u.ac.jp)

========== 1通め ==================================================
  Subject: sin(hoge) -> hoge.sin
  From: Takeshi Horinouchi <horinout / kurasc.kyoto-u.ac.jp>
  To: ruby-math / ruby-lang.org
  Cc: horinout / kurasc.kyoto-u.ac.jp
  Date: Wed, 18 Apr 2001 21:38:30 +0900

  堀之内です。

  ベクトルや行列など、数値を要素に持つクラスを定義した場合、要素毎
  に Math の関数を適用できるようにしたいというケースは多いでしょう。
  その場合のやり方としては、メソッドにして

      x.sin       # x はベクトルなどのオブジェクト

  などと出来るようにするのが一般的だろうと思います。しかし、
  やはり sin は

      sin(x)

  と書きたくありませんか。現状では、sin(x) は x を Float にcoerce 
  して math.h の sin に渡すようになってます。coerce失敗なら例外発
  生です。そこで、もしも coerce が失敗したらそのオブジェクトの sin 
  メソッドを呼ぶという風に rescue されれば良いと思います。そのオブ
  ジェクトにsin メソッドがなければ勿論結局例外発生です。

  各ユーザーが Math の関数をそれぞれ再定義しても良いのですが、出来
  ればおおもとの math.c が上記のように変るのが良いだろうと思います。
  賛同が得られましたら(特にまつもとさんの)、試作してみたいと思い
  ます。ただ、ruby で書く場合 rescue を使って簡単に出来ますが、Cで
  書く場合にどうするのがいいのか知らないので、似たような例をご存じ
  の方は教えて頂ければ幸いです。

  --
  堀之内 武 (horinout / kurasc.kyoto-u.ac.jp)

========= 2通め ==================================================
  Subject: [ruby-math:00449] Re: sin(hoge) -> hoge.sin
  From: matz / zetabits.com (Yukihiro Matsumoto)
  To: ruby-math / ruby-lang.org
  Date: Thu, 19 Apr 2001 00:28:10 +0900

  まつもと ゆきひろです

  In message "[ruby-math:00448] sin(hoge) -> hoge.sin"
      on 01/04/18, Takeshi Horinouchi <horinout / kurasc.kyoto-u.ac.jp> writes:

  |各ユーザーが Math の関数をそれぞれ再定義しても良いのですが、出来
  |ればおおもとの math.c が上記のように変るのが良いだろうと思います。

  fallbackを用意することそのものには反対しないのですが(という
  かむしろ賛成なのです)、その方法は hoge.sin で良いのだろうか
  という点について決めかねているというのが本当のところです。

  もしかしたら、Guy Decouxがプロトタイプを作ったようなマルチメ
  ソッド(引数の型によって分岐するメソッド)を導入した方が良いの
  ではないかと思うところもあります。

  あるいは以前誰かが提案したような hoge.type.sin(hoge) とかも
  考慮の余地はありますね。

  |賛同が得られましたら(特にまつもとさんの)、試作してみたいと思い
  |ます。ただ、ruby で書く場合 rescue を使って簡単に出来ますが、Cで
  |書く場合にどうするのがいいのか知らないので、似たような例をご存じ
  |の方は教えて頂ければ幸いです。

  rb_rescue()とかrb_rescue2()とかがあります。

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