From: Wim O. <wou...@xs...> - 2006-12-05 22:15:06
|
I just started using common lisp and clisp and am playing with program that extracts information from a database. For this I use clsql and load it by using asdf. My little program starts with: (require 'asdf) (asdf:operate 'asdf:load-op 'clsql-sqlite3) (asdf:operate 'asdf:load-op 'clsql) Everything works, but: 1 - If I run it from the command line as: clisp -i my-program.lisp it will take 9.6 seconds before clsql is loaded. 2 - If compile everything with clisp -i my-program.lisp -x '(saveinitmem "mtn-exp" :executable t :norc t) and run the program ./mtn-exp everything is loaded in 0.125 seconds. BUT when I in the resulting repl execute (clsql:connect ...) I get: ** - Continuable Error FFI::FOREIGN-CALL-OUT: no dynamic object named "sqlite3_open" in library :DEFAULT If you continue (by typing 'continue'): Skip foreign object creation The following restarts are also available: ABORT :R1 ABORT Break 1 [2]> If I type "continue" at the prompt it still works. But of course I don't want to type "continue" everytime a ffi call takes place. So my question is: How do I get the load performance which I have with compilation and not the annoying errors. Wim Oudshoorn. |
From: Sam S. <sd...@gn...> - 2006-12-06 02:15:53
|
> * Wim Oudshoorn <jbhqfubb@kf4nyy.ay> [2006-12-05 23:08:36 +0100]: > > I just started using common lisp and clisp and am playing with > program that extracts information from a database. > > For this I use clsql and load it by using asdf. > > My little program starts with: > > (require 'asdf) > > (asdf:operate 'asdf:load-op 'clsql-sqlite3) > (asdf:operate 'asdf:load-op 'clsql) > > > Everything works, but: > > 1 - If I run it from the command line as: > > clisp -i my-program.lisp > > it will take 9.6 seconds before clsql is loaded. try clisp -c my-program clisp -i my-program > 2 - If compile everything with > clisp -i my-program.lisp -x '(saveinitmem "mtn-exp" :executable t :norc t) you are not compiling, you are saving a memory image. > > How do I get the load performance which I have with compilation > and not the annoying errors. clisp -x '(require (quote asdf)) (saveinitmem "clisp-asdf" :executable t)' clisp-asdf -c my-program clisp-asdf -i my-program note that "-c" will compile my-program.lisp into my-program.fas and "-i" will now load my-program.fas instead of my-program.lisp -- Sam Steingold (http://sds.podval.org/) on Fedora Core release 5 (Bordeaux) http://dhimmi.com http://camera.org http://truepeace.org http://palestinefacts.org http://thereligionofpeace.com http://memri.org char*a="char*a=%c%s%c;main(){printf(a,34,a,34);}";main(){printf(a,34,a,34);} |
From: Wim O. <wou...@xs...> - 2006-12-06 11:36:58
|
Thank you for the explanation. But as detailed below, it still does not solve my problems. I am sure it is a small thing, but everything being new I feel like a fish out of the water (stuck). Sam Steingold <sd...@gn...> writes: >> * Wim Oudshoorn <jbhqfubb@kf4nyy.ay> [2006-12-05 23:08:36 +0100]: >> >> My little program starts with: >> >> (require 'asdf) >> >> (asdf:operate 'asdf:load-op 'clsql-sqlite3) >> (asdf:operate 'asdf:load-op 'clsql) >> >> >> Everything works, but: >> >> 1 - If I run it from the command line as: >> >> clisp -i my-program.lisp >> >> it will take 9.6 seconds before clsql is loaded. > > try > clisp -c my-program > clisp -i my-program I tried that first, but when I do the clisp -c I get the error: ;; Loading file /Users/woudshoo/.clisprc ... ;; Loading file /Users/woudshoo/lisp/asdf.lisp ... ;; Loaded file /Users/woudshoo/lisp/asdf.lisp ;; Loaded file /Users/woudshoo/.clisprc ;; Compiling file /Users/woudshoo/lisp/monotone-experiment.lisp ... *** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/Users/woudshoo/lisp/monotone-experiment.lisp" @6>: there is no package with name "CLSQL" 0 errors, 0 warnings And for this I don't know where to start. It seems that my .clisprc is loaded and this sets the asdf repository path (or whatever that is called.) When I do clisp -i it works, interactively it works and with -c it does not work. >> How do I get the load performance which I have with compilation >> and not the annoying errors. > > clisp -x '(require (quote asdf)) (saveinitmem "clisp-asdf" :executable t)' Hm, this works. But it is not the loading of the asdf.lisp file that takes time. It is the loading of clsql package that takes time. > clisp-asdf -c my-program Same error as above Oh just in case it is relevant: nelly:~/lisp woudshoo$ clisp --version GNU CLISP 2.41 (2006-10-13) (built on nelly.oudshoorn.nl [10.0.0.11]) Software: GNU C 4.0.0 20041026 (Apple Computer, Inc. build 4061) gcc -g -O2 -W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type -Wmissing-declarations -Wno-sign-compare -O2 -DUNIX_BINARY_DISTRIB -DUNICODE -DDYNAMIC_FFI -DNO_GETTEXT -I. -L/usr/local/lib -x none libcharset.a libavcall.a libcallback.a -lreadline -lncurses -liconv -L/usr/local/lib -lsigsegv -lc -L/usr/X11R6/lib SAFETY=0 HEAPCODES STANDARD_HEAPCODES GENERATIONAL_GC SPVW_BLOCKS SPVW_MIXED TRIVIALMAP_MEMORY libsigsegv 2.4 libiconv 1.9 libreadline 5.1 Features: (READLINE REGEXP SYSCALLS I18N LOOP COMPILER CLOS MOP CLISP ANSI-CL COMMON-LISP LISP=CL INTERPRETER SOCKETS GENERIC-STREAMS LOGICAL-PATHNAMES SCREEN FFI UNICODE BASE-CHAR=CHARACTER UNIX MACOS) C Modules: (clisp i18n syscalls regexp readline) Installation directory: /usr/local/lib/clisp/ User language: ENGLISH Machine: POWER MACINTOSH (POWER MACINTOSH) rtr-mpls0-rij-nl.agilisys.net [10.48.12.3] |
From: Sam S. <sd...@gn...> - 2006-12-06 14:43:03
|
Wim Oudshoorn wrote: > Sam Steingold <sd...@gn...> writes: >>> * Wim Oudshoorn <jbhqfubb@kf4nyy.ay> [2006-12-05 23:08:36 +0100]: >>> >>> My little program starts with: >>> >>> (require 'asdf) >>> >>> (asdf:operate 'asdf:load-op 'clsql-sqlite3) >>> (asdf:operate 'asdf:load-op 'clsql) please do (asdf:operate 'asdf:compile-op 'clsql-sqlite3) (asdf:operate 'asdf:compile-op 'clsql) once. it might be that you are loading uncompiled code. >> try >> clisp -c my-program >> clisp -i my-program > > I tried that first, but when I do the clisp -c I get the error: > > ;; Loading file /Users/woudshoo/.clisprc ... > ;; Loading file /Users/woudshoo/lisp/asdf.lisp ... > ;; Loaded file /Users/woudshoo/lisp/asdf.lisp this is no good. please compile asdf.lisp ! clisp -q -c ~/lisp/asdf.lisp > ;; Loaded file /Users/woudshoo/.clisprc > ;; Compiling file /Users/woudshoo/lisp/monotone-experiment.lisp ... > *** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/Users/woudshoo/lisp/monotone-experiment.lisp" @6>: there is no package with > name "CLSQL" > > 0 errors, 0 warnings you need to load CLSQL before compiling monotone-experiment.lisp > It is the loading of clsql package that takes time. it should be better once you compile clsql. > Oh just in case it is relevant: always! > nelly:~/lisp woudshoo$ clisp --version > GNU CLISP 2.41 (2006-10-13) (built on nelly.oudshoorn.nl [10.0.0.11]) > Software: GNU C 4.0.0 20041026 (Apple Computer, Inc. build 4061) Could you please make the binary package available to me? I want to publish it in the CLISP SF files section. You will need to add "rawsock" and "libsvm" to "MODULES=" line in your Makefile, do "make distrib" and upload the file clisp-2.41-powerpc-apple...tar.gz to upload.sf.net:/incoming you will be credited in http://sourceforge.net/project/shownotes.php?release_id=455105&group_id=1355 Thanks. Sam. |
From: Wim O. <wou...@xs...> - 2006-12-06 23:34:18
|
Sam Steingold <sd...@gn...> writes: > Wim Oudshoorn wrote: >> Sam Steingold <sd...@gn...> writes: > > please do > (asdf:operate 'asdf:compile-op 'clsql-sqlite3) > (asdf:operate 'asdf:compile-op 'clsql) > once. Done. >> I tried that first, but when I do the clisp -c I get the error: >> >> ;; Loading file /Users/woudshoo/.clisprc ... >> ;; Loading file /Users/woudshoo/lisp/asdf.lisp ... >> ;; Loaded file /Users/woudshoo/lisp/asdf.lisp > > this is no good. > please compile asdf.lisp ! > clisp -q -c ~/lisp/asdf.lisp Done. > >> ;; Loaded file /Users/woudshoo/.clisprc >> ;; Compiling file /Users/woudshoo/lisp/monotone-experiment.lisp ... >> *** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/Users/woudshoo/lisp/monotone-experiment.lisp" @6>: there is no package with >> name "CLSQL" >> >> 0 errors, 0 warnings > > you need to load CLSQL before compiling monotone-experiment.lisp Hm, how do I do that? >> It is the loading of clsql package that takes time. > > it should be better once you compile clsql. I still takes about 6 secs to load all the .fas files on my ccomputer. > Could you please make the binary package available to me? I have written another post about that. Back to my problems. There are some concepts I am apparantly not grasping. And I can't seem to findd the right place in the documentation to enlighten me. So any pointers appreciated. Question/Problem 1: in the directory ~/lisp/ I have the files asdf.lisp, asdf.fas and asdf.lib And if I do the following: nelly:~/lisp woudshoo$ clisp -q -norc [1]> (require 'asdf) *** - LOAD: A file with name ASDF does not exist The following restarts are available: ABORT :R1 ABORT Break 1 [2]> I expected require to look for asdf.fas or asdf.lisp, but it seems not to find it. So what does require exactly do? in the CLHS it says that how require finds its files is implementation dependend so why does this not work. Question/Problem 2: I created a file test-load.lisp with the following content: (load "asdf") (setf asdf:*central-registry* '(*default-pathname-defaults* #p"~/lisp-asdf/")) (asdf:operate 'asdf:load-op 'clsql) Now if I load the file it works: clisp -q -norc test-load.lisp ============================================ nelly:~/lisp woudshoo$ clisp -q -norc test-load.lisp ; loading system definition from /Users/woudshoo/lisp-asdf/clsql.asd into #<PACKAGE ASDF0> ; loading system definition from /Users/woudshoo/lisp-asdf/cffi.asd into #<PACKAGE ASDF1> ; registering #<SYSTEM CFFI #x1A982445> as CFFI 0 errors, 0 warnings ; loading system definition from /Users/woudshoo/lisp-asdf/cffi-uffi-compat.asd into #<PACKAGE ASDF1> ; registering #<SYSTEM CFFI-UFFI-COMPAT #x1A9C2E55> as CFFI-UFFI-COMPAT WARNING: The generic function #<STANDARD-GENERIC-FUNCTION CFFI:FOREIGN-TYPE-SIZE> is being modified, but has already been called. 0 errors, 0 warnings ; registering #<SYSTEM UFFI #x1A9A8079> as UFFI ; registering #<SYSTEM CLSQL #x1A9A98C5> as CLSQL WARNING: The generic function #<STANDARD-GENERIC-FUNCTION PERFORM> is being modified, but has already been called. WARNING: DEFUN/DEFMACRO: redefining macro LOOP-FINISH in /Users/woudshoo/lisp-asdf/clsql-3.7.8/sql/ansi-loop.fas, was defined in /Users/woudshoo/src/clisp-2.41/src/loop.fas WARNING: DEFUN/DEFMACRO: redefining macro LOOP in /Users/woudshoo/lisp-asdf/clsql-3.7.8/sql/ansi-loop.fas, was defined in /Users/woudshoo/src/clisp-2.41/src/loop.fas 0 errors, 0 warnings =========================================== But if I compile the file clisp -q -norc -c test-load.lisp =========================================== nelly:~/lisp woudshoo$ clisp -q -norc -c test-load.lisp ;; Compiling file /Users/woudshoo/lisp/test-load.lisp ... *** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/Users/woudshoo/lisp/test-load.lisp" @3>: there is no package with name "ASDF" 0 errors, 0 warnings =========================================== So perhaps I am confused about what compilation is. Let me see if I can explain. I expect compilation to take the source file and compile it in some other form lets say a .fas file, so that when I load that file I am in exactly the same situation as after loading the original .lisp file, except that everything will work faster. This is obviously not the case with my test-load.lisp. So what does compile do? A very confused, Wim Oudshoorn. |
From: Hoehle, Joerg-C. <Joe...@t-...> - 2006-12-07 15:10:50
|
Wim Oudshorn wrote: >I created a file test-load.lisp with the following content: > (load "asdf") > (setf asdf:*central-registry* > '(*default-pathname-defaults* > #p"~/lisp-asdf/")) > (asdf:operate 'asdf:load-op 'clsql) >So perhaps I am confused about what compilation is. You need to rethink some assumptions & lear more about compilation in CL. Loading this file produces lots of side-effects which would affect the compilation environment: packages are created etc. You should read chapter ?3.2.2 of CLHS or perhaps some other, easier text (sorry, nothing comes to mind). You will get no speed gain by compiling the above file. All it does is 2 function calls and one assignment. What's important when loading is the side effects of performing the calls (e.g. load plenty of other files). What's important is that those other files are compiled. You can tell whether clisp reports loading "asdf.fas" or (slow) "asdf.lisp" etc. Similarly, don't compile .asd files. There would be little benefit. You'd need EVAL-WHEN in order to create a file test-load that could properly compile, so that the run-time and compilation environments become similar. (EVAL-WHEN (load compile eval) (load/require "asdf")) would be a start, or perhaps the more verbose and not equivalent (EVAL-WHEN (:compile-toplevel etc.) #) With ASDF, you won't need (asdf:oos 'asdf:compile-op "mysystem"). IIRC, ASDF will compile before loading if old, so (asdf:oos 'asdf:load-op "mysystem") is enough. Regards, Jorg Hohle |
From: Wim O. <wou...@xs...> - 2006-12-09 14:31:21
|
Everyone thanks for pointing me in the right direction. "Hoehle, Joerg-Cyril" <Joe...@t-...> writes: > You need to rethink some assumptions & lear more about compilation in > CL. Loading this file produces lots of side-effects which would affect > the compilation environment: packages are created etc. You should read > chapter ?3.2.2 of CLHS or perhaps some other, easier text (sorry, > nothing comes to mind). Thanks for the pointer. It is terse reading indeed, and it assumes some familarity with common lisp :-) Hm, but on the topic of manuals and documentation, does anyone know about an introductionary common lisp / clisp text that explains: - how to set up a packages system (like asdf) - how to use packages - how to make packages - explain namespaces (probably called something different in lisp) - how to do the compilation / make clisp images Because I noticed everytime I pick up a new language, it is quite easy to find documentation on: - how to install the compiler/interpreter - how to write hello world - documentation on the syntax and the default libraries But I always struggle with packages, namespaces, linking making libraries etc etc. Well enough complaining ;-) > You'd need EVAL-WHEN in order to create a file test-load that could > properly compile, so that the run-time and compilation environments > become similar. > > (EVAL-WHEN (load compile eval) (load/require "asdf")) would be a start, > or perhaps the more verbose and not equivalent > (EVAL-WHEN (:compile-toplevel etc.) #) This was the trick. I would have figured it out if I didn't keep misreading the error message :-( the error I got was *** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/Users/woudshoo/lisp/monotone-experiment.lisp" @12>: there is no package with name "CLSQL" And somehow I thought asdf was looking for the package and couldn't find it. But actually the error was a few lines below indicating that the package was not defined yet when the first reference was compiled. Ah well, it always takes me some time to find my way in a complete new environment. Wim Oudshoorn. P.S.: What is the most appropriate mailing list to ask questions about common lisp that are not related to clisp itself? |
From: Pascal B. <pj...@in...> - 2006-12-09 15:47:16
|
Wim Oudshoorn writes: > P.S.: What is the most appropriate mailing list to ask questions > about common lisp that are not related to clisp itself? That would be news:comp.lang.lisp usenet, not a mail-list... I don't think there's any usenet<->email gateway active on this newsgroup= . --=20 __Pascal Bourguignon__ http://www.informatimago.com/ "This statement is false." In Lisp: (defun Q () (eq nil (Q))) |
From: Sam S. <sd...@gn...> - 2006-12-07 02:20:21
|
> * Wim Oudshoorn <jbhqfubb@kf4nyy.ay> [2006-12-07 00:33:29 +0100]: > Sam Steingold <sd...@gn...> writes: >> Wim Oudshoorn wrote: >>> Sam Steingold <sd...@gn...> writes: >> >>> ;; Loaded file /Users/woudshoo/.clisprc >>> ;; Compiling file /Users/woudshoo/lisp/monotone-experiment.lisp ... >>> *** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/Users/woudshoo/lisp/monotone-experiment.lisp" @6>: there is no package with >>> name "CLSQL" >>> >>> 0 errors, 0 warnings >> >> you need to load CLSQL before compiling monotone-experiment.lisp > > Hm, how do I do that? e.g., (require 'clsql) or (asdf load "clsql"). > There are some concepts I am apparantly not grasping. > And I can't seem to findd the right place in the documentation > to enlighten me. So any pointers appreciated. > > Question/Problem 1: > > in the directory ~/lisp/ I have the files asdf.lisp, asdf.fas and asdf.lib > And if I do the following: > > nelly:~/lisp woudshoo$ clisp -q -norc > [1]> (require 'asdf) > > *** - LOAD: A file with name ASDF does not exist > The following restarts are available: > ABORT :R1 ABORT > Break 1 [2]> > > I expected require to look for asdf.fas or asdf.lisp, but > it seems not to find it. So what does require exactly do? > in the CLHS it says that how require finds its files > is implementation dependend so why does this not work. http://clisp.cons.org/impnotes/system-dict.html#require http://clisp.cons.org/impnotes/system-dict.html#loadfile http://clisp.cons.org/impnotes/system-dict.html#load-paths > Question/Problem 2: > > I created a file test-load.lisp with the following content: > > (load "asdf") > (setf asdf:*central-registry* > '(*default-pathname-defaults* > #p"~/lisp-asdf/")) > (asdf:operate 'asdf:load-op 'clsql) > > > Now if I load the file it works: > > clisp -q -norc test-load.lisp > ============================================ > nelly:~/lisp woudshoo$ clisp -q -norc test-load.lisp > ; loading system definition from /Users/woudshoo/lisp-asdf/clsql.asd into #<PACKAGE ASDF0> > ; loading system definition from /Users/woudshoo/lisp-asdf/cffi.asd into #<PACKAGE ASDF1> > ; registering #<SYSTEM CFFI #x1A982445> as CFFI > 0 errors, 0 warnings > ; loading system definition from /Users/woudshoo/lisp-asdf/cffi-uffi-compat.asd into #<PACKAGE ASDF1> > ; registering #<SYSTEM CFFI-UFFI-COMPAT #x1A9C2E55> as CFFI-UFFI-COMPAT > WARNING: The generic function #<STANDARD-GENERIC-FUNCTION CFFI:FOREIGN-TYPE-SIZE> is being modified, but has already been called. > 0 errors, 0 warnings > ; registering #<SYSTEM UFFI #x1A9A8079> as UFFI > ; registering #<SYSTEM CLSQL #x1A9A98C5> as CLSQL > WARNING: The generic function #<STANDARD-GENERIC-FUNCTION PERFORM> is being modified, but has already been called. > WARNING: DEFUN/DEFMACRO: redefining macro LOOP-FINISH in /Users/woudshoo/lisp-asdf/clsql-3.7.8/sql/ansi-loop.fas, was defined in > /Users/woudshoo/src/clisp-2.41/src/loop.fas > WARNING: DEFUN/DEFMACRO: redefining macro LOOP in /Users/woudshoo/lisp-asdf/clsql-3.7.8/sql/ansi-loop.fas, was defined in > /Users/woudshoo/src/clisp-2.41/src/loop.fas > 0 errors, 0 warnings > =========================================== > > > But if I compile the file > > clisp -q -norc -c test-load.lisp > =========================================== > nelly:~/lisp woudshoo$ clisp -q -norc -c test-load.lisp > ;; Compiling file /Users/woudshoo/lisp/test-load.lisp ... > *** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/Users/woudshoo/lisp/test-load.lisp" @3>: there is no package with name "ASDF" > > 0 errors, 0 warnings > =========================================== > you need something like (eval-when (:compile :load-tople) (load "asdf") (asdf load "clsql")) in general, I think it would be a good idea for you to create an image that contains asdf and clsql and always use it. -- Sam Steingold (http://sds.podval.org/) on Fedora Core release 5 (Bordeaux) http://dhimmi.com http://ffii.org http://memri.org http://jihadwatch.org http://pmw.org.il http://thereligionofpeace.com Microsoft: announce yesterday, code today, think tomorrow. |
From: Sam S. <sd...@gn...> - 2006-12-07 02:21:43
|
> * Wim Oudshoorn <jbhqfubb@kf4nyy.ay> [2006-12-05 23:08:36 +0100]: > > clisp -i my-program.lisp -x '(saveinitmem "mtn-exp" :executable t :norc t) > > and run the program > > ./mtn-exp > > everything is loaded in 0.125 seconds. BUT when > I in the resulting repl execute > > (clsql:connect ...) > > I get: > > ** - Continuable Error > FFI::FOREIGN-CALL-OUT: no dynamic object named "sqlite3_open" in library :DEFAULT > If you continue (by typing 'continue'): Skip foreign object creation > The following restarts are also available: > ABORT :R1 ABORT > Break 1 [2]> how is clsql:connect defined? -- Sam Steingold (http://sds.podval.org/) on Fedora Core release 5 (Bordeaux) http://thereligionofpeace.com http://camera.org http://pmw.org.il http://dhimmi.com http://iris.org.il http://jihadwatch.org Is there another word for synonym? |
From: Hoehle, Joerg-C. <Joe...@t-...> - 2006-12-07 15:16:55
|
Wim Oudshoorn wrote: > (asdf:operate 'asdf:load-op 'clsql-sqlite3) > FFI::FOREIGN-CALL-OUT: no dynamic object named "sqlite3_open" in library :DEFAULT I haven't looked at current CLSQL. In version 3.5.4, I see that sqlite-api supplies the :module "sqlite" argument, which is good. You need to provide a mapping from that name to the shared object file (assuming UNIX). No, wait, you're using the CFFI backend, which does not know about modules and libraries AFAIK. CFFI only looks up names in the current process namespace AFAIK. Maybe a simple (ffi::foreign-library "/usr/lib/sqlite.dylib") does the trick for your current session?? It should open the library and make all its names available (at least in Linux). You need to call that before loading clsql. Then try to figure out how the other DB backends do that for CFFI on MacOS with CLISP. Regards, Jorg Hohle |
From: Pascal B. <pj...@in...> - 2006-12-07 15:49:13
|
Hoehle, Joerg-Cyril writes: > Wim Oudshoorn wrote: > > (asdf:operate 'asdf:load-op 'clsql-sqlite3) > > FFI::FOREIGN-CALL-OUT: no dynamic object named "sqlite3_open" in > library :DEFAULT >=20 > I haven't looked at current CLSQL. In version 3.5.4, I see that > sqlite-api supplies the :module "sqlite" argument, which is good. You > need to provide a mapping from that name to the shared object file > (assuming UNIX). >=20 > No, wait, you're using the CFFI backend, which does not know about > modules and libraries AFAIK. CFFI only looks up names in the current > process namespace AFAIK. >=20 > Maybe a simple (ffi::foreign-library "/usr/lib/sqlite.dylib") does the > trick for your current session?? > It should open the library and make all its names available (at least i= n > Linux). > You need to call that before loading clsql. Then try to figure out how > the other DB backends do that for CFFI on MacOS with CLISP. Well there are two ways to indicate to CFFI to load libraries. (cffi:define-foreign-library <libname> (:unix (:or "<libname>.so.<version>" "<libname>.so")) (t (:default "<libname>"))) (cffi:use-foreign-library <libname>) http://common-lisp.net/project/cffi/manual/html_node/Tutorial_002dLoading= .html#Tutorial_002dLoading and also directly cffi:load-foreigh-library (which is used by cffi:use-foreign-library): http://common-lisp.net/project/cffi/manual/html_node/_002aforeign_002dlib= rary_002ddirectories_002a.html#_002aforeign_002dlibrary_002ddirectories_0= 02a (With some variant on MacOSX for frameworks). The question is whether the libraries are re-open automatically when we reload a saved image? --=20 __Pascal Bourguignon__ http://www.informatimago.com/ This is a signature virus. Add me to your signature and help me to live. |
From: Hoehle, Joerg-C. <Joe...@t-...> - 2006-12-07 17:29:38
|
Pascal Bourguignon asks: >The question is whether the libraries are re-open automatically when >we reload a saved image? CLISP has been doing that for ages. It's a convenience for users. I'm not really happy with it because it also means that you can be thrown into the debugger at startup of clisp when that library becomes unavailable, even if you don't care a pence about it for your current work! I'm not sure we ever switched to late-opening-when-called. That has other quirks: Suppose (validp #<foreign-function x>) -> NIL which means that foreign thing is dead. Now invoke that dead function, (funcall #<foreign-function x>): suddenly library is reopened, and the function is alive again?!? (validp #<foreign-function x>) -> T Do you find that understandable and conceptually undisputable? Zombies! Regards, Jorg Hohle. |
From: Wim O. <wou...@xs...> - 2006-12-09 14:37:41
|
"Hoehle, Joerg-Cyril" <Joe...@t-...> writes: > Pascal Bourguignon asks: >>The question is whether the libraries are re-open automatically when >>we reload a saved image? > CLISP has been doing that for ages. As I mentioned, after ignoring the error FFI::FOREIGN-CALL-OUT: no dynamic object named "sqlite3_open" in library :DEFAULT everything worked as expected. What I don't know if this error is triggered by code in clsql and a fix in clsql is in order or that something else is going on. However, I will follow the advice as posted here and try to make my own image without having preloaded the dynamic library. And I still a little overwhelmed with all the new concepts so I will let it rest until it really gets in my way. Thanks for all the help. Wim Oudshoorn. |
From: Wim O. <wou...@xs...> - 2006-12-11 16:53:42
|
Sam Steingold <sd...@gn...> writes: > Wim Oudshoorn wrote: >> "Hoehle, Joerg-Cyril" <Joe...@t-...> writes: >> >>> Pascal Bourguignon asks: >>>> The question is whether the libraries are re-open automatically when >>>> we reload a saved image? >>> CLISP has been doing that for ages. >> As I mentioned, after ignoring the error >> FFI::FOREIGN-CALL-OUT: no dynamic object named "sqlite3_open" in >> library :DEFAULT >> everything worked as expected. What I don't know if >> this error is triggered by code in clsql and a fix in clsql is >> in order or that something else is going on. > > i.e., SQL worked as expected, as if there was no error? > this implies a bug in CFFI (or whatever FFI wrapper SQL is using): > it should not try to refresh the foreign function object using the > :DEFAULT dll. yes. For every (new?) function that is called I got that error. If I choose 'continue' the results are as expected. I thought maybe the result was cached. But I used a command line argument to choose the database to connect and it still worked. Wim Oudshoorn. |