From: John M. <jm...@ma...> - 2005-05-10 13:57:39
|
Hi; Reasonably newbie question. Short version: how do I "call back" a particular lisp function from FFI land? Examples would be great (the more, the merrier -- especially if they are x86 Linux based). I am working on generating sb-alien bindings from gccxml, and I have gotten to the point where I can call C++ code from Lisp. Unfortunately for me, some of the code (a networking stack) is callback based. Polling would be too inefficient (the C++ code already dispatches on the type of the packet, and one can place callbacks on particular types). I RTFM, and it has a cryptic recommendation to check out funcall0 through funcall3, which appear in the machine-specific runtime sources. However, it wasn't clear to me how to marshall the right arguments from Lisp and pass them to the FFI routine and then get the "right" Lisp function called with the args. I would prefer not to hack up the C++ library (as I will be tracking new versions as they appear), but it is OK if I have to write C++ glue code (although I would obviously prefer to automate this as much as is possible). Thanks, -jm -- ==== John Morrison ==== MAK Technologies Inc. ==== 10 Fawcett Street, Cambridge, MA 02138 ==== http://www.mak.com/ ==== vox:617-876-8085 x115 ==== fax:617-876-9208 ==== jm...@ma... |
From: Nikodemus S. <nik...@ra...> - 2005-05-10 14:43:33
|
On Tue, 10 May 2005, John Morrison wrote: > Reasonably newbie question. Short version: how do I "call back" a > particular lisp function from FFI land? Examples would be great (the > more, the merrier -- especially if they are x86 Linux based). Short answer: with great pain. Long answer: SBCL doesn't yet support proper callbacks from C, though this is in the works. You can either: (i) Use the funcall0 and fried for this. For a simple example (not updated for current SBCL, so may not work as-is) see http://www.niksula.cs.hut.fi/~tsiivola/tmp/sb-callhacks.lisp (ii) Use the alien-function patch by Thomas Burdic (which is being used as basis for callbacks in SBCL proper. See sbcl-callable module in the CVS. (iii) Wait for the functionality to be merged. I'm estimating between a few weeks and a few of months for this, depending on how busy I am. Cheers, -- Nikodemus Schemer: "Buddha is small, clean, and serious." Lispnik: "Buddha is big, has hairy armpits, and laughs." |
From: John M. <jm...@ma...> - 2005-05-10 15:12:59
|
Hi; On Tuesday 10 May 2005 10:43 am, Nikodemus Siivola wrote: > (i) Use the funcall0 and fried for this. For a simple example > (not updated for current SBCL, so may not work as-is) see > http://www.niksula.cs.hut.fi/~tsiivola/tmp/sb-callhacks.lisp Via my fifth Google attempt (first four before I sent the email), I actually got a variant of something (callback-sbcl.lisp) I take to be quite list this, and made one bug fix, and (lo and behold) it seems to work. (Yeah, well, I suppose since I haven't tested it brutally yet, I should not tempt The Fates by using the word "work.") I didn't even have to write a line of glue code. Thanks for the suggestion. I shall see how different these files are, and report back to the group. This is bloody miraculous stuff (not mine -- the stuff I'm able to use). You cannot believe how, er, pyched I am to be able to see the light at the end of the dark C++ tunnel. Using all this C++ networking and computational geometry from CL would be bliss. -jm -- ==== John Morrison ==== MAK Technologies Inc. ==== 10 Fawcett Street, Cambridge, MA 02138 ==== http://www.mak.com/ ==== vox:617-876-8085 x115 ==== fax:617-876-9208 ==== jm...@ma... |
From: Nikodemus S. <nik...@ra...> - 2005-05-10 15:18:11
|
On Tue, 10 May 2005, John Morrison wrote: > Via my fifth Google attempt (first four before I sent the email), I > actually got a variant of something (callback-sbcl.lisp) I take to be Mayhaps this is one or another version of the Thomas' patch? I think at least lambda-gtk cvs includes it too. Cheers, -- Nikodemus Schemer: "Buddha is small, clean, and serious." Lispnik: "Buddha is big, has hairy armpits, and laughs." |
From: Rick T. <ta...@ui...> - 2005-05-10 17:34:53
|
> Mayhaps this is one or another version of the Thomas' patch? I think > at least lambda-gtk cvs includes it too. > Yes the lamdba-gtk sources use Thomas Burdick's code -- works great on x86 but not on OS X. Rick Taube Associate Professor, Composition/Theory School of Music University of Illinois, Urbana IL 61821 USA Net: taube@uiuc Fax: 217 244 8319 Vox: 217 244 2684 |
From: R. M. <rm...@mh...> - 2005-05-10 22:26:09
|
On Tue, 10 May 2005 10:52:52 -0500, Rick Taube wrote: > >> Mayhaps this is one or another version of the Thomas' patch? I think >> at least lambda-gtk cvs includes it too. >> > > Yes the lamdba-gtk sources use Thomas Burdick's code -- works great on > x86 but not on OS X. > Hmm, i just tried to get it (the patch you distribute) working with sbcl-0.9 Linux/PPC. I get the following error: READER-ERROR at 2424 (line 57, column 33) on #<FD-STREAM for "file \"/usr/local/src/LISP/sbcl-af/static-vector.lisp\"" {484A47A1}>: Symbol "SYSTEM-AREA-COPY" not found in the SB-KERNEL package Ralf Mattes > Rick Taube > Associate Professor, Composition/Theory School of Music University of > Illinois, Urbana IL 61821 USA Net: taube@uiuc Fax: 217 244 8319 Vox: 217 > 244 2684 > > > > ------------------------------------------------------- This SF.Net > email is sponsored by Oracle Space Sweepstakes Want to be the first > software developer in space? Enter now for the Oracle Space Sweepstakes! > http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click |
From: Rick T. <ta...@ui...> - 2005-05-10 23:30:02
|
Im sorry but I have no possibility of booting linux/ppc to help with this! --rick > Hmm, i just tried to get it (the patch you distribute) working with > sbcl-0.9 Linux/PPC. > I get the following error: > > READER-ERROR at 2424 (line 57, column 33) on #<FD-STREAM for "file > \"/usr/local/src/LISP/sbcl-af/static-vector.lisp\"" {484A47A1}>: > Symbol "SYSTEM-AREA-COPY" not found in the SB-KERNEL package |
From: R. M. <rm...@mh...> - 2005-05-10 23:56:52
|
On Tue, 10 May 2005 18:29:54 -0500, Rick Taube wrote: > Im sorry but I have no possibility of booting linux/ppc to help with > this! > --rick Oh, i didn't expect you too. This is a result of the recent change in the bit-twiddling functions in sbcl. There are now a whole bunch of opperations instead of system-area-copy: sb-kernel::system-area-ub4-copy sb-kernel::system-area-ub1-copy sb-kernel::system-area-ub2-copy sb-kernel::system-area-ub8-copy Since i'm not too familiar with sbcl's internals (heck, i'm a lute player ... :) i hope that Thomas will update this stuff. Cheers Ralf Mattes ...> >> Hmm, i just tried to get it (the patch you distribute) working with >> sbcl-0.9 Linux/PPC. >> I get the following error: >> >> READER-ERROR at 2424 (line 57, column 33) on #<FD-STREAM for "file >> \"/usr/local/src/LISP/sbcl-af/static-vector.lisp\"" {484A47A1}>: >> Symbol "SYSTEM-AREA-COPY" not found in the SB-KERNEL package > > > > ------------------------------------------------------- This SF.Net > email is sponsored by Oracle Space Sweepstakes Want to be the first > software developer in space? Enter now for the Oracle Space Sweepstakes! > http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click |
From: Thomas F. B. <tfb@OCF.Berkeley.EDU> - 2005-05-11 07:39:45
|
R. Mattes writes: > On Tue, 10 May 2005 10:52:52 -0500, Rick Taube wrote: > > > > >> Mayhaps this is one or another version of the Thomas' patch? I think > >> at least lambda-gtk cvs includes it too. > >> > > > > Yes the lamdba-gtk sources use Thomas Burdick's code -- works great on > > x86 but not on OS X. > > > > Hmm, i just tried to get it (the patch you distribute) working with > sbcl-0.9 Linux/PPC. Unless someone has added it, there is no Linux/PPC support. It works with Linux/x86, Solaris/SPARC, and Darwin/PPC (there were a couple minor bugs in the Darwin/PPC, that I fixed in some version of the "patch", but they could be worked around by lying about the affected types). > I get the following error: > > READER-ERROR at 2424 (line 57, column 33) on #<FD-STREAM for "file > \"/usr/local/src/LISP/sbcl-af/static-vector.lisp\"" {484A47A1}>: > Symbol "SYSTEM-AREA-COPY" not found in the SB-KERNEL package There's a branch in CVS with this in it, so presumably it uses a SYSTEM-AREA-COPY variant that matches what's in its kernel. I certainly won't be picking this up again until June or July, but Nikodemus seems to be interested, so maybe he'll clean it up before then. |
From: Nikodemus S. <nik...@ra...> - 2005-05-11 07:40:30
|
On Wed, 11 May 2005, R. Mattes wrote: > READER-ERROR at 2424 (line 57, column 33) on #<FD-STREAM for "file > \"/usr/local/src/LISP/sbcl-af/static-vector.lisp\"" {484A47A1}>: > Symbol "SYSTEM-AREA-COPY" not found in the SB-KERNEL package Sounds like the right time to note that the stuff in the cvs module sbcl-callables isn't supported: it's there so purely for developer convenience, and I at least have no intention of keeping it up-to date with SBCL -- preferring to rather spend that time working towards merging something based on it. This is not to say that people needing callbacks now should not use it, but I'd rather foist the maintenance burden to them... Apropos, the SYSTEM-AREA-COPY should probably be UB32-BASH-COPY. Cheers, -- Nikodemus Schemer: "Buddha is small, clean, and serious." Lispnik: "Buddha is big, has hairy armpits, and laughs." |
From: Mario M. <mo...@ig...> - 2005-05-10 15:14:34
|
John Morrison <jm...@ma...> writes: > Reasonably newbie question. Short version: how do I "call back" a > particular lisp function from FFI land? Examples would be great (the > more, the merrier -- especially if they are x86 Linux based). There is another possibility that would get you going for now. There is a callbacks implementation for sbcl (on x86) here: http://common-lisp.net/project/lgtk/callback-sbcl.lisp (haven't tested it for 0.9.0, though). Just compile it, load it, and dump a core with it doing (save-lisp-and-die "callback-corefile"). Now if you just use this core instead of the default one you have the functionality. There are examples in the file that show you how it works. The part with the new core is necessary, so that the GC doesn't move the table with the trampolines around. Regards, Mario. |