David Van Horn caught the bug. The fast module has an incorrect bind function 
that when fixed makes performance terrible. Nevermind this thread.
-Ian
----- Original Message -----
From: "J. Ian Johnson" <[email protected]>
To: "Sam Tobin-Hochstadt" <[email protected]>
Cc: "J. Ian Johnson" <[email protected]>, "users" <[email protected]>
Sent: Thursday, October 4, 2012 9:47:52 PM GMT -05:00 US/Canada Eastern
Subject: Re: [racket] Vast performance differences with minute syntactic 
differences

I wrote two set-adds? Ugh, I didn't mean to. That code wouldn't even work due 
to arity mismatch. 
(set-add res (let ([v v]) v)) is more likely.
-Ian
----- Original Message -----
From: Sam Tobin-Hochstadt <[email protected]>
To: J. Ian Johnson <[email protected]>
Cc: users <[email protected]>
Sent: Thu, 4 Oct 2012 19:46:36 -0400 (EDT)
Subject: Re: [racket] Vast performance differences with minute syntactic 
differences

On Thu, Oct 4, 2012 at 7:01 PM, J. Ian Johnson <[email protected]> wrote:
>
> By almost exactly I mean
> (let () (set-add res v))
>
> versus
>
> (let ([res res])
>  (set-add (let ([v v])
>              (set-add res (let () v)))))

These seem importantly different, in that:

(set-add v (set-add res v))

and

(set-add res v)

are totally different values, and the former only works if both `v`
and `res` are sets.

If you want to determine the behavior of the compiler, which is what
matters for differences like extra `let` bindings, 'raco decompile' is
the best tool.
-- 
sam th
[email protected]

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to