On Tue, May 08, 2007 at 12:38:43PM -0700, Allison Randal wrote:
> Patrick R. Michaud wrote:
> >
> >Well, since I've only come across a single case where the
> >method I needed to call was in a String PMC, I've never found
> >it annoying. But again, perhaps that's just me and it really is
> >a big annoyance to other PIR programmers. :-)
>
> Oh, I was talking about a complete solution to the ambiguity: no string
> method calls at all, only method PMC objects. So, eliminate these too:
>
> object.methodname()
> object.'methodname'()
> object.$S1()
>
> I guess your proposal was much more conservative.
Correct, I was only referring to the case where a PMC is a
String holding a method name -- I've not really come across that
as being a common case in the programming that I do.
Of the three cases given above, the only one that really looks
ambiguous to me is the first one, because methodname could be
either a bareword string or as a locally defined symbol. For
all the PIR code I work with I've been slowly-but-surely
converting any instances of the first to either explicitly
use quotes on the method name or (much less frequently)
explicitly use a $P register.
Based on an informal frequency analysis of the PIR I've written
by hand (as well as the syntax used by other OO languages
I typically frequent), it would seem that it would be preferable
to have
object.methodname()
as always meaning
object.'methodname'()
and that special syntax characters be used for the case where
we're invoking a method by something other than a constant string
name.
object.$P0() # invoke method $P0 on object
object.$S0() # invoke method named $S0 on object
object.??methodname() # left as an exercise for the architect to
decide what should go in place of '??'
Pm