[racket-dev] for loop singleton optimization
That works fine (i.e., does not get changed to `in-value').
Matching `set' as a literal in `syntax-case' works by identifier
binding, not symbolically. If `set' has a different binding than the
one exported by the module, then the optimizing case doesn't match.
At Thu, 29 Nov 2012 10:49:15 +0100, Tobias Hammer wrote:
> 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