Re: [Funk-devel] Queries and States in Funk - Design Review
Status: Planning
Brought to you by:
awgh
From: felix w. <bun...@gm...> - 2007-09-28 07:36:40
|
On 9/27/07, Ben Kurtz <bk...@al...> wrote: > > The issue isn't with "include" itself. The problem is how to include eggs > with source that will work from the interpreter or compiled. > > Of use/require/require-extension, I haven't found a method of using an egg > that will work compiled and interpreted without changing code. The file > demo1.scm is an example of my workaround for compilation. > The usual approach is to split an egg into two parts: a compile-time part (installed in a .setup script, with a "(syntax)" property) and a run-time part (setup: "(require-at-runtime ...)" property). Doing a "require-extension" will load the compile-time part in both the interpreter and the compiler and you can here differentiate between the two cases via "(cond-expand (compiling ...) (else ...))". It sounds somewhat complicated but really isn't. Here a simple example: % cat foo.scm (cond-expand (compiling (print "compiled foo.")) (else (print "interpreted foo."))) % cat foo-base.scm (print "foo base is executing.") % cat foo.setup (compile -s foo-base.scm) (install-extension 'foo '("foo.scm" "foo-base.so") '((syntax) (require-at-runtime foo-base))) % cat x.scm (require-extension foo) % chicken-setup foo /home/fwinkel/bin/csc -feature compiling-extension -s foo-base.scm cp -r foo.scm /home/fwinkel/lib/chicken/3/foo.scm chmod a+r /home/fwinkel/lib/chicken/3/foo.scm rm -fr /home/fwinkel/lib/chicken/3/foo-base.so cp -r foo-base.so /home/fwinkel/lib/chicken/3/foo-base.so chmod a+r /home/fwinkel/lib/chicken/3/foo-base.so chmod a+r /home/fwinkel/lib/chicken/3/foo.setup-info % csi -R foo -nqb interpreted foo. foo base is executing. % csc x.scm compiled foo. % x foo base is executing. cheers, felix |