I'd rather keep it simple.
End-users don't care WHY something is failing, just THAT it is failing gracefully and that the reason for failure is known. Users (programmers) can use M-. from the error to find the source and comments. A short link to a suitable cliki.net page might help explain the proper investigation procedure.
I see no reason for some programmer-intensive protocol that leads to large image size increase for no clear benefit that M-. won't bring.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Those "organizers" who confuse coordination and cooperation will have 100% coordination for 0% cooperation. All costs, no benefits.
On Thu, Aug 25, 2016 at 10:37 PM, Robert Goldman rpgoldman@sift.net wrote:
On 8/23/16 Aug 23 -9:55 AM, Elias Pipping wrote:
On 23 Aug 2016, at 15:50, Robert Goldman rpgoldman@sift.net wrote:
On 8/23/16 Aug 23 -6:42 AM, Elias Pipping wrote:
If we can agree on Robert’s unsupported-functionality error class, I’ll work that into the merge request, too.
I have a busy day today, but I will try to get it done.
I was thinking of having slots for:
- implementation
- capability name
- optional format control and format args that the programmer can use to
provide additional information. E.g., for LW, say that it's for licensing reasons that the DELIVER capability is not available.
If this sounds reasonable, I'll put it in, and try to find places it should be used.
In an earlier email, Elias points out that there are related reasons why a function might have failed. I haven't had time to figure out whether these would call for additional condition classes.
I was thinking: We’re trying to tell the user that what they’re doing does not work. Yes, the function does exist, you’re passing the right number of arguments and the right keywords but there’s a problem. The problem could be:
- Your lisp is very old or very new or nobody’s gotten around to looking into
it, so even though your lisp might provide the necessary functionality, the wrapper hasn’t been made to cover it yet (that’s what the master branch currently uses (error “not implemented: ~S” #’function-name) for)
- You’re passing a combination of parameters that is not supported on this
lisp (that’s what the master branch currently uses (assert) for)
- The function or combination of parameters you’re calling it with is
affected by a known bug on your lisp that we cannot work around.
I was thinking that to the user, it does not make a difference which one of those three reasons a function call fails for, so we could use one condition for all three, and unsupported-functionality captures the concept pretty well.
The capability name would often have to be a rather long description than just a name this way, though, I’m afraid. I’m not sure if I understand the purpose behind the ‘implementation' key of the condition. If a feature is e.g. missing on lisp A and B, and you’re on lisp A, if would simply contain “A”? Or would it contain something like “A personal edition prior to version 2.5?”
I was focusing on the implementation, and perhaps a version number, because I have mostly been thinking about how I would use this new error class in the tests. In particular, I was thinking of running the tests on all lisp implementations, and catching expected failures, rather than doing what we do now, which is disable the tests on platforms where we believe a function is not available.
If we were to run tests on all implementations/platforms, and catch expected errors, that would help us detect unexpected successes, when functionality that used to be broken starts to work.
Well, I have also been thinking about how nice it would be to have an understandable, standard error message for users who use an unsupported function by accident.
What about:
- Capability -- what we were trying to do.
- Implementation name -- string, or could be a keyword, if we were to
add a list of keywords. 3. Optional version number 4. Optional platform (for, e.g., "this works on SBCL > 1.2, but not on Windows.") 5. Additional information (e.g., LW personal edition)
We could have a signal-unsupported-capability function that would auto-collect some of these slot values, to make this easier to use.
There's no tearing hurry for this, so I'm happy to have some more email cycles so that we can get it right.
Best, r