Re: Crash or return forbidden value?
- Posted by CChris <christian.cuvier at agricult?re.gouv.fr> May 08, 2008
- 635 views
Shawn Pringle wrote: > > CChris wrote: > > > > Currently, the interpreter always checks the validity of any index or slice, > > and errors out whenever a test fails. > > > > My point is: there is no need to duplicate the testing made by the > > interpreter, > > and it should do the testing. Just allow RTFatal() to do something smarter, > > like skipping the call or branching to some place. This would make the user > > code more efficient (no duplicate tests) and cleaner, as part of the error > > handling > > will simply be in the backand, where it is already. > > > > CChris > > What you are talking about here is building an Exception system into the > interpreter. Exactly. In an earlier post, I was showing how Eiffel does it - simpler, but less flexible. It would be analogous to try/throw/catch and Exceptions like > in Java or C++. Perhaps exceptions could be less invasive than adding C++ > syntax if say some new builtin routines such as a register_exception_routine > were added. Routines that are passed to that function would get called > in case of exceptions. There would have to be a special return mechanism > for these functions. They could return to the offending routine's caller. Either the calling statement (retry) or the next one. Both have separate uses. > > You can put in some kind of side effect like syntax keyword: > onexception (s[6] = 4) { > .. > } > > > On the other hand, perhaps compiled code could remove the second check > after an if statement. > > s[6] = 5 -- check is done to make sure s is a sequence and 6 is a valid index > > if sequence(s) and length(s) > 7 then > s[6] = 5 -- no check is made to make sure s is a sequence for the > -- the user did it. Additionally 7 and 6 are constants > -- so index checking could be eliminated at compile time > -- too. > end if > > Shawn Pringle CChris