[Ecls-list] embedding questions

Juan Jose Garcia-Ripoll juanjose.garciaripoll at gmail.com
Sat Dec 8 10:13:04 UTC 2012


On Sat, Dec 8, 2012 at 8:46 AM, Peter Keller <psilord at cs.wisc.edu> wrote:

> I'm about to use ECL for some embedding work, namely having a front
> end C interface to a well-known C plugin system with an ECL backend
> implementing all of the plugin functionality.
>

Good! Please report both success and any problems you may find.


> I have a few questions before I begin:
>
> 1. Is the API denoted in ecl/externals.h pretty stable? Do people think
> it is going to change much in the future?
>

Pretty much stable for all prefixed names (ecl_, cl_, si_). Not prefixed
names will get prefixed in a near future, with a compilation flag allowing
to use the old names.

But try to stay away from non-standard Common Lisp functions, just in case.


> 2. Are there any issues or special considerations with creating CLOS
> objects and then calling methods on them from the C side? Will those
> methods dispatch correctly on the arguments without additional poking
> from the C side?
>

I do not understand your concerns here. Function calls using a symbol name
work the same in the interpreted and compiled world, and in the compiled
world we use the same code that you will use in C.


> 3. I have a situation where I have C structures full of data and want
> to push them into/bring them out of the Lisp side. Are things like
> si_make_structure what I'm supposed to use on the C side? Are there
> idioms I should know about to perform this type of data translation?
>

NO! Please learn to use foreign function interfaces, either the ones
supplied by ECL, http://ecls.sourceforge.net/new-manual/ or some other one,
such as CFFI.

Note that it is definitely easier to write C code embedded in lisp code
than try to reproduce all functionality of lisp in your plugin, which is
why you should consider using ECL to compile your code.


> 4. I will have a couple of C files and a pile of lisp files when I'm
> done. I assume that I'd just compile and assemble them into a shared
> library as denoted elsewhere in the docs and on this list? Are the ecl
> non-private functions and symbols minimized in the exports of the
> library to lessen the chances of stomping on something in the
> application when the plugin gets loaded?
>

Lisp files only export an init function with a very ugly name and whatever
function name that you declare it to export (there is some obscure
declaration for that, but right now I do not remember which one).

5. If I si_safe_eval something like (setf a 3), then later si_safe_eval
> on the variable a, is that defined? Are toplevel bindings of specials,
> functions, macros, persistent between invocations to si_safe_eval?


This question is not related to the evaluation, but to Common Lisp
environments. Each thread has its own environment, plus there is a global
environment that encompasses all of them. When you evaluate code in a
thread, it affects both of those environments.

* If there was a global variable binding around your evaluated form and you
assign to that variable, then the change stays local

* If there was a thread-local binding, then the change affects only that
thread

* Otherwise the change affects the global environment.

Really, there is nothing different in embedding ECL from running normal
lisp code. Please use this for reasoning about how things work: your
standard ECL interpreter is just a stupid embedding of ECL in a four lines
program!

Juanjo

-- 
Instituto de Física Fundamental, CSIC
c/ Serrano, 113b, Madrid 28006 (Spain)
http://juanjose.garciaripoll.googlepages.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/ecl-devel/attachments/20121208/9a1555ed/attachment.html>


More information about the ecl-devel mailing list