HaloO Larry,

you wrote:
On Thu, Mar 31, 2005 at 06:35:06PM +0200, Thomas Sandlaß wrote:
: Is typing optional in the sense that it is no syntax error but
: otherwise ignored? To me this is pain but no gain :(

Well, you guys keep ignoring the answer.  Let me put it a bit more
mathematically.  The information in

    my X $a;

is *necessary* but not *sufficient* to do method existence testing in
standard Perl 6 at compile time.  You can do it IFF you have the class
information AND the classes are willing to cooperate in your scheme.
In the current design, you can pragmatically request that all classes
cooperate, and you will get the cooperation of all classes that haven't
specifically been requested to be non-cooperative.  This is what all
the mumbo-jumbo about open/closed and final/non-final classes comes
down to.

That is clear, especially the part where you talk about necessary and sufficient. Please consider myself a disciple from now on :)

Actually I'm not obsessed with the compile time checking but with the
semantics. Which to me means that with the above declaration a method
must come from *this X or its supertypes* in the scope of the declaration.
To illustrate consider the following 4 cases:

            | state when $a.m() |
declaration | is attempted      | semantics
------------+-------------------+--------------------------------
1) my   $a; | $a doesn't m()    | ignored or undef or exception
2) my   $a; | $a does m()       | call $a.m()
3) my X $a; | X doesn't m()     | type error
4) my X $a; | X does m()        | call most specific Xish $a.m()

The semantics of case 1) will be augmented by pragma I guess.

The above becomes more interesting if considering MMD. Then it
must be ensured that there is exactly one unique, most specialized
implementation available for handling type X. Note that this is a
stronger constraint than that the dispatch would succed for the
value of $a in question---and not achievable with a Manhattan metric.

And one more: when the runtime system doesn't manage to find a matching
X it could call into the compiler, class composer, type engine or however
this subsystem is called and try to make an appropriate type and a class
implementing it! And *that* is what I consider a dynamic language---or
meta language on the Parrot level.


Regards, -- TSa (Thomas Sandlaß)





Reply via email to