Hatena::ブログ(Diary)

miura1729の日記 このページをアンテナに追加 RSSフィード

2009-08-03

暗黙の型変換の目処が立った

19:07 |  暗黙の型変換の目処が立ったを含むブックマーク  暗黙の型変換の目処が立ったのブックマークコメント

8月4日追記

  この方法だとうまくいかない場合がありました。bm_so_mandelbrotを試していたのですが、このプログラムでは、ループカウンタを浮動小数点演算の式の中で使っています。この方法だとループカウンタが浮動小数点型になってしまいます。多分動くのでしょうが、速度が大幅に低下してしまいます(でも、型変換の方が重くて実はこっちの方がいいのかもしれない)。また、他の場所も整数演算できるところが、浮動小数点演算になってしまいます。そういうことで、解決策を考えています。無条件ではなく、条件を絞って型変換するようにするとよいのではないかなと思っています。

追記2

bm_so_mandelbrotとbm_so_nbodyのオリジナルが動くようになりました.まだ根本的なバグがあるかもしれないので、もうちょっとテストして詳細は後日書きます.github(http://github.com/miura1729/yarv2llvm/tree/master) にはアップしました。


yarv2llvmの近況です。まだ、実験段階ですが、暗黙の型変換(Fixnum -> Float)が動きました。bm_so_nbodyの

   SOLAR_MASS = 4 * Math::PI**2

が無修正で動いています。

対応方法はこんな感じです。

  1. yarv2llvmで扱うオブジェクトの型を表現するRubyTypeに@src_typeというメンバーを追加する
    • @src_typeはそのオブジェクトの本当の型を表します
    • 今までの@typeには、そのオブジェクトは外から見るとその型であるように振舞うという意味に変わります
    • @src_typeと@typeが違うときは必要に応じて型変換処理が生成されます
  2. 型推論中にFixnumとFloatで型が衝突した場合の処理を変更する。これまでは、単にType Conflictエラーを出してVALUE型にしていた
    • Fixnum側の型の@src_typeを@typeに変更する
    • Fixnum側の@typeをFloatに変更する
    • つまり、Fixnum側の型を外から見るとFloatのように振る舞い、内部がFixnumであるという型であるとする
  3. 後は必要に応じて@typeと@src_typeを比較して型変換のコードを生成する処理を足していく
    • とりあえず、bm_so_nbodyで必要なところだけ作って試してみたのですが、全部の処理に足していくのがこれからの課題です。普通に足していくと、ただでさえカオスなコードがメンテ不能になるのでちょっと工夫する必要があります。
  4. 暗黙の型変換のカスタマイズ(coerce)なんかもやりたいけどまだ方針が決まっていません。

試してみたお!試してみたお! 2009/08/08 01:14
オッス!ニートの桜井だよ!いやいや毎度毎度!!!!!
ここで釣った女でコンニャクオナと生マヌコのどっちが気持ちいいか試したお!!
えとうん・・・問答無用で生マヌコの勝ちだわwwwwwwwwwww
てかハメさせてくれた女子が当たり前のように10万くれたんだけど何でー???

http://ene.creampie2.net/PuVE5Tw/

miura1729miura1729 2009/08/10 23:29 おそらく、後で何十倍にもなって返ってくるからじゃないかなと思います.

はいちゃんちゃんちゃん!!!!はいちゃんちゃんちゃん!!!! 2009/08/11 20:25
もーさすがに3回は果てるってーー!!!(>_<)
連続じゃないだけマシだけど1 0 万の為とはいえ3回ヤるとティ ンコさんが火を噴きそうなくらい真っ赤っ赤だよ(^^;
まー何気に足 コ キしてもらったのって初めてだし、得っちゃ得だけどねーwww

http://kachi.strowcrue.net/q94q4FO/

miura1729miura1729 2009/08/12 18:26 1つ1つの文章の意味はわかるのですが、全体を通して読むと意味がわからなくなる不思議な文章ですね。文章を考える人は大変そうです。こういう文章って自動生成出来そうな気がする。学習データはそれほど捨てるほどあるわけだし。

トラックバック - http://d.hatena.ne.jp/miura1729/20090803/1249294022