[Top][All Lists]

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

Lexical let and setq

From: Michael Welsh Duggan
Subject: Lexical let and setq
Date: Fri, 13 Sep 2013 20:09:05 -0400
User-agent: Gnus/5.130008 (Ma Gnus v0.8) Emacs/24.3.50 (gnu/linux)

Stefan Monnier <address@hidden> writes:


> I do hope to fix those issues by introducing other byte-codes which will
> let us generate significantly more efficient code for those constructs,
> but in 24.1, the priority was to get lexical-binding to work correctly,
> performance being a secondary concern (tho for most idiomatic Elisp
> code, the performance tends to be competitive).
> What people should know is that
>    (let (x y z)
>      ...(setq x ...)
>      ...(setq z ...)
>      ...(setq y ...)
> is often a bad idea in Elisp, and even more so in lexical-binding code
> (in some cases, if a variable is immutable it can be handled
> significantly more efficiently, so the mere existence of a single `setq'
> on a variable can sometimes slow other chunks of code: in many cases
> `let' is cheaper than `setq').

The primary reason I have seen the (let (foo) (setq foo ...)) idiom is
in looping code.  The way I would normally try to avoid this idiom in
most FP languages would be to use recursion (specifically tail
recursion, if possible).  I know some work was done on implementing
efficient tail-recursion in the byte compiler.  Has any of that made it
onto the trunk yet?

Michael Welsh Duggan

reply via email to

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