HaloO Luke,

you wrote:
No, I think I agree with you here.  But what happens if you change
you're second-to-last line to:

    my $a = foo();
    $a.meth() = 8;

Perl 6 is both a statically typed language and a dynamically typed
language, and the problems that I am addressing are mostly about the
dynamic part.

My state of affairs is that these two lines of code lack declarations that clearly announce what the user of foo and X wanted: 1) &foo returns an X 2) an X does .meth()

Where, how and if these are implemented, autoloaded or what not
is another business. Client side type checking ensures that no
usage outside the declared behaviour occurs. For larger declarations
I which to put them into an interface module, package, header or
however that is called and include it.

On the implementation side we get the complementary definitions:
1) here's an X that does .meth()
2) here's a &foo that returns an X

The dynamism of Perl6 should revolve around how to bring these
two sides of an interface together conveniently and efficiently.
Just using 1% of a big package shouldn't let your 10-liner
become a bloated pig!

And of course the builtin functionality and the packages available
from CPAN save the typical small scale programmer from extensive
declarations. But to use a complex module you have to read
documentation to get the idea to call .meth() in the first place.
And then I like to get the hint from the compiler that there is
no .mth() and happily correct the spelling error. Spotting these
types of errors is were computers are much better than humans :)


We assign the type "objects with an 'm' method that can take a single
integer" to $a.  This is a category of objects that spans many classes,
and does not fit into a nice little tree.  I think that before we take
on such an idea, we should look for research about this kind of type
inference.

Type calculations are not inherently difficult, especially when junctive values are at hand. The problem is that the inference can quickly diverge to the useless "something is done to an anything". Dwimmery works best when it bridges little gaps in an otherwise very rich semantic network. -- TSa (Thomas SandlaÃ)




Reply via email to