On Sun, Feb 06, 2022 at 07:44:31AM +0100, Linus Björnstam wrote: > > On Sat, 5 Feb 2022, at 18:31, Stefan Israelsson Tampe wrote: > > Hmm this was wrong, I mean > > > > For conditional variables we have a default begin. So then why on earth > > do you not have an implicit let?, Just laziness? > > There should be a good reason or? this is a pretty fundamental change > > that I support but then we should not be lazy not trying to understand > > the design choices of the old beards. > > In other languages let starts a new lexical context which can be expensive. I don't know guile internals but a let without any defines is trivially converted to a begin by the optimizer. It seems that in Guile 3 the expander is smart enough for an empty bindings list in let: | tomas@trotzki:~$ guile | GNU Guile 3.0.7.6-22120 | Copyright (C) 1995-2021 Free Software Foundation, Inc. [...] | scheme@(guile-user)> ,expand (let () (message #t "Yikes")) | $1 = (message #t "Yikes") | scheme@(guile-user)> ,expand (let ((x 3)) (message #t "Yikes ~S" x)) | $2 = (let ((x 3)) (message #t "Yikes ~S" x)) ...but doesn't "see" whether bindings are actually used (quite possibly those go away in a later optimisation phase, though): | scheme@(guile-user)> ,expand (let ((x 3)) (message #t "Yikes")) | $3 = (let ((x 3)) (message #t "Yikes")) Cheers -- t