Interesting. But I'm not sure I agree with one of your axioms: The type checker doesn't just provide rules, it provides guarantees. There are certain things that dynamic programmers have to think about, which static programmers do not - because the type checker does it for them.
Actually, the major problem is that I'm not used to thinking about type at all, because if I hand a Perl function a variable of the wrong type, it will perform the appropriate coercion behind the scenes and Do What I Meant (TM), often magically so (C++ does something similar). From that perspective, there's no difference in meaning between "1", 1 and (1), just a difference in efficiency. The "if it walks like a duck, and quacks like a duck, but you need a gorilla, then stick some fur on it and give it a banana" approach to typing :-)
This is something that puzzles me, actually: I can see the rationale behind strong static typing (efficiency, correctness; it's just that I think there are better (http://smallthought.com/avi/?p=16) ways (http://perldoc.perl.org/Test/More.html) of achieving the desired effects), and I can see the rationale behind Perl-style DWIMmy weak typing, but I can't see the rationale behind Python/Lisp(?)-style dynamic strong typing, where there are no guarantees provided by the compiler, but type errors can still kill your program. "4" + 3 in Python will die with a type error, for instance (partly because they've used + for string concatenation, but still). Does anyone here get this?
no subject
The type checker doesn't just provide rules, it provides guarantees. There are certain things that dynamic programmers have to think about, which static programmers do not - because the type checker does it for them.
Actually, the major problem is that I'm not used to thinking about type at all, because if I hand a Perl function a variable of the wrong type, it will perform the appropriate coercion behind the scenes and Do What I Meant (TM), often magically so (C++ does something similar). From that perspective, there's no difference in meaning between "1", 1 and (1), just a difference in efficiency. The "if it walks like a duck, and quacks like a duck, but you need a gorilla, then stick some fur on it and give it a banana" approach to typing :-)
This is something that puzzles me, actually: I can see the rationale behind strong static typing (efficiency, correctness; it's just that I think there are better (http://smallthought.com/avi/?p=16) ways (http://perldoc.perl.org/Test/More.html) of achieving the desired effects), and I can see the rationale behind Perl-style DWIMmy weak typing, but I can't see the rationale behind Python/Lisp(?)-style dynamic strong typing, where there are no guarantees provided by the compiler, but type errors can still kill your program.
"4" + 3
in Python will die with a type error, for instance (partly because they've used + for string concatenation, but still). Does anyone here get this?