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

新たなプロジェクトの予告

新しいプロジェクトをはじめようと考えています。その名も、yarv2ruby。なんじゃそりゃー意味が無いじゃないかと思われるかもしれませんが、そのまま変換するのではなく色々なフックをつけるとマクロになったり、オプティマイザーになったりすると思っていま…

Inside yarv2llvm(その5)

えらく更新が遅くなりました。今回は3回くらい書いている途中で消してしまい(戻るボタンを押したりして)、悲しい思いをしていました。結局、エディタで書いています。イテレータの説明をすると予告したのですが、イテレータを説明するには変数の説明をしない…

Inside yarv2llvm (その4)

型推論の続きです。RubyType.resolveはRubyTypeのクラスメソッドですべてのRubyTypeのインスタンスの型推論を行います。RubyTypeクラスには@@type_tableというクラス変数があり、それにすべてのRubyTypeのインスタンスが入っています。RubyTypeは@@type_tabl…

Inside yarv2llvm (その3)

今回は型推論の話の簡単なところです。Rubyは素直に型推論できるようにできていないので、yarv2llvmではいろいろad-hocな例外を組み込んでいますが、今回はそれらは一切無視です。素直に型が一意に決まり、決まらないときはエラーで弾く場合を想定しています…

Inside yarv2llvm(その2)

yarv2llvmは2パスです。Rubyの言語仕様では1パスで実現することが可能です(と思います、ちょっと自信ないです)が、型推論で後に来る情報も利用したいので2パスにしています。2パスにしてうれしい例を挙げます。 def foo(a) a end foo 1 ここで、fooを定義し…

Inside yarv2llvm(その1)

yarv2llvmがとりあえず1段落しました。今後しばらくは、大きな新機能は追加せず、こまごました機能追加とBug fixを行おうと思います。安定してきたら、多相メソッド起動を作りたいと思います。なんか思いついたら、新機能を入れるかもしれないですが。yarv2…

ゴリラの短歌

痛いニュースより http://blog.livedoor.jp/dqnplus/archives/1210049.html「ぼくゴリラ ウホホイウッホ ウホホホホ ウッホホウッホ ウホホホホーイ」えらく叩かれていますが、いい歌だと思います。こういう歌って簡単そうでかけないですよね。 これを批判す…

サンタ問題が動いた

サンタ問題が動きました。プログラムは、 http://github.com/miura1729/yarv2llvm/blob/60b63d7ae43d64d630d6adbaad47cbdd6cf11e52/sample/santa.rb です。まだ、色々不具合が見つかっていますが、だましだまし動かしています。出力結果です。 ruby19 yarv2l…

パイプラインストールについて

ささださんの研究日記より(http://www.atdot.net/~ko1/diary/200901.html#d17)。コメントに書いたのですが反映されないみたいなのでここに書きます。 IA32 でも,Pentium とか core なんとかとかで変わりそう.しかし,パイプライン・ストールを意識したこと…

サンタ問題を作っています

Beautiful Codeを読んでいたらサンタ問題というものが載っていました。これをyarv2llvmに移植しています。一番難しいサンタ以外のオブジェクトを書いて、コンパイルしたらバグが一杯出ました。何とかバグを修正していき、何とかコンパイルできるようになりま…

module Transactionの仕様メモ

yarv2llvmの独自仕様でTransaction mixinを作ろうと思います。結構複雑な仕様になりそうなので、頭を整理するためにここに書いておきます。Transaction mixinはこれをincludeすることで、メソッド呼び出しをあたかも1つのTransactionのように扱えるようにな…

Threadをサポートした

@llvm.atomic.swap.* 使いたい! っていう変な理由でThreadをサポートしました。 遊ぶのが主目的で信頼性はどうでもいいので注意が必要です。といっても、yarv2llvm全体もそういうスタンスなので問題ないと思います。rb_thread_createという目的にぴったりと…

LLVMが拡張されてる

ちょっと見ない内にLLVMが拡張されていました。これがLLVM 2.5(2009/2/11リリース予定らしい)の仕様なのかもしれないです。なかなか、というかすごく面白そうな機能があります。 http://llvm.org/docs/LangRef.html#int_atomics と http://llvm.org/docs/Lan…

yarv2llvmの進捗状況

今回は(も?)、あまり面白くない変更ですが自分用にメモします。 式が定数だった場合畳み込みをするようにしました 比較の結果(Booleanまたは(TrueClass/FalseClass))をサポートしました Fixnum#timesをサポートしました。これをサポートするに当たってイン…

yarv2llvmの進捗

結局、正月休みをyarv2llvmの開発に費やしてしまいました。結構進みました。 ruby yarv2llvm.rb Rubyプログラム の形で起動する形式で、bm_so_nbody.rbが大体動くようになりました。大体なのは、SOLAR_MASS = 4 * Math::PI**2 の行が型エラーになるので、4 -…

来年の目標

鬼が笑うところをみてみたいと思うので来年の目標を書きます。正月に仕事しない昨日(1/1)排水が詰まったということで排水管の掃除に行ってきました。ラバーカップ(通称すっぽん 正式名称 Plunger)、強力ですね。お勧めです。空気が抜けると使えないので、使…