From: Rob Browning <rlb@defaultvalue.org>
Cc: Marius Vollmer <marius.vollmer@uni-dortmund.de>, guile-devel@gnu.org
Subject: Re: scm_* API extension? [was] scm_* API question
Date: Wed, 31 Jul 2002 16:59:35 -0500 [thread overview]
Message-ID: <87ado7a794.fsf@raven.i.defaultvalue.org> (raw)
In-Reply-To: <20020731182124.GD6561@www> (rm@fabula.de's message of "Wed, 31 Jul 2002 20:21:24 +0200")
rm@fabula.de writes:
> GuileBind a-symbol '(arbitrary (guile data) structure)
> i.e. i want guile to 'read' from the configuration file and bind
> 'a-symbol' to whatever was read. As a side note: as a quick hack i
> put the symbol into the module but i'd rather like to use something
> like an environment i can set up myself (i hope setting up an
> environment isn't to expensive performance wise), but i have way too
> little understanding about how to do this right now. But it would
> make a _way_ cool web environment -- full control over the env.
> means secure execution as well as probably some nice passing on of
> context.
You may want to look at ice-9/safe.scm and ice-9/safe-r5rs.scm. You
can see how to at least create your own anonymous modules:
(use-modules (ice-9 safe))
(define my-module (make-safe-module))
(eval 'car my-module)
#<primitive-procedure car>
or if you want an even more limited envt:
(use-modules (ice-9 safe-r5rs))
(define my-module (null-environment 5))
(eval 'if my-module)
#<primitive-macro! if>
(eval 'car my-module)
ABORT: (unbound-variable)
and then:
(module-define! my-module 'my-func (lambda (x) x))
etc. There's also a module-ref function and a module-use! function...
> BTW, one reasons i do use the module system is the impicit cacheing
> i get: a module gets loaded only once, and that does make a
> difference in response time compared to the initial 'eval a file per
> request' aproach of mod_guile.
Well that may or may not be the right thing to do if you're *just*
using the module system for the caching. In that case, you may be
better off to implement the caching yourself (via a hash table or
whatever) and leave the module system to more static modules.
For example, depending on what you're wanting to do, you might want to
allow different requests to be handled inside separate namespaces,
though they're all using a common set of code. OTTOMH, I think you
could do this by putting the common functionality into a module, say
foo.scm, then doing something like this for *each* request:
(use-modules (foo))
(define foo-module (resolve-module '(foo)))
;; For each request...
(define next-request-envt (make-safe-module))
(module-use! next-request-envt (module-public-interface foo-module))
(define request-form (list handler-sym current-url-string))
(eval request-form next-request-envt)
Marius, etc. Please correct any inaccuracies above -- I'm just going
from what I've gathered while poking around. I suspect we need more
thorough documentation of the acceptable usage of the anonymous module
stuff.
--
Rob Browning
rlb @defaultvalue.org, @linuxdevel.com, and @debian.org
Previously @cs.utexas.edu
GPG=1C58 8B2C FB5E 3F64 EA5C 64AE 78FE E5FE F0CB A0AD
_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/guile-devel
next prev parent reply other threads:[~2002-07-31 21:59 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-30 12:14 scm_* API question rm
2002-07-31 1:09 ` Christopher Cramer
2002-07-31 10:03 ` scm_* API extension? [was] " rm
2002-07-31 10:10 ` Marius Vollmer
2002-07-31 18:21 ` rm
2002-07-31 21:59 ` Rob Browning [this message]
2002-08-01 10:10 ` rm
2002-08-01 16:51 ` Rob Browning
2002-08-05 15:08 ` Marius Vollmer
2002-08-05 16:06 ` rm
2002-08-05 16:49 ` Marius Vollmer
2002-07-31 20:06 ` Christopher Cramer
2002-07-31 22:14 ` Rob Browning
2002-08-01 9:41 ` rm
2002-08-05 17:51 ` Marius Vollmer
2002-08-05 18:12 ` Han-Wen Nienhuys
2002-08-05 18:45 ` Rob Browning
2002-08-05 18:31 ` Rob Browning
2002-08-05 18:33 ` rm
2002-08-05 15:12 ` Marius Vollmer
2002-07-31 10:11 ` Marius Vollmer
2002-07-31 10:30 ` rm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ado7a794.fsf@raven.i.defaultvalue.org \
--to=rlb@defaultvalue.org \
--cc=guile-devel@gnu.org \
--cc=marius.vollmer@uni-dortmund.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).