Here is another patch that fixes the first of my examples. (let* ((x
(random)) (y x)) (eq? x y)) now folds to (begin (random) #t). It
turned out to be much smaller than the previous approach. Is it all
right if I push this?

I'm not sure how to make the other one work yet, but I will think about it.

I will send a separate email about the CPS stuff.

Noah

On Fri, Feb 17, 2012 at 3:13 AM, Andy Wingo <wi...@pobox.com> wrote:
> Hi Noah,
>
> On Fri 17 Feb 2012 03:22, Noah Lavine <noah.b.lav...@gmail.com> writes:
>
>>>> (let* ((x (random))
>>>>        (y (list x))
>>>>        (z (car y))
>>>>   (eq? x z))
>>>
>> To make sure I understand, in the x-y-z example, psyntax would produce
>> different gensyms for x and z, but peval could merge them later on,
>> right?
>
> When processing `z' for value, it should reduce to `x'.  The strategy is
> to do computation at compile time -- if at compile time, `z' can reduce
> to `x', peval will do it.  But there is no global "give me all the
> things that are equal to x" procedure.
>
>> In that case, peval would maintain the invariant "if two values must
>> always be the same, they have the same gensym". Correct?
>
> More like the other way around!  If one identifier partially evaluates
> to another, then they will have the same gensym, and therefore are the
> same identifier.
>
>>> This is related to range analysis.  But, it's also something that's
>>> easier to do with an explicit notion of control flow (i.e. a CPS IR).
>>
>> Yes, I think you're right. I would be very interested in working on a
>> CPS IR, but I remember you had a blog post a couple months ago where
>> you said you weren't sure if CPS or ANF was better for Guile. What do
>> you think about intermediate representations now?
>
> I have no idea :-) I am a little hesitant to move to either one right
> now, because our stack machine penalizes named temporaries, and with CPS
> (or ANF -- which is closer to what we have, but without the advantage of
> treating control flow on a first-class level) you would get a lot more
> named temporaries.  But my uncertainty is also because I don't know what
> it would make the compiler look like.  Would it simplify things or would
> it add complication?  I don't know.
>
> But, writing a pass to turn tree-il into some CPS language would be a
> really interesting step in any case.  If you wanted to work on that, I'm
> sure it would be instructive to us all.
>
> My humble thoughts :)
>
> Cheers,
>
> Andy
> --
> http://wingolog.org/

Attachment: 0001-Optimize-Equality-Primitives.patch
Description: Binary data

Reply via email to