2010年03月
2010年03月31日
LLVM の JIT API を使うと、関数を返す(作る)関数が書けます。
肝は ExecutionEngine の getPointerToFunction() API で、JIT 済みの関数(コード)へのポインタを取得できます。
2010年03月29日
JIT の API を見ていきます。
ざっと考えてみると、最低限プログラムを実行するためには、以下のような項目が必要だと考えられます。
- 初期化、終了処理
- コンパイル単位 (モジュール)
- 関数定義
- 文
- 式(変数、定数、関数呼び出しなど)
- 文
- 関数定義
- プログラムの実行、結果の取得
2010年03月25日
LLVM を利用しているプロジェクトとしては MacRuby が有名ですが、他にも LLVM の JIT を利用しているプロジェクトはたくさん存在するようです。
The LLVM Compiler Infrastructure: Projects built with LLVM
では、具体的には、どのようにすれば LLVM の JIT が利用できるのでしょうか ?
続きを読む
The LLVM Compiler Infrastructure: Projects built with LLVM
では、具体的には、どのようにすれば LLVM の JIT が利用できるのでしょうか ?
続きを読む
2010年03月23日
ガベージコレクションのアルゴリズムと実装
面白そうなので購入しようと思っていたところ、タイムリーなことに、共著者の 1 人、中村成洋(twitter@nari3)さんと秀和システム様のご好意により、(会社にではなく個人的に)献本していただきました。ありがとうございます。
「ガベージコレクションのアルゴリズムと実装」という本を書きました。 - I am Cruby!
いま私は「プログラマのための文字コード技術入門」という本を読み進めているので、GC 本に取り掛かれるのはもう少し先になると思いますが、じっくり読ませていただこうと思います。
(KMC 社内でも、koba さんは既に購入済みとのことですし、他にも何人か興味を持ったようです。社長も「GC で一冊の本になるとはすごいですね。確かに奥が深いテーマですし、現代のプログラミング言語にもはや GC は不可欠ですしね。」のようなことを言ってました。)
パラパラとめくり、興味があるところをざっと眺めてみたのですが、非常にしっかり書かれているという印象です。入門書は数多くあれど、このような大部で網羅的な専門書が、翻訳ではなく日本人の著者たちによって書かれたというのは非常に貴重なことだと思います。Android の DarvikVM GC の実装解説など、旬な話題も豊富に扱われています。
また、5 月にこの本の読書会が大阪であり、中村さんも来られる(?)そうなので、参加しようと考えています。
ガベージコレクションのアルゴリズムと実装読書会
面白そうなので購入しようと思っていたところ、タイムリーなことに、共著者の 1 人、中村成洋(twitter@nari3)さんと秀和システム様のご好意により、(会社にではなく個人的に)献本していただきました。ありがとうございます。
「ガベージコレクションのアルゴリズムと実装」という本を書きました。 - I am Cruby!
いま私は「プログラマのための文字コード技術入門」という本を読み進めているので、GC 本に取り掛かれるのはもう少し先になると思いますが、じっくり読ませていただこうと思います。
(KMC 社内でも、koba さんは既に購入済みとのことですし、他にも何人か興味を持ったようです。社長も「GC で一冊の本になるとはすごいですね。確かに奥が深いテーマですし、現代のプログラミング言語にもはや GC は不可欠ですしね。」のようなことを言ってました。)
パラパラとめくり、興味があるところをざっと眺めてみたのですが、非常にしっかり書かれているという印象です。入門書は数多くあれど、このような大部で網羅的な専門書が、翻訳ではなく日本人の著者たちによって書かれたというのは非常に貴重なことだと思います。Android の DarvikVM GC の実装解説など、旬な話題も豊富に扱われています。
また、5 月にこの本の読書会が大阪であり、中村さんも来られる(?)そうなので、参加しようと考えています。
ガベージコレクションのアルゴリズムと実装読書会
2010年03月17日
GCC のミドルエンド(最適化パス)とバックエンド(コード生成)に手を加えることにより、LLVM target をサポートしているのが、llvm-gcc です。
DragonEgg は、GCC 本体には手を加えずに、GCC 4.5 から入る plugin アーキテクチャによって、同様のことを実現し、llvm-gcc の置き換えを目指しているプロジェクトです。
既にブートストラップが可能なほどの完成度に到達しているとのことです。
DragonEgg - Using LLVM as a GCC backend
ただし、現状では GCC 4.5 本体への patch が必要で、Linux と Darwin 上でしか動かないようです。
(そもそも現状の GCC plugin って、Windows 上で動作するのでしょうか ? 追々確認してみます。)
今後に期待して、見守って行きたいと思います。
続きを読む
DragonEgg は、GCC 本体には手を加えずに、GCC 4.5 から入る plugin アーキテクチャによって、同様のことを実現し、llvm-gcc の置き換えを目指しているプロジェクトです。
既にブートストラップが可能なほどの完成度に到達しているとのことです。
DragonEgg - Using LLVM as a GCC backend
ただし、現状では GCC 4.5 本体への patch が必要で、Linux と Darwin 上でしか動かないようです。
(そもそも現状の GCC plugin って、Windows 上で動作するのでしょうか ? 追々確認してみます。)
今後に期待して、見守って行きたいと思います。
続きを読む
2010年03月15日
Hacking on Clang > Testing > Testing using Visual Studio on Windows を参考に、test suite を動かしてみました。
続きを読む
続きを読む
2010年03月11日
前回は Clang フロントエンドだけをビルドしました。
今回は LLVM もビルドして、実際に使ってみます。とはいっても、前回と同様に LLVM.sln を開いて、ALL_BUILD するだけです。時間がかかるかなと思って前回は試さなかったのですが、10 分もかかりませんでした。
lli.exe (LLVM 仮想マシン本体。JVM の java コマンドのようなもの)、llc.exe (ネイティブアセンブリコードへのトランスレータ) の他に、llvm-as.exe や llvm-ld.exe、llvm-nm.exe など、おなじみの binutils ライクなコマンド群が生成されます。
続きを読む
今回は LLVM もビルドして、実際に使ってみます。とはいっても、前回と同様に LLVM.sln を開いて、ALL_BUILD するだけです。時間がかかるかなと思って前回は試さなかったのですが、10 分もかかりませんでした。
lli.exe (LLVM 仮想マシン本体。JVM の java コマンドのようなもの)、llc.exe (ネイティブアセンブリコードへのトランスレータ) の他に、llvm-as.exe や llvm-ld.exe、llvm-nm.exe など、おなじみの binutils ライクなコマンド群が生成されます。
続きを読む
2010年03月09日
Clang (クラン(グ)) は、C/C++/Objective-C のコンパイラフロントエンドです。バックエンドに LLVM (Low-Level Virtual machine) を使います。(GCC をバックエンド(アセンブラ & リンカ代わり) として使い、通常の実行形式を生成することもできます。逆に、GCC のミドルエンド以降を LLVM 向けに改造した llvm-gcc というフロントエンドも存在します。)
ライセンスが BSD ライク なので、FreeBSD が Clgan で GCC を置き換えようとする動きがあったりと、徐々に注目を集めています。
Getting Started: Building and Running Clang を見る限り、Windows 上では VisualStudio 2005/2008 でビルドできるそうなので、さっそく試してみました。
続きを読む
ライセンスが BSD ライク なので、FreeBSD が Clgan で GCC を置き換えようとする動きがあったりと、徐々に注目を集めています。
Getting Started: Building and Running Clang を見る限り、Windows 上では VisualStudio 2005/2008 でビルドできるそうなので、さっそく試してみました。
続きを読む
2010年03月03日
今回はQEMUにデバッガをつなぐ話をします。
- QEMUそのものをgdbで追いかける
- QEMU上の仮想マシンにgdbをつなぐ
- QEMUそのものとその上の仮想マシンを同時に2つのgdbで追いかける