[parenscript-devel] Why is there a WITH clause in my loop?
Daniel Gackle
danielgackle at gmail.com
Sat Jan 29 01:50:57 UTC 2011
Specifically, I'm having a hard time seeing how this:
function blah(obj) {
for (var key in obj) {
with ({ x : null }) {
var x = [];
// do anything at all here...
can ever be better than this:
function blah(obj) {
for (var key in obj) {
var x = [];
// do that thing here instead...
What am I missing?
2011/1/28 Daniel Gackle <danielgackle at gmail.com>
> I'm running to this WITH clause in a number of places, but can't see
> the (potential) bug you describe in any of them. Can you provide an
> example of this bug (that necessitates the WITH)? I don't get it yet.
>
> Daniel
>
>
> 2010/12/10 Vladimir Sedach <vsedach at gmail.com>
>
> The WITH clause is there to make sure that lambdas capture a fresh
>> binding of loop-local variables per iteration (otherwise they'd all
>> share the same binding which would get incremented on every loop
>> iteration).
>>
>> I'm guessing the reason your code doesn't run across this bug is that
>> the lambda that captures time gets called once per iteration and
>> discarded.
>>
>> Vladimir
>>
>> 2010/12/7 Daniel Gackle <danielgackle at gmail.com>:
>> > Here's a really strange one.
>> > We have a form like the following. I've stripped it down for brevity, so
>> it
>> > looks weird:
>> > (loop :for time :from time1 :below time2 :do
>> > (when (foo
>> > (λ ()
>> > (bar
>> > (λ () (blah)) time))
>> > time)
>> > (break)))
>> > It used to generate this:
>> > for (var time = time1; time < time2; time += 1) {
>> > if (foo(function () {
>> > return barr(function () {
>> > return blah();
>> > }, time);
>> > }, time)) {
>> > break;
>> > };
>> > };
>> > But now it generates this:
>> > for (var time = time1; time < time2; time += 1) {
>> > with ({ time : time }) {
>> > if (foo(function () {
>> > return bar(function () {
>> > return blah();
>> > }, time);
>> > }, time)) {
>> > break;
>> > };
>> > };
>> > };
>> > That is one weird WITH clause in there! No doubt it has something
>> > to do with lexical scoping magic going on under the hood. But
>> > I definitely don't want it in a performance-critical loop.
>> > Daniel
>> > _______________________________________________
>> > parenscript-devel mailing list
>> > parenscript-devel at common-lisp.net
>> > http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
>> >
>> >
>>
>> _______________________________________________
>> parenscript-devel mailing list
>> parenscript-devel at common-lisp.net
>> http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/parenscript-devel/attachments/20110128/5b8aec17/attachment.html>
More information about the parenscript-devel
mailing list