2009-01-01から1年間の記事一覧

yarv2llvmの作り直しの検討 MethodBehaviorクラス

yarv2llvmを作成していて、メソッド呼出毎にさまざまにコンパイルの仕方を変える必要があることがわかりました。 例えば、eachは多くの場合インライン化する必要があるし、String#packは第1引数のテンプレートを見て型推論を行う必要があるし、newはエスケー…

動的に型づけされた言語の実現方法の資料

私の知る範囲の動的に型づけされた言語の実現方法の資料をまとめてみました。英語は苦手なんで日本語中心です。 こういうのがあるよとか、こんなところにリンクしないでくれとかありましたら教えてください。 思い出したら追加します。変更履歴2009/12/13 初…

短歌作成プログラム

ひょんなことから短歌作成プログラムを作ることになりました。 もっと優先順位の高いやらなければいけいないことが多いので、忘れないようにメモをします。 基本的な考え方 基本的な考え方は5・7・5・7・7になるように単語をランダムに並べる 単に並べ…

yarv2llvmの作り直し RubyType編

各データについて1つづつあり、データと型オブジェクトの橋渡しを行うRubyTypeについての検討事項をここに書きます。 RubyTypeと型オブジェクトを分離する方針は非常にうまく行くのでこれからも継続する デバッグ情報、@name, @line_noは便利なので今後も必…

yarv2llvmを作り直した場合について気をつけること

なんか、yarv2llvmのデバッグがはまってきたので作り直す場合に同じ失敗を繰り返さないようにするためのメモ。思い出したら順次書いておきます。 add_same_typeによる型の関連づけ → ユニフケーション のサイクルは複数回繰り返さなければならない場合がある…

実験

新しいソフトウエアを作ったので、公開したいと思います。 そこで、このソフトウエアを公開するに当たってどんな影響があるかどうか調査したいと思います。 もし、ご意見のある方がいましたら、コメント・トラックバックまたは、github, twitter(どちらもID…

Twitterはじめました

今まで、twitterは面白そうだなーと思っていて、いろいろな人の呟きをROMしていたのですが、だれもfollowしてもらえないと悲しいなとおもってやりませんでした。 でも、CSNagoyaの飲み会でその話をしたら、followしてあげるよって言って貰えたので、始めるこ…

名古屋で濃ゆい話をしてきました

CSNagoyaという団体に混ぜてもらって、RHG読書会に参加しました。yarv2llvmを宣伝させてくれるというので、宣伝してきました。私がなんか書くより、id:lequeさんの方が面白いと思うので、そちらを見てください。 http://d.hatena.ne.jp/leque/20091004/p1Typ…

久しぶりに読んだけどやっぱりすごい

http://web.yl.is.s.u-tokyo.ac.jp/pl/abclf/ipa-final/reports/html/contents.html

水道屋がRubyを活用する(その4)

ずいぶん久しぶりですが、私が仕事で使っているRubyプログラムの一部を紹介します。 その4となってますが、前のはここにあります。http://d.hatena.ne.jp/miura1729/20090428/1240924372 その1 http://d.hatena.ne.jp/miura1729/20090430/1241083520 その2 h…

rb_get_method_bodyが無くなってる

Ruby 1.9.2 preview1にアップデートしたところ、yarv2llvmが動かなくなりました。 よく見ると、rb_get_method_bodyが無くなっている模様です。おそらく、nodeをGC対象外にする話の一貫じゃないかなと思います。ちょっと追ってみると、vm_method.cで定義され…

近況

相変わらずbm_so_*.rbを動かそうとしています。現状はこんな感じです。動かないものの理由もだいたい調べています。ファイル名の後に*がついているのはbm_so_*.rbを書き換えて動かしたものです。 こうしてみるとbm_so_*.rbっていろいろな機能がまんべんなく…

宣伝

私はHANI(埴短歌会)という短歌の会(結社)に入会して短歌を勉強させてもらっているのですが(その割には全然上達しない)、会のメンバーで友達の小夜さんが短歌添削ブログを始めたので紹介します。 http://hanitankakai.blog62.fc2.com/彼女の批評力はすごく…

Hello Worldが動くようになりました

yarv2llvmでHello Worldが動くようになりました.こんなプログラムです。 m = LLVM::Module.new('hello') LLVM::ExecutionEngine.get(m) p_char = LLVM::pointer(Type::Int8Ty) ftype = LLVM::function(Type::Int32Ty, [p_char]) ftype = ftype.to_raw printf…

型推論できない場合に遭遇

bm_so_nsieve.rbを動くようにしています。これも、一見簡単だと思ったのですが曲者が隠れていました. Flags = ("\x1" * ( 2 ** n * 10_000)).unpack("c*") String#unpackの型推論は完全には不可能かと思います。幸い、unpackのテンプレート文字列はリテラル…

近況

現状のbenchmark/bm_so_*.rbの状況です。動くプログラムがちょっと増えました.速度は基本的に変わっていないですが、bm_so_mandelbroat.rbだけはかなり速くなっています.多分、無駄な型変換が解消されたからじゃないかなと思っています。あと、出力を/dev/nu…

bm_so_partial_sums.rbが動き始めた

追記 2009/8/25 nagachikaさん、ブックマークのコメントありがとうございます。正直この日記にコメントが付くとは思っていなかったのでうれしかったし、ビックリしました. 同じ名前の変数を、違う型として扱われるプログラム中の区間を区切って別物として扱…

やはりIO/文字列処理が遅い

bm_so_count_word.rbが少し変更して動くようになりました。まだ、File#joinが動かないのでこんな感じに変更します。 #!/usr/bin/ruby # -*- mode: ruby -*- # $Id: wc-ruby.code,v 1.4 2004/11/13 07:43:32 bfulgham Exp $ # http://www.bagley.org/~doug/sh…

近況

2009/8/16追記 bm_so_concatenate.rbとbm_so_fannkuch.rbが動くようになりました。コンパイルしないといけないランタイムが増えたため全体的に速度が落ちています.これまで計算主体のベンチマークが動くように作ってきましたが、bm_so_concatenate.rbとbm_so…

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

8月4日追記 この方法だとうまくいかない場合がありました。bm_so_mandelbrotを試していたのですが、このプログラムでは、ループカウンタを浮動小数点演算の式の中で使っています。この方法だとループカウンタが浮動小数点型になってしまいます。多分動くので…

お勧めの本

ときどきの雑記帳(http://www.kt.rim.or.jp/~kbk/zakkicho/)で、 あなたの好きなその本を紹介してください。 できればなぜ、どの辺が好きなのか書いてくださるとうれしいです。 とあって、ちょうどいい本があったので紹介します。 π―魅惑の数 http://www.ama…

yarv2llvm近況

結局、スレッドからジャイアントロックを無くすたくらみは中断して、地道に行くことにしました。とりあえず、Ruby1.9.2に添付されているサンプルプログラムやベンチマークを*そのまま*動かせるように(今はいろいろ変更しないと動かない)いろいろやってみます…

@itに取り上げられてる!!

今日は一級管工事施工管理の講習で名古屋に行っていました。携帯で何気なく@itを読んでいたら私の名前が!!コーヒー飲んで無くてよかった。(http://www.atmarkit.co.jp/news/200907/24/ruby2.html) 取り上げてくださって本当にありがとうございます。これで…

LLVMが過激に変わっている!

昨日のGlobalAliasがセグフォしてしまう話はひょっとしてLLVMのバグでは?と思い初め(自分のことは棚に上げる)、LLVMを最新(s vn updateで)にしてみました。すると、llvmrubyをコンパイルするとエラーがいっぱい出ます. 調べてみるとLLVMContextというオブジ…

LLVMの弱点?

yarv2llvmのスレッドランタイム、まだ苦戦しています。色々追ってみて、Cで定義されたグローバル変数がうまく扱えていないことが分かりました.具体的には、ruby_current_threadという変数に現在Activeになっているスレッド構造体を入れておく必要があるので…

近況

土日は地元のお祭の運行警備をしていました。山車の運行コースに自動車が入ってこないように警備する役です。RubyKaigi行きたかったですが、これはこれで疲れましたが楽しかったです。日曜の夜に同年(みんなで警備をやった)で飲んだのですが、ちょっと濃いコ…

yarv2llvmの拡張のドキュメントをここに書く

AOベンチの高速化は結局手詰まりになってしまいました。今は、数ヶ月ほったらかしにしていたThreadのランタイムを再開しています。ジャイアントロックの無いThreadのランタイムと排他制御処理の自動挿入を実現してCPUをこき使えるといいなと思っています。 T…

1+2+3+4+・・・ は

みなさん! 1+2+3+4+・・・はいくつになると思いますか?!(主張発表会を見てきたのでちょっと影響されている) ゼータ関数理論とか(私はよくわからない)難しい話を駆使すると-1/12になるんだそうです。(http://ja.wikipedia.org/wiki/1%2B2%2B3%2B4%2B%E2%80…

yarv2llvmの近況(自分用のメモ)

インライン展開処理にバグがあって--inline-blockが実は動いていなかったのですが、動くようにしました。でもまだ、バグがあるようです。bm_so_mandelbrotの実行結果がおかしくなります。--inline-blockをつけると、Fixnum#times, Array#each, Range#eachな…

ao benchを高速化しているのですが、うまく行かない

今は、なんだかんだ忙しいのであまりプログラムをいじっていないのですが、時間があるとao benchを高速化することに凝っています。いろいろ試しているのですが、いまいち効果がでません。例えばこんなことを試してみました。 インスタンス変数はGCの関係上BO…