Posso estendere Lisp con C ++?
Domanda
Posso chiamare una funzione da Lisp da una libreria scritta in C o C ++? Come posso prolungare lisp? Questo è utile quando si desidera fare alcune chiamate di sistema o cose del genere.
Soluzione
E 'insolito per chiamare codice non lisp da Lisp, e raramente necessarie. CLX (l'implementazione client X11 per CL) non si collega alla realizzazione Xlib ma "parla" X11 direttamente. Su qualsiasi sistema, l'implementazione CL è probabile che abbia già ottimi ganci del sistema operativo di rendering superfluo.
Detto questo, la risposta dipende l'attuazione Lisp:
ECL si può effettivamente ospitare un ambiente di CL in C e semplicemente chiamare cl_eval()
con il codice da eseguire. Questo può consentire di scrivere la vostra applicazione (o host dell'applicazione) in C (o C ++) e "chiamata a" codice Lisp.
CCL , v'è un'interfaccia di chiamata C-compatibile, che ti permette di fare qualcosa di simile :
(with-cstrs ((x "Hello World"))
(#_puts x))
Nella maggior parte delle altre implementazioni CL (come SBCL; e sì questo funziona in ECL e CCL pure) è possibile utilizzare UFFI (o CFFI), che permette semplicemente di chiamare funzioni C, che è quello che gli altri stanno parlando. Se questo è tutto ciò che si vuole fare, allora CFFI è un buon, luogo sicuro per iniziare.
Altri suggerimenti
UFFI e CFFI e il lisciante Clozure FFI
CFFI !