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 が入ってたことで、アーキテクチャと機能しぼれば、まぁ難しくないよなと思ってたけど、本当に簡単に作ってあるなーとか。