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

[email protected] ("Michael Maraist")
Newsgroups perl.perl6.language.objects
Message-ID <[email protected]>
----- Original Message -----
From: "Perl6 RFC Librarian" <[email protected]>
To: <[email protected]>
Cc: <[email protected]>
Sent: Tuesday, August 29, 2000 10:19 PM
Subject: RFC 171 (v1) my Dog $spot should call a constructor implicitly

> my Dog $spot should call a constructor implicitly
>
>
> The current optimization syntax my Dog $spot should be extended to call
> some implicit constructor and create a Dog object out of the $spot
variable.
>
>
> =head1 DESCRIPTION
>
> The current syntax is largely for optimization, forcing the programmer to
> repeat herself when initializing an object:
>
>     my Dog $spot = Dog->new();
>
> That call, in itself, is not overly onerous.  Consider:
>
>     my Animal::Mammal::Dog $spot = Animal::Mammal::Dog->new();
>
>
> Provided this RFC is adopted, this call can be changed to:
>
>     my Dog $spot = "Spot";
>

Hmm, I see problems with this.  First, let me say that I feel your pain.  I
am tempted to make all subclasses colon seperated names.  And I've developed
several libraries that have up to 8 or 9 classes deep.  There is some beauty
in:

import pkg1.pkg2.pkg3;
pkg4 x = new pkg4();

Actually, out of convention for larger apps, we always fully qualify our
function / class names.  So I should probably make an RFC for the perl equiv
of pythons:

from pkg1.pkg2.pkg3 import pkg4

It should easily become:
use pkg1::pkg2::pkg3 'pkg4';
my pkg4 $x = new pkg4();

But back to the problem at hand.

First greatly stylistic compatibilty.  An inexperienced programmer would
see:
my Dog $spot = "Spot";

And become confused.  It's totally unintuitive (at least so far as other
mainstream OO languages go).  It looks like Dog could be a type of String
subclass.

The next most important point is that, up until this point, there has been
no enforcement of the constructor name (nor for the $self name).  This
obviously requires it.  Now there have been numerous discussions about RFCs
that required such standardization.  Some stronger than others.  I don't
think that this alone is a strong enough case to break backward
compatibility (with things like DBI->connect).

As with the above, the problem you are trying to solve is long type-names
(which is a bazzar thing to find in perl anyway).  I just think that there
are better ways of skinning that cat.


-Michael
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.