2008-12-18 190 views
5

我可以從c或C++編寫的庫中調用lisp函數嗎?我該如何擴展lisp? 當你想要做一些系統調用或類似的東西時,這很有用。我可以用C++擴展lisp嗎?

+5

我可以用卡丁車發動機來延長我的保時捷嗎? :-) – 2008-12-18 20:33:36

回答

8

從lisp中調用非lisp代碼是很少見的,而且很少有必要。 CLX(CL的X11客戶端實現)不鏈接到Xlib實現,而是直接「說出」X11。在任何系統上,你的CL實現可能已經具有優秀的操作系統鉤子,這使得不必要的。

這就是說,答案取決於Lisp實現:

ECL你其實可以℃在舉辦CL環境,只需調用cl_eval()用代碼來執行。這可以讓你用C(或C++)編寫應用程序(或應用程序主機)並「調用」lisp代碼。

CCL,有一個C兼容調用接口,它可以讓你做這樣的事情:

(with-cstrs ((x "Hello World")) 
    (#_puts x)) 

在其他多數CL實現(像SBCL;是的這部作品在ECL和CCL,以及)你可以使用UFFI(或CFFI),它只是讓你調用C函數,這是其他人正在討論的。如果這就是你想要做的,那麼CFFI是一個很好,安全的開始。

+0

uffi早已過時... – 2008-12-20 01:05:17

相關問題