On 31 January 2013 22:59, Frank Shearar frank.shearar@gmail.com wrote:
On 30 January 2013 20:04, commits@source.squeak.org wrote:
Frank Shearar uploaded a new version of Kernel to project The Inbox: http://source.squeak.org/inbox/Kernel-fbs.736.mcz
==================== Summary ====================
Name: Kernel-fbs.736 Author: fbs Time: 30 January 2013, 8:04:08.926 pm UUID: 1d99c937-4c68-475c-987b-2990c8040c29 Ancestors: Kernel-fbs.735
Rename NotImplemented errors in line with conventions 2 of 3.
=============== Diff against Kernel-fbs.735 ===============
If folks are happy with what I've got, I'd like to make one more change, and remove NotYetImplemented>>#defaultAction. This will make this message send open up a Debugger. Then I just need to tweak the Debugger to show the Create button.
If people think that's sensible I'll make the change and resubmit, clearing out obsolete Inbox ancestors to show a more complete diff.
Actually, I'm going to hold off on touching NotYetImplemented. I think it's a good idea to remove the default action, but it and #shouldBeImplemented have a wrinkle that I can't see right now how to fix.
Let's say you have Bar >> #ff [ self notYetImplemented ]. You evaluate `Bar new ff` and the Debugger pops up, asking if you want to create that method. You enter the desired behaviour - `^ 1` - and accept. The stack now looks like this:
Bar >> #ff (containing `^ 1`) Bar >> #ff (containing `self notYetImplemented`) <the topmost frame of the rest of the stack> <the rest of the stack, ending in a DoIt>
The topmost context returns, and _retriggers_ the exception. Instead, we should _discard_ the `self notYetImplemented` stack frame and have the new implementation return its result to <the topmost frame of the rest of the stack>.
It's probably not even hard, but my brain's a big mushy.
So instead I'd like to merge what I have, and add as a separate enhancement * removing NotYetImplemented >> #defaultAction * returning to the sender sender context, <the topmost frame of the rest of the stack>.
This latter step should also avoid the problem of people not writing their stubs as `^ self subclassResponsibility`, which prevents seamlessly progressing with one's computation. (If you don't say `^` then your new result-returning implementation returns its result to the non-`^` stub/marker context, which returns self.)
I want the experience of implementing missing functionality to be almost like rewriting history - "we have always had this implementation of this message". (To be read in the same voice as "We have always been at war with Eurasia.")
frank