in reply to Re^2: Continuations in Perl - Returning to an arbitrary level up the call stack
in thread Continuations in Perl - Returning to an arbitrary level up the call stack
For instance, when design a recursion to search a graph it's sometimes desirable to stop immediately after the goal is reached.
I'm having trouble imagining a routine designed to search a graph, where finding the target is a special case?
No need to backtrack and branch thru the whole labyrinth after the exit is already found!
The emotive language makes it sound like returning from (several nested) subroutines is a difficult thing to do; but that is what subroutines do. Via a return or falling off the end. it is neither hard to program nor costly in executions time.
Indeed, whatever alternative mechanism is used, in whatever language, it will always be more costly than the natural return chain. The stack still has to be unwound
Just as the exception mechanism in C++ (or structured exceptions in MSC), are a magnitude or more expensive because they have to search back up the stack looking for stack frames interpreting them as they go; so the goto that underlies such mechanisms in Perl has to go through an equally convoluted process to find a label at the appropriate scope.
Such costs and overheads -- not to mention the difficulties they create when they fail to work as expected and need to be traced and debugged -- are just about acceptable for the exceptional (rare, non-normal) cases they are designed for; but wrapping them over in a cute sounding abstraction and subverting them for use in the general case -- such as a search routine finding what it is looking for -- seems like abuse of the very worse kind to me.
Whilst I'm sure it is possible to contrive a theoretical use case that might stand up to cursory inspection; but unless I saw a real-world use case that I couldn't find a less obscure alternative, any use of the mechanism would garner a big red flag in any code review I was involved in.
Luckily, neither the OP nor you have to subject your code to my review :)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Continuations in Perl - Returning to an arbitrary level up the call stack
by LanX (Saint) on May 19, 2013 at 02:34 UTC | |
|
Re^4: Continuations in Perl - Returning to an arbitrary level up the call stack
by LanX (Saint) on May 20, 2013 at 20:07 UTC | |
by BrowserUk (Patriarch) on May 20, 2013 at 22:28 UTC | |
by LanX (Saint) on May 20, 2013 at 23:55 UTC |