On Wed, 2005-03-30 at 14:57, chromatic wrote:

> I certainly plan to continue to instrument code at runtime (and not just
> really slushy, partially slushy, and permafrost compile time).

That's FINE, and no one should stop you!

What I was referring to was only the items that an interface definition
would be concerned with (that is, those things which would invalidate
the compiler's assumptions).

An example follows.

Original code:

        class X { method m(int $i) { say "Hello, world" } }

Valid string to eval:

        q{class X { method m(int $i) { die "Goodbye, world" } }}

Invalid string to eval:

        q{class X { method m(int $i) is rw($string) { say $string } }}

The latter changes the interface definition, and thus invalidates the
compiler's assumptions, but you can instrument the code all you like,
re-defining any darned thing you wish!

If you allow the interface definition to change, you're not optimizing
for the programmer. You're optimizing for the amount of time you spend
in the debugger. Failing to eval early because code would have changed
the interface (or type hierarchy) of your types will save thousands of
programmers everywhere much debugging time.

Like I said, if you allow run-time munging of the type interfaces, then
you can't tell if this is valid or invalid:

        my X $a;

you have to allow it always, regardless of the definition of X. In fact,
you can NEVER reject ANY method or function invocation based on
signature, since it might change at run-time.

Is that really what you want?

Aaron Sherman <[EMAIL PROTECTED]>
Senior Systems Engineer and Toolsmith
"It's the sound of a satellite saying, 'get me down!'" -Shriekback

Reply via email to