On 2009-06-23, at 8:25 AM, Brian Hurt wrote:
> Define "validly receive every message". The only thing you can
> validly do
> for *every* message is just throw an exception. Otherwise you have to
> either violate the contract and return something unexpected and
> wrong, or
> provide valid implementations for messages such as
> solveHaltingProblem,
> factorProductOfTwoLargePrimes, etc.
Suppose I have a object which can proxy any message across a network.
At compile time, the compiler has no way of knowing what the object on
the other side of the proxy can receive and therefore can infer
nothing about it's "type".
I've been working on my language again lately and playing around with argument type checking, protocols and multi-methods. I find it can be helpful to find...
... I use Python which is also a duck typing language. In my experience the missing type check at the beginning of a function/method poses no big problems. You...
... The other realm where lack of type chcking becomes problematic is where an instance variable gets populated with a object of the wrong type in the...
Hi all I don't think I have posted to this list, but I have some comments about Duck Typing and errors in Python code in particular. For background, I have a...
... I'll take this a step further and assert that: 1) If they're problems, they should be fixed even if they're not technically "bugs"- things are that...
... If type inference is done on the basis of messages that an object can receive, what happens when via message forwarding* every object can validly receive...
This is certainly true -- dynamic typing's strengths are more than just duck typing. Programatically extending types at runtime (a la Rails's ActiveRecord) and...
Robert Fischer
robert.fischer@...
Jun 23, 2009 12:23 pm
... I think I'm going to argue that. Dynamic typing's main strengths are 1. Algol-68 type systems are exceeding limited and broken (and this was known in...
... Static typing is inherently more restrictive than dynamic typing. That is, there are well-typed programs that any decidable static type system will reject....
... By definition, yes. ... Not just performance. Actually, the performance advantage is minor at best- and can be offset by other things. For example, it's...
This is an obvious case for polymorphism, so an object would provide its own to_sql implementation. If you didn't want to do that, the Groovy code could look...
Robert Fischer
robert.fischer@...
Jun 23, 2009 5:43 pm
... So the question then becomes why did ActiveRecord go with monkey patching instead of this route? Note that this exact same solution also works nicely for...
You misunderstand what's going on. An ActiveRecord class starts out life looking like this: class Foo < ActiveRecord::Base end That's it. It delegates the...
Robert Fischer
robert.fischer@...
Jun 23, 2009 9:29 pm
... I think I actually disagree here. The top one is shorter, granted- but I don't think it's more readable. Or rather, I don't think it's more readable *in...
This is a key culture difference between dynamic and static type communities -- static type communities want any tiny snippet of code to be obvious without...
Robert Fischer
robert.fischer@...
Jun 23, 2009 11:59 pm
... The obvious point to make here being that the former is always better than the latter provided that all other things are equal. - John...
John Nowak
john@...
Jun 24, 2009 12:24 am
... Without looking it up, can you tell me what the functions 'bind' and 'return' do? How about 'cata' or 'hylo'? Or 'appEndo'? Or 'runKleisli'? The...
John Nowak
john@...
Jun 24, 2009 12:00 am
... How is that more "static-friendly"? Why not just offer a selection function that takes a list of items to use to descend the tree: select : List String ->...
John Nowak
john@...
Jun 24, 2009 12:19 am
... That's a big advantage for supporting static typing, but not a big advantage for requiring it. Nor is it an advantage particular to static typing as...
... The advantage to requiring it I've dealt with in another email. ... Any system of checked metadata about code is a type system. ... What's the advantage of...
Not in direct reply, but I thought I'd chime in... I've been using MiniD for the last few months, which has a few features that languages like Python and Ruby...
That's the way Groovy works, too, and I'm a fan of that optional static typing. ~~ Robert. ... -- ~~ Robert Fischer, Smokejumper IT Consulting. Enfranchised...
Robert Fischer
robert.fischer@...
Jun 24, 2009 2:06 am
... Objective-C does this as well. Personally, I would prefer protocol checking to type checking as any notion of type as it refers to a implementation (as it...
... Define "validly receive every message". The only thing you can validly do for *every* message is just throw an exception. Otherwise you have to either...
Examples of things I can do if I accept any message: navigate an XML document, build a JSON object. ...
Robert Fischer
robert.fischer@...
Jun 23, 2009 3:31 pm
... Suppose I have a object which can proxy any message across a network. At compile time, the compiler has no way of knowing what the object on the other side...