Re: RFC 171 (v1) my Dog $spot should call a constructor implicitly

[email protected] (Piers Cawley)
Newsgroups perl.perl6.language.objects
Message-ID <[email protected]>
Michael Fowler <[email protected]> writes:

> On Fri, Sep 01, 2000 at 09:34:12AM +0100, Piers Cawley wrote:
> > Because, hopefully, there are efficiency gains to be had when perl
> > *knows* that $self is a Dog. If it only makes the 'name' method
> > call work faster then it's a good result. Admittedly 'bark' is a
> > fairly simple function method with only one other method call, but
> > in more complex methods one would expect efficiency gains.
> 
> Here, I think, is the primary reason for your email. You want my Dog
> $spot to retain it's optimizational (!) behaviour. I'm proposing we
> put a different meaning in place. This doesn't mean the optimization
> goes away; we can probably still do optimization in many of the
> cases you cite, especially if $ME or self() get adopted.

Are you wilfully misunderstanding me? Let's try another possible
example to see if you get the point:

    print "What sort of dog do you want? ";
    my $dog_type = ucfirst(<STDIN>); chomp $dog_type;

    try {
        my Dog $puppy = "Dog::${dog_type}"->new(name => $dog_name);
    }
    catch Exception::BadType {
        croak "Dog::${dog_type} is not a valid breed\";
    }
    catch {
        croak $!;
    }

I want 'my Dog $spot' to enforce the condition that:

    (!defined($spot) || $spot->isa('Dog'))

And that is all. I *really* don't the idea of implicit object
creation. Consider other OO languages; C++ has implicit object
construction, but has added the explicit and implicit keywords to
enable the programmer to turn the behaviour off. Not having actually
programmed in C++ I don't know how often you want to do this, but the
fact that the functionality is informative. In Java, on the other
hand, the designers looked at C++ and decided *not* to do implicit
construction. 

> I've tried to clear up the ambiguity that my Dog $spot still has an
> optimizational meaning in v2 of the RFC; it doesn't, necessarily. It
> means "$spot is a Dog object, call the constructor and instantiate
> it as such". I would very much like to know how successful I was.

But $spot could easily be a Dalmation object that you are using like a
Dog in the current context. Maybe I should just write a counter
proposal along the lines of:

=head1 TITLE

C<my Dog $spot> should simply assert that
C<(!defined($spot) || $spot-E<gt>isa('Dog'))>

And let them duke it out.

-- 
Piers
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.