FFI for DMD functions

D 言語で FFI をやるライブラリを作りました。これでたぶん phobos 呼べまくりなので適当に自作言語でも作ってください。うそですもうちょいまともな reflection が欲しいですね。まぁそれも作る。

http://shinh.skr.jp/d/ffi.tgz

TODO:

  • new をなんとかする
  • delegate を作れるようにする
  • GDC 対応
  • C 対応 (たぶん GDC 対応と同時に終わる)
  • x86 以外対応 (PPCx86_64 くらいはしたいかな)

色んな型の対応とかはそれなりにしたとは思います…可変長引数とかもやったし。でもまぁ普通に見落としあるかもしれません。

import ffi;
struct S {
    byte[7] v;
}
S func(S s, int ai) {
    foreach (inout v; s.v) v += ai;
    return s;
}
void main() {
    FFI f;
    S a, r;
    int ai = -10;
    foreach (i, inout v; a.v) v = -1-i;
    f.setFp(&func);
    f.addArg(&a);
    f.addArg(&ai);
    f.setRet(&r);
    assert(f.call() == 0);
    for (int i = 0; i < r.v.length; i++) {
        assert(r.v[i] == -i-11);
    }
}

どうでもいいけど sofs 見て一番ほえーと思ったのは、実は call_i386.s という名前で普通に FFI が入ってたことで、アーキテクチャと機能しぼれば、まぁ難しくないよなと思ってたけど、本当に簡単に作ってあるなーとか。

http://d.hatena.ne.jp/w_o/20061004#p1

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h