unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Miles Bader <miles@lsi.nec.co.jp>
Cc: Lars Brinkhoff <lars@nocrew.org>, emacs-devel@gnu.org
Subject: Re: User-reserved element in byte code vectors
Date: 06 May 2004 12:55:49 +0900	[thread overview]
Message-ID: <buou0yuw6nu.fsf@mcspd15.ucom.lsi.nec.co.jp> (raw)
In-Reply-To: <E1BLStX-00053u-US@fencepost.gnu.org>

Richard Stallman <rms@gnu.org> writes:
> Instead we could dedicate slot 7 to a vector of curried args.  That
> would not interfere with other uses of other slots.

I'm a bit confused by how Lars is suggesting that byte-code vectors be
used for currying.  From the Ffuncall code-snipped he posted, I gather
that he was saying that the curried args be just a way to attach magic
arguments to an existing byte-code vector.

However currying is usually used as a way of _wrapping_ an existing
function.  Morever, it should (1) support interpreted functions as well,
and (2) be efficient (no consing when calling a curried function, and
ideally, little additional overhead compared to calling a non-curried
function).

Using his code, one could use byte-code objects with the traditional
first 6-slots containing a special `currying trampoline' function, but
really I'm not sure the point -- doing that seems to have lots of
disadvantages:

  (1) It would require consing for each call in many cases

  (2) It would incur extra time overhead when calling the curried
       function (executing the trampoline function),

  (3) Constructing curried functions would be a lot more heavyweight,
      because the various magic byte-code bits have to be constructed
      (_especially_ if you tried to do analysis to avoid some consing
      overhead by not using &rest when possible).

  (4) If you're going to construct special trampoline functions anyway,
      why not just stick the curried arguments into the byte-code
      constant vector in the first place?

So while I can see that maybe using a non-standard vector type like
byte-code vectors could be a good idea, the current suggestions don't
seem very good.

How about the following:  If a byte-code vector's first element is
`curry', treat the remaining elements the same way my current (normal
vector) currying implementation works, otherwise treat it as a normal
byte-code function.  Since the first element in a normal byte-code
object is an arg-list, it should never be an atom, so there shouldn't be
any conflict between the two uses.

So for example:

   (curry '+ 1 2 3)
   => #[curry + 1 2 3]

-Miles
-- 
o The existentialist, not having a pillow, goes everywhere with the book by
  Sullivan, _I am going to spit on your graves_.

  reply	other threads:[~2004-05-06  3:55 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E1BH4Nx-000730-Dq@fencepost.gnu.org>
     [not found] ` <85k7036eqr.fsf@junk.nocrew.org>
     [not found]   ` <E1BI6nw-0005F4-Hl@fencepost.gnu.org>
     [not found]     ` <85smepfzqo.fsf@junk.nocrew.org>
     [not found]       ` <E1BIm46-0001Ha-5A@fencepost.gnu.org>
2004-04-28 10:43         ` User-reserved element in byte code vectors (was: Emacs Common Lisp) Lars Brinkhoff
2004-04-28 13:48           ` Stefan Monnier
2004-04-28 15:08             ` User-reserved element in byte code vectors Lars Brinkhoff
2004-04-28 15:38               ` Stefan Monnier
2004-04-28 16:51                 ` Lars Brinkhoff
2004-04-28 17:12                   ` Stefan Monnier
2004-05-02  7:59                 ` Lars Brinkhoff
2004-05-02  9:43                   ` Miles Bader
2004-05-02 16:02                     ` Lars Brinkhoff
2004-05-03 14:03                       ` Richard Stallman
2004-05-03 19:57                         ` Miles Bader
2004-05-05  5:23                           ` Lars Brinkhoff
2004-05-05 20:21                             ` Richard Stallman
2004-05-06  3:55                               ` Miles Bader [this message]
2004-05-06  4:56                                 ` Miles Bader
2004-05-06 11:48                                   ` Richard Stallman
2004-05-14 17:53                                     ` Miles Bader
2004-05-14 18:27                                       ` Stefan Monnier
2004-05-14 19:50                                         ` Lars Brinkhoff
2004-05-14 22:03                                           ` Miles Bader
2004-05-14 22:14                                             ` Stefan Monnier
2004-05-15 18:34                                       ` Richard Stallman
2004-05-15 23:10                                         ` Miles Bader
2004-05-17 11:04                                           ` Richard Stallman
2004-05-17 11:28                                             ` Lars Brinkhoff
2004-05-17 16:30                                             ` Stefan Monnier
2004-05-17 22:06                                               ` Miles Bader
2004-05-17 22:33                                                 ` David Kastrup
2004-05-18  1:29                                                   ` Miles Bader
2004-05-18 13:17                                                 ` Stefan Monnier
2004-05-18 23:45                                                   ` Miles Bader
2004-05-19  6:28                                                     ` David Kastrup
2004-05-19  6:37                                                       ` Miles Bader
2004-05-19 19:00                                                     ` Richard Stallman
2004-05-19 22:32                                                       ` Function vectors: +funvec-20030520-0-c.patch Miles Bader
2004-05-19  7:34                                                   ` User-reserved element in byte code vectors Kim F. Storm
2004-05-19 13:45                                                   ` Richard Stallman
2004-05-19 14:28                                                     ` Miles Bader
2004-05-19 15:19                                                       ` Stefan Monnier
2004-05-20  0:31                                                         ` Miles Bader
2004-05-20 13:17                                                           ` Richard Stallman
2004-05-21  1:28                                                             ` Miles Bader
2004-05-22  7:31                                                               ` Richard Stallman
2004-05-22  9:37                                                                 ` Miles Bader
2004-05-18 14:53                                                 ` Richard Stallman
2004-05-18 17:34                                                   ` Miles Bader
2004-05-18 14:53                                               ` Richard Stallman
2004-05-16 23:53                                         ` Stefan Monnier
     [not found]                                       ` <E1BP3ym-0007oy-F7@fencepost.gnu.org>
     [not found]                                         ` <20040515231754.GB20052@fencepost>
2004-05-16  4:02                                           ` Function vectors: +funvec-20030516-0-c.patch Miles Bader
2004-05-16 12:28                                             ` Function vectors: +funvec-20030516-1-c.patch Miles Bader
2004-05-16 23:58                                             ` Function vectors: +funvec-20030516-0-c.patch Stefan Monnier
2004-05-17  0:03                                               ` Miles Bader
2004-05-17  0:14                                                 ` Stefan Monnier
2004-05-17  0:30                                                   ` Miles Bader
2004-05-17 16:09                                                     ` Stefan Monnier
2004-05-17 22:21                                                       ` Miles Bader
2004-05-18 13:30                                                         ` Stefan Monnier
2004-05-17 11:04                                             ` Richard Stallman
2004-05-17 11:04                                             ` Richard Stallman
2004-05-17 22:54                                               ` Miles Bader
2004-05-18 14:54                                                 ` Richard Stallman
2004-05-18  6:04                                               ` Function vectors: +funvec-20030518-0-c.patch Miles Bader
2004-05-06  6:17                                 ` User-reserved element in byte code vectors Lars Brinkhoff
2004-05-06 14:24                                 ` Stefan Monnier
2004-05-06 20:39                                   ` Miles Bader
2004-05-02 16:37                   ` Stefan Monnier
2004-05-02 18:59                     ` Lars Brinkhoff
2004-05-02 19:21                       ` Stefan Monnier
2004-05-02 19:27                         ` Lars Brinkhoff
2004-05-02 19:54                           ` Stefan Monnier
2004-05-02 20:28                             ` Lars Brinkhoff
2004-05-02 21:07                               ` Stefan Monnier
2004-05-03  6:08                                 ` Lars Brinkhoff
2004-05-02 19:52                   ` Richard Stallman
2004-04-28 15:38           ` User-reserved element in byte code vectors (was: Emacs Common Lisp) Miles Bader
2004-05-01  5:30             ` Lars Brinkhoff
2004-05-01 23:58               ` Miles Bader
2004-05-01  7:01     ` get-internal-run-time Lars Brinkhoff
2004-05-01 18:53       ` get-internal-run-time Lars Brinkhoff
2004-05-02 14:44         ` get-internal-run-time Eli Zaretskii
2004-05-02 15:45           ` get-internal-run-time Lars Brinkhoff
2004-05-02 18:41           ` get-internal-run-time Lars Brinkhoff
2004-05-03  0:10             ` get-internal-run-time Kevin Ryde
2004-05-03  5:38               ` get-internal-run-time Lars Brinkhoff
2004-05-03 14:03             ` get-internal-run-time Richard Stallman
2004-10-28 16:30       ` get-internal-run-time Lars Brinkhoff

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=buou0yuw6nu.fsf@mcspd15.ucom.lsi.nec.co.jp \
    --to=miles@lsi.nec.co.jp \
    --cc=emacs-devel@gnu.org \
    --cc=lars@nocrew.org \
    --cc=miles@gnu.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).