On Thu, Aug 11, 2005 at 09:22:27AM -0700, Larry Wall wrote:
> On Thu, Aug 11, 2005 at 10:47:35AM +0800, Autrijus Tang wrote:
> : Adding inference ("is typed") to the mix massively sweetens the first
> : option, which would be a good thing.
> 
> Only if the programmer can be taught to understand the inferences...

Aye.  That is a very good argument for "is typed" to be off by default,
which I fully concur. :)

> Probably the first, actually, given the .= shortcut.  It takes *me*
> a lot of thought to reproduce in my head what the inferencer is doing
> there, and you can't really understand code unless you can play the
> same mindgames the computer is playing.  When the computer gets too
> smart, it forces anyone of less-than-genius caliber into cargo-cult
> programming.  That's what I don't like about type inferencing systems.

Indeed, but I expect Perl6 programmers start rapid-prodotyping in the
dynamic variant of Perl6, so the inferencing does not kick in anyway.

However, once a programmer starts using type annotations, rapidly the
compiler will (rightfully) complain about unsafe coercing.  That would
force the programmer into another kind of cargo-cult programming,
rampant in the Java world, namely manually key-in type declarations
everywhere.

Also, it is common in inference-based language environment to tell you
the inferred type for expressions, in a way that can be copy-and-pasted
back to the program, instead of having to type them out by hand.

Something like this:

    pugs> sub fact ($x) is typed { [*] 1..$x }
    pugs> :t &fact
    sub fact (Int $x --> Int)

> And there's something to be said for locating type information near
> the "my" declaration for documentation purposes even if it's entirely
> redundant.

That is true.

> Actually, this is a case where a declared return variable would reduce
> my cognitive load since I don't have to scan for a return statement
> to see that $skip is in fact the return value:
> 
>     use traits 'typed'; 
>     method skip (--> Test::Builder::Test::Skip $skip) {
>       $skip .= new;
>       my $status = $skip.status;
>       $status.do_something; $skip.do_something; # ...
>     }
> 
> Arguably that's just locating the type near the "my" again, though the
> "my" is implicit in the signature in this case.

Yes, I think that form would rock.  Also, I think leaving off the
Test::Builder::Test::Base::Status from the $status declaration does
not harm its documentation value -- indeed, that's the DWIM form Perl
programmers are used to.

Thanks,
/Autrijus/

Attachment: pgpx3ztVyRQVk.pgp
Description: PGP signature

Reply via email to