From: Marius Vollmer <mvo@zagadka.ping.de>
Cc: neil@ossau.uklinux.net, raeburn@raeburn.org, emacs-devel@gnu.org
Subject: Re: Emacs Lisp and Guile
Date: 14 Aug 2002 20:50:11 +0200 [thread overview]
Message-ID: <87ofc5tgv0.fsf@zagadka.ping.de> (raw)
In-Reply-To: <200208132247.g7DMl6w07259@wijiji.santafe.edu>
Richard Stallman <rms@gnu.org> writes:
> Having now seen the R5RS description of dynamic-wind, I see it is a
> very low-level mechanism. For the sake of using dynamic-wind for
> dynamic variable bindings, it would be convenient to have a function
> to swap in bindings and a function to swap out bindings. Then
> when you write calls to dynamic-wind, you would call these functions,
> not manipulate bindings directly.
There is a nearly standard macro out there called 'fluid-let' that
encapsulates the process completely. For example
(fluid-let ((case-fold-search #f))
(search-forward ...))
would expand to
(let ((body (lambda () (search-forward ...)))
(outer #f))
(define (swap)
(let ((t outer))
(set! outer case-fold-search)
(set! case-fold-search t)))
(dynamic-wind swap body swap))
> These functions could also have code for correct interaction with
> buffer-local bindings and frame-local bindings.
Does this refer to the fact that buffer-localness and frame-localness
are not completely independent from dynamic scoping? What would need
to change in the above example when case-fold-search would be a
buffer-local variable?
Or do you intend to implement buffer-localness (etc) itself by using
the functions? These functions would then need to run when the
current buffer changes. But dynamic-wind does not react to changes to
the current buffer so we can't use it to run the swapping functions at
the right times, I would say. Can you elaborate?
> Suppose that Guile could run arbitrary code before and after the
> variable reference, for effect only, and the variable reference
> itself would always occur normally. This would not encourage people
> to use variables for jobs that ought to be done by functions, but
> would permit implementation of this optimization, and various sorts
> of forwarding. What do you think of this idea?
I think it's very nice! I have sent a smallish proposal to the
guile-devel list about preparing us for specially constructed
'non-dumb' variables that need to be accessed with scm_variable_ref
and scm_variable_set_x. We can then add whatever code is needed to
these two functions and be sure that they wont be side-stepped.
--
GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3 331E FAF8 226A D5D4 E405
next prev parent reply other threads:[~2002-08-14 18:50 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-20 0:35 Emacs Lisp and Guile Richard Stallman
2002-07-20 8:37 ` Neil Jerram
2002-07-21 20:15 ` Richard Stallman
2002-07-24 22:05 ` Neil Jerram
2002-07-25 18:07 ` Richard Stallman
2002-07-25 19:16 ` Marius Vollmer
2002-07-27 18:53 ` Richard Stallman
2002-07-30 12:20 ` Marius Vollmer
2002-07-31 5:54 ` Richard Stallman
2002-08-01 19:39 ` Marius Vollmer
2002-08-01 20:52 ` Kai Großjohann
2002-08-02 10:23 ` Marius Vollmer
2002-08-02 10:41 ` Kai Großjohann
2002-08-02 12:09 ` Marius Vollmer
2002-08-02 12:37 ` Kai Großjohann
2002-08-05 15:19 ` Marius Vollmer
2002-08-02 22:14 ` Richard Stallman
2002-08-02 22:53 ` Sam Steingold
2002-08-03 15:38 ` Simon Josefsson
2002-08-03 16:15 ` Sam Steingold
2002-08-03 19:35 ` Lars Magne Ingebrigtsen
2002-08-03 20:33 ` Kai Großjohann
2002-08-03 20:40 ` Simon Josefsson
2002-08-03 22:41 ` Sam Steingold
2002-08-04 5:14 ` Eli Zaretskii
2002-08-04 23:26 ` Richard Stallman
2002-08-05 15:58 ` Sam Steingold
2002-08-09 18:02 ` Alex Schroeder
2002-08-11 3:54 ` Richard Stallman
2002-08-04 23:25 ` Richard Stallman
2002-08-05 16:10 ` Sam Steingold
2002-08-10 7:17 ` Noah Friedman
2002-08-10 14:01 ` Alex Schroeder
2002-08-11 16:52 ` Sam Steingold
2002-08-02 17:43 ` Richard Stallman
2002-08-05 16:08 ` Marius Vollmer
2002-08-07 14:24 ` Richard Stallman
2002-08-08 16:35 ` Marius Vollmer
2002-08-09 16:39 ` Richard Stallman
2002-08-12 14:51 ` Marius Vollmer
2002-08-13 1:47 ` Richard Stallman
2002-08-13 19:13 ` Marius Vollmer
2002-08-14 5:15 ` Richard Stallman
2002-08-14 18:26 ` Marius Vollmer
2002-08-15 19:53 ` Richard Stallman
2002-08-19 21:03 ` Marius Vollmer
2002-08-09 6:50 ` Stefan Monnier
2002-08-10 17:16 ` Richard Stallman
2002-08-07 14:24 ` Richard Stallman
2002-08-07 15:38 ` Simon Josefsson
2002-08-08 7:01 ` Richard Stallman
2002-08-08 16:06 ` Marius Vollmer
2002-08-09 16:39 ` Richard Stallman
2002-08-12 13:40 ` Marius Vollmer
2002-08-13 1:47 ` Richard Stallman
2002-08-13 19:17 ` Marius Vollmer
2002-08-14 5:15 ` Richard Stallman
2002-08-14 18:21 ` Marius Vollmer
2002-08-10 14:32 ` Michael Sperber [Mr. Preprocessor]
2002-08-11 3:55 ` Richard Stallman
2002-08-11 8:28 ` Michael Sperber [Mr. Preprocessor]
2002-08-12 17:05 ` Richard Stallman
2002-08-13 6:58 ` Michael Sperber [Mr. Preprocessor]
[not found] ` <ljr8h4803x.fsf@burns.dt.e-technik.uni-dortmund.de>
2002-08-13 22:47 ` Richard Stallman
2002-08-14 18:50 ` Marius Vollmer [this message]
2002-08-15 19:53 ` Richard Stallman
2002-08-19 20:54 ` Marius Vollmer
2002-08-21 0:12 ` Richard Stallman
2002-07-28 8:17 ` Neil Jerram
2002-07-29 17:30 ` Richard Stallman
2002-07-25 4:22 ` Ken Raeburn
2002-11-05 23:28 ` Neil Jerram
2002-11-07 4:49 ` Richard Stallman
2002-11-07 20:32 ` Neil Jerram
2002-11-09 11:54 ` Richard Stallman
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/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ofc5tgv0.fsf@zagadka.ping.de \
--to=mvo@zagadka.ping.de \
--cc=emacs-devel@gnu.org \
--cc=neil@ossau.uklinux.net \
--cc=raeburn@raeburn.org \
/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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
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).