[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: the forward method [dynamic vs. static typing]
On Dec 15, 2003, at 3:27 PM, Neelakantan Krishnaswami wrote:
> Joe Marshall writes:
>> John Clements <clements@brinckerhoff.org> writes:
>>
>>> Typically, type systems help you to construct a proof that certain
>>> errors cannot arise during evaluation. When parts of that proof are
>>> used to alter the evaluation itself, you suddenly have a class of
>>> _runtime_ errors (or rather, "mis-behaviors") that can only be
>>> understood by examining the type proof.
>>
>> I think that John has identified what it is that made me
>> uncomfortable with this style. I generally think of the type system
>> as meta information. Intertwining the control flow with the meta
>> information about the value flow not only makes it hard for humans
>> to reason about the program, it makes it hard for programs to reason
>> about it as well.
>
> But OO languages already permit this sort of computation! If
> you CPS-converted Ken's example, then all of the cases in which
> the behavior depended on the return type would turn into cases of
> argument type dispatch. Am I misunderstanding your point somehow?
No, I don't believe this is an accurate characterization of the problem.
Objection 1:
Do such languages permit higher-order dispatch? That is:
if (method-accepts-double(kont.invoke)) then
{
kont.invoke(read-a-double());
} else {
kont.invoke(read-a-string());
}
Objection 2:
Are these languages where the type of kont.invoke may be inferred,
rather than explicitly specified?
Objection 3:
Even in the presence of a language that satisfies objection 1 and 2,
you're still arguing that it's just as easy to mentally CPS-convert and
reason about the resulting program as it is to reason about the
original. Bleargh!
At least, that's what I'm seeing.
john