5

c または c++ で書かれたライブラリから Lisp から関数を呼び出すことはできますか? Lisp を拡張するにはどうすればよいですか? これは、システム コールなどを実行する場合に便利です。

4

3 に答える 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

UFFICFFI、そして洗練されたClozure FFIを参照してください。

于 2008-12-18T20:29:56.647 に答える
4

CFFI

于 2008-12-19T01:26:43.380 に答える