[racket-dev] for loop singleton optimization

From: J. Ian Johnson (ianj at ccs.neu.edu)
Date: Thu Nov 29 08:06:35 EST 2012

That's not free-identifier=? so it wouldn't be optimized.
-Ian
----- Original Message -----
From: "Tobias Hammer" <tobias.hammer at dlr.de>
To: "Matthew Flatt" <mflatt at cs.utah.edu>, "J. Ian Johnson" <ianj at ccs.neu.edu>
Cc: "dev" <dev at racket-lang.org>
Sent: Thursday, November 29, 2012 4:49:15 AM GMT -05:00 US/Canada Eastern
Subject: Re: [racket-dev] for loop singleton optimization

What about

(let ([set (lambda (a) (set 1 2 a))])
   (for/list ([x (in-set (set 3))])
     x))

?

Tobias


On Wed, 28 Nov 2012 19:24:12 +0100, J. Ian Johnson <ianj at ccs.neu.edu>  
wrote:

> Cool. I submitted a pull request with this change since it's always an  
> improvement.
> Thanks,
> -Ian
> ----- Original Message -----
> From: "Matthew Flatt" <mflatt at cs.utah.edu>
> To: "J. Ian Johnson" <ianj at ccs.neu.edu>
> Cc: "dev" <dev at racket-lang.org>
> Sent: Wednesday, November 28, 2012 12:58:09 PM GMT -05:00 US/Canada  
> Eastern
> Subject: Re: [racket-dev] for loop singleton optimization
>
> I think that would be an ad hoc optimization in each `in-'. For example,
>
> (define-sequence-syntax *in-set
>   (lambda () #'in-set)
>   (lambda (stx)
>     (syntax-case stx ()
>       [[(id) (_ st)]
>        ....
>
> in `racket/set' could change to
>
> (define-sequence-syntax *in-set
>   (lambda () #'in-set)
>   (lambda (stx)
>     (syntax-case stx (set)
>       [[(id) (_ (set v))]
>        #`[(id) (in-value v)]]
>       [[(id) (_ st)]
>        ....
>
>
> At Wed, 28 Nov 2012 12:50:49 -0500 (EST), "J. Ian Johnson" wrote:
>> It would be great to optimize singletons out of comprehensions, since I  
>> (and
>> probably others) have macros that expand into singleton constructors  
>> that are
>> much better suited to just be a rebinding.
>>
>> > (time (for ([n (in-range 1 1000000)]) (for ([k (in-set (set n))])  
>> (random
>> k))))
>> cpu time: 340 real time: 338 gc time: 16
>> > (time (for ([n (in-range 1 1000000)]) (for ([k (in-value n)]) (random  
>> k))))
>> cpu time: 120 real time: 118 gc time: 0
>>
>> Is this easily added to for.rkt?
>>
>> -Ian
>> _________________________
>>   Racket Developers list:
>>   http://lists.racket-lang.org/dev
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev


-- 
---------------------------------------------------------
Tobias Hammer
DLR / Institute of Robotics and Mechatronics
Muenchner Str. 20, D-82234 Wessling
Tel.: 08153/28-1487
Mail: tobias.hammer at dlr.de

Posted on the dev mailing list.