D 言語で FFI をやるライブラリを作りました。これでたぶん phobos 呼べまくりなので適当に自作言語でも作ってください。うそですもうちょいまともな reflection が欲しいですね。まぁそれも作る。
TODO:
色んな型の対応とかはそれなりにしたとは思います…可変長引数とかもやったし。でもまぁ普通に見落としあるかもしれません。
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 が入ってたことで、アーキテクチャと機能しぼれば、まぁ難しくないよなと思ってたけど、本当に簡単に作ってあるなーとか。