emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: pure-fns in byte-opt.el


From: Andreas Schwab
Subject: Re: pure-fns in byte-opt.el
Date: Sat, 29 Jul 2017 22:03:54 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)

On Jul 29 2017, Mark Oteiza <address@hidden> wrote:

> On 29/07/17 at 08:22pm, Eli Zaretskii wrote:
>>> From: Mark Oteiza <address@hidden>
>>> Date: Sat, 29 Jul 2017 12:43:51 -0400
>>> Cc: address@hidden
>>>
>>> Stefan Monnier <address@hidden> writes:
>>>
>>> >> (let ((pure-fns
>>> >> -       '(concat symbol-name regexp-opt regexp-quote string-to-syntax)))
>>> >> +       '(concat symbol-name regexp-opt regexp-quote string-to-syntax
>>> >> +         make-vector)))
>>> >
>>> > Ah, now that makes a lot more sense: make-vector is much less pure than
>>> > string-to-char.  The above will cause the compiler to replace
>>> >
>>> >    (make-vector 2 ?a)
>>> >
>>> > with
>>> >
>>> >    [?a ?a]
>>> >
>>> > so you end with a single immediate vector being re-used over and over,
>>> > instead of having a new vector created each time.
>>>
>>> But reading a literal vector still generates a new vector, no?
>>
>>Why do you assume it will be read?
>
> I guess because I don't understand how bytecode is executed.

This has nothing to do with bytecode.  Try this:

(let ((i 0) r)
  (while (< i 2)
    (let ((v (make-vector 2 0)))
      (aset v i i)
      (push v r))
    (setq i (1+ i)))
  r)

Andreas.

-- 
Andreas Schwab, address@hidden
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]