Re: AUTOLOAD in terms of throw

2000-08-17 Thread Glenn Linderman

"David L. Nicol" wrote:

 What I was suggesting was, if you want to overload the autoloading
 of something, it could be done with "catch" instead of rewriting
 the ::OVERLOAD procedure, for that  module.

 "method not loaded" becomes an exception which is thrown, rather
 than "AUTOLOADING" being its completely separate deal.  OO allows
 the combining og procedures that have things in common.  AUTOLOAD
 of a METHOD-NOT-FOUND is an excellent example of a genuine case
 of an exception (no method!) and a handler (autoload mechanism.)

 It makes these file-not-found things look like contrived crap they are.

But none of the currently proposed exception handling/reporting mechanisms
support any sort of "resume" or "retry" functionality... they just
extricate you from the current code path, and take you to a different place
in some equal or higher code path.  Now it would be possible to manually
code the retry in some circumstances, for some errors.  However due to the
potential for side effects in the invoking expression, it may not be
possible to do that in general, without language support for "resume" or
"retry" functionality.

--
Glenn
=
There  are two kinds of people, those
who finish  what they start,  and  so
on... -- Robert Byrne



_NetZero Free Internet Access and Email__
   http://www.netzero.net/download/index.html



yoda 2 clarifications Re: AUTOLOAD in terms of throw

2000-08-17 Thread David L. Nicol


I had been thinking of some special goto labels, things like
BEGINNING and END which would signify the beginning and end of the
block enclosing the throw; perhaps every SCOPE object could have
these labels refered to in terms of them.  inside a Ccatch we
need to have access to a lot of internal flow data; something like
the stack trace that Ccarp provides.  If there is a way to
have program flow procede to the beginning, end, or current execution 
point in any stack frame could be some methods on the STACK_FRAME
object like, start(), return(), resume(),  end()

$frame-start() this would start over at the beginning of
$frame, it would be what is implicitly
called when the language enters a frame.
After defining it.  So you can start again
with different parameters by altering
$$frame-_[2] for instance.


$frame-return(BLOCK)   this moves flow of control to the point
where $frame was called from, as if $frame
had returned with the value of the expression
in BLOCK.  This is the OO version of "return" which
of course normally operates w/in the current block.
so an unqualified Creturn resumes execution after
the cthrow 

$frame-resume(BLOCK)   like return, but restarts $frame at the point it is
waiting for a return value, with the BLOCK providing
the return value.

$frame-last(BLOCK) very similar to return, control goes to the end of the
frame.  The difference is, inside nested blocks inside
called blocks that may contain Creturn statements, 
Cend
moves flow to the end of the current block rather than
returning
from the routine.

$frame-redo
$frame-nextif loop blocks become FRAME objects, these will then be
possible too, unless they get compiled away, in which 
case
they won't, I don't know -- see `perldoc -f redo`


$frame-eval(BLOCK) evaluates BLOCK in the context of $frame, can include 
Cgoto
or any other flow-control directives, in which case 
this
will not return.








Glenn Linderman wrote:
 
 "David L. Nicol" wrote:
 
  What I was suggesting was, if you want to overload the autoloading
  of something, it could be done with "catch" instead of rewriting
  the ::OVERLOAD procedure, for that  module.
 
  "method not loaded" becomes an exception which is thrown, rather
  than "AUTOLOADING" being its completely separate deal.  OO allows
  the combining og procedures that have things in common.  AUTOLOAD
  of a METHOD-NOT-FOUND is an excellent example of a genuine case
  of an exception (no method!) and a handler (autoload mechanism.)
 
  It makes these file-not-found things look like contrived crap they are.
 
 But none of the currently proposed exception handling/reporting mechanisms
 support any sort of "resume" or "retry" functionality... they just
 extricate you from the current code path, and take you to a different place
 in some equal or higher code path.  Now it would be possible to manually
 code the retry in some circumstances, for some errors.  However due to the
 potential for side effects in the invoking expression, it may not be
 possible to do that in general, without language support for "resume" or
 "retry" functionality.
 
 --
 Glenn
 =
 There  are two kinds of people, those
 who finish  what they start,  and  so
 on... -- Robert Byrne
 
 _NetZero Free Internet Access and Email__
http://www.netzero.net/download/index.html

-- 
  David Nicol 816.235.1187 [EMAIL PROTECTED]
 Useless use of a void in constant context