Questions or comments

Brian Rice water@tscnet.com
Tue Mar 27 13:22:02 2001


>You asked for it, so I have some comments from quickly browsing through
>your sources. I have also taken a quick look at Armin Rigo's Bazar code
>in Python. I have been discussing some stuff with a friend and I am
>thinking if I should also post something to the Tunes list.
>
>Anyway:
>
>While using '->' as a selector might be a problem, you could have '=>'
>(though I see you used '>=' and '<=' and that might cause some
>confusion).

My current working set now uses '->' and I think that I can live with 
that. Other external sugarings like @ and => I have kept for the use 
of the programmer. This release will make it out in another week or 
less.

>-----------------
>You mention:
>
>   Notice that ArrowGraph extends Arrow, so it has a head and tail.
>
>But the code says it is a subclass of ArrowStub. Later you talk about
>the apexArrow in a way that made me think this comment was about some
>previous implementation.

Indeed it does. I changed inheritance from Arrow (which made identity 
problems difficult by making the relationship between Arrows and 
ArrowGraphs less flexible) to delegation to apexArrow. FrameGraph is 
going to handle the relation between the two. I will fix this 
comment. Thanks.

>-----------------
>In Arrow>>head:tail: is didn't get this
>....
>         self become: newArrow.
>         head _ Reference to: headArrow.
>         tail _ Reference to: tailArrow.
>         self become: newArrow.                                         
>....
>
>Given that newArrow has nil in its instance variables, wouldn't this
>work? :
>
>        newArrow head: headArrow tail: tailArrow
>
>The "recursive" call to head:tail: would take care of the "Reference
>to:" stuff, right?

I was having a lot of problems with initialization of Arrows, and 
this snapshot shows some of the conceptual confusion that resulted. 
The next release should be less confusing. I already have a different 
set-up for initialization which is nicely robust and a little clearer.
But now that you mention it, I really should put a better comment in 
there to explain what's going on and why.

>-----------------
>Comments like in here
>
>!Arrow methodsFor: 'testing' stamp: 'btr 3/18/2001 01:42'!
>isCompositionOf: anArrow1 with: anArrow2
>         "Answers whether the receiver is a valid composition result of
>the
>         arguments in either order."
>         "^ anArrow1 coincidesWith: anArrow2 coords: 1@2"
>         ^ self == (anArrow1 ++ anArrow2) | self == (anArrow2 ++
>anArrow1)! !
>
>don't seem to agree with the definition of Arrow>>at: (since it seems
>to imply a 1 based indexing scheme while at: implements a 0 based one),
>but it is likely that I misunderstood something.

Nope, you found a mistake of mine. #coincidesWith:At: was added after 
much of everything else, and I was using the arrow logic texts as a 
guide, without checking for consistency. I fixed this just now. 
Thanks.

>-----------------
>There is a SmartRefStream method (around line 1940) that probably
>shouldn't be there.

That's a changeset problem (I think). I'll make sure to condense my 
changes for the next posts.

>-----------------
>
>Sorry that I am unable to make higher level comments than these...
>-- Jecel

That's fine, most of the methods right now are basic utilities. I am 
cooking up some factories with lots of large-scale patterns right 
now, and they should indicate the desired characteristics of the 
system at large. Also the more useful routines will make it explicit 
when we are using a categorial nature or a strictly informatic 
nature. Also the SmalltalkMOP routines are unusable as is.

Thanks,
~