c または c++ で書かれたライブラリから Lisp から関数を呼び出すことはできますか? Lisp を拡張するにはどうすればよいですか? これは、システム コールなどを実行する場合に便利です。
4221 次
3 に答える
8
Lisp から非 Lisp コードを呼び出すことは珍しく、ほとんど必要ありません。CLX (CL の X11 クライアント実装) は、Xlib 実装にリンクしていませんが、X11 を直接「話します」。どのシステムでも、CL 実装には、これを不要にする優れたオペレーティング システム フックが既にある可能性があります。
つまり、答えは Lisp の実装に依存します。
ECLでは、実際に C の下で CL 環境をホストcl_eval()
し、実行するコードを呼び出すだけです。これにより、アプリケーション (またはアプリケーション ホスト) を C (または C++) で記述し、Lisp コードを「呼び出す」ことができます。
CCLには、次のようなことができる C 互換の呼び出しインターフェイスがあります。
(with-cstrs ((x "Hello World"))
(#_puts x))
他のほとんどの CL 実装 (SBCL など。はい、これは ECL と CCL でも機能します) では、UFFI (または CFFI) を使用して、他の人が話している C 関数を簡単に呼び出すことができます。やりたいことがこれだけなら、CFFI は適切で安全な出発点です。
于 2008-12-19T02:34:42.277 に答える
5
UFFIとCFFI、そして洗練されたClozure FFIを参照してください。
于 2008-12-18T20:29:56.647 に答える
4
CFFI!
于 2008-12-19T01:26:43.380 に答える