bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#51982: Erroneous handling of local variables in byte-compiled nested


From: Mattias Engdegård
Subject: bug#51982: Erroneous handling of local variables in byte-compiled nested lambdas
Date: Thu, 2 Dec 2021 10:13:31 +0100

> Yes, and I can confirm that both transformations (let* -> let and the 
> inverse) seem to generate almost or exactly identical bytecode for lexbind 
> code. If you can find an example where it's worse, I'd like to know.

And by "yes" I mean "no", since the identical bytecode is only true in the 
absence of mutation which, as always, throws a spanner in the works. For 
example, while

(let ((x (sin y)) (y (cos x)))
  (+ x y))))
->
(let* ((x0 (sin y)) (y (cos x)) (x x0))
  (+ x y))))

is a transformation with identical bytecode, mutating one of the variables:

(let ((x (sin y)) (y (cos x)))
  (setq x (1+ x))
  (+ x y))))
->
(let* ((x0 (sin y)) (y (cos x)) (x x0))
  (setq x (1+ x))
  (+ x y))))

will prevent the intermediate from being eliminated. Not a disaster by any 
means but not good enough as a general method of translation.






reply via email to

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