unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: [elpa] master 96e61a9 26/26: Add packages/darkroom by merging its upstream subtree
       [not found] ` <E1Y22th-0001CI-3B@vcs.savannah.gnu.org>
@ 2014-12-19 21:48   ` Stefan Monnier
  2014-12-21 20:23     ` João Távora
  0 siblings, 1 reply; 4+ messages in thread
From: Stefan Monnier @ 2014-12-19 21:48 UTC (permalink / raw)
  To: emacs-devel; +Cc: João Távora

> +  (mapc #'(lambda (w)
> +            (with-selected-window w
> +              (darkroom--set-margins)))
> +        (get-buffer-window-list (current-buffer))))

I recommend the use of `dolist' instead of `mapc' when the body of the
loop is provided by an anonymous function and we're looping over a list.

If the compiler could tell that we're looping over a list, it could
auto-transform the mapc call into a dolist (which is slightly more
efficient), but having to expend it to a loop that handles both lists
and arrays (like `mapc' does) makes the resulting code no more efficient
than just using `mapc'.


        Stefan



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [elpa] master 96e61a9 26/26: Add packages/darkroom by merging its upstream subtree
  2014-12-19 21:48   ` [elpa] master 96e61a9 26/26: Add packages/darkroom by merging its upstream subtree Stefan Monnier
@ 2014-12-21 20:23     ` João Távora
  2014-12-22  3:04       ` Stefan Monnier
  0 siblings, 1 reply; 4+ messages in thread
From: João Távora @ 2014-12-21 20:23 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> +  (mapc #'(lambda (w)
>> +            (with-selected-window w
>> +              (darkroom--set-margins)))
>> +        (get-buffer-window-list (current-buffer))))
>
> I recommend the use of `dolist' instead of `mapc' when the body of the
> loop is provided by an anonymous function and we're looping over a list.
>
> If the compiler could tell that we're looping over a list, it could
> auto-transform the mapc call into a dolist (which is slightly more
> efficient), but having to expend it to a loop that handles both lists
> and arrays (like `mapc' does) makes the resulting code no more efficient
> than just using `mapc'.
>
Alright, makes sense. What if I use `(cl-loop for w in ...list...)`
which is my preferred cl-idiom anyway?

João





^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [elpa] master 96e61a9 26/26: Add packages/darkroom by merging its upstream subtree
  2014-12-21 20:23     ` João Távora
@ 2014-12-22  3:04       ` Stefan Monnier
  2014-12-22  8:51         ` João Távora
  0 siblings, 1 reply; 4+ messages in thread
From: Stefan Monnier @ 2014-12-22  3:04 UTC (permalink / raw)
  To: João Távora; +Cc: emacs-devel

>>> +  (mapc #'(lambda (w)
>>> +            (with-selected-window w
>>> +              (darkroom--set-margins)))
>>> +        (get-buffer-window-list (current-buffer))))
>> 
>> I recommend the use of `dolist' instead of `mapc' when the body of the
>> loop is provided by an anonymous function and we're looping over a list.
>> 
>> If the compiler could tell that we're looping over a list, it could
>> auto-transform the mapc call into a dolist (which is slightly more
>> efficient), but having to expend it to a loop that handles both lists
>> and arrays (like `mapc' does) makes the resulting code no more efficient
>> than just using `mapc'.
>> 
> Alright, makes sense. What if I use `(cl-loop for w in ...list...)`
> which is my preferred cl-idiom anyway?

Use whichever you prefer.  I was just pointing out the style I tend
to prefer, partly for efficiency reasons (and also because I haven't
managed to plug that efficiency problem in the optimizer).


        Stefan



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [elpa] master 96e61a9 26/26: Add packages/darkroom by merging its upstream subtree
  2014-12-22  3:04       ` Stefan Monnier
@ 2014-12-22  8:51         ` João Távora
  0 siblings, 0 replies; 4+ messages in thread
From: João Távora @ 2014-12-22  8:51 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>>>> +  (mapc #'(lambda (w)
>>>> +            (with-selected-window w
>>>> +              (darkroom--set-margins)))
>>>> +        (get-buffer-window-list (current-buffer))))
>>> 
>>> I recommend the use of `dolist' instead of `mapc' when the body of the
>>> loop is provided by an anonymous function and we're looping over a list.
>>> 
>>> If the compiler could tell that we're looping over a list, it could
>>> auto-transform the mapc call into a dolist (which is slightly more
>>> efficient), but having to expend it to a loop that handles both lists
>>> and arrays (like `mapc' does) makes the resulting code no more efficient
>>> than just using `mapc'.
>>> 
>> Alright, makes sense. What if I use `(cl-loop for w in ...list...)`
>> which is my preferred cl-idiom anyway?
>
> Use whichever you prefer.  I was just pointing out the style I tend
> to prefer, partly for efficiency reasons (and also because I haven't
> managed to plug that efficiency problem in the optimizer).

Yes, the idea came across. When it isn't "outsmarting" or premature,
it's useful to use idioms that will probably help the compiler. To use
mapc for lists in this context, all one could do is wait for some kind
type inference engine, which is probably in a more distant future.

João



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-12-22  8:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20141219190721.4296.62862@vcs.savannah.gnu.org>
     [not found] ` <E1Y22th-0001CI-3B@vcs.savannah.gnu.org>
2014-12-19 21:48   ` [elpa] master 96e61a9 26/26: Add packages/darkroom by merging its upstream subtree Stefan Monnier
2014-12-21 20:23     ` João Távora
2014-12-22  3:04       ` Stefan Monnier
2014-12-22  8:51         ` João Távora

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).