From: Christophe R. <cs...@ca...> - 2006-11-26 02:10:37
|
Juho Snellman <js...@ik...> writes: > Some of the more annoying SBCL style-warnings are signaled at load > time (function/defmethod redefinition, defmethod without defgeneric, > etc) rather than at compile-time, and thus can't be controlled with > MUFFLE-CONDITIONS declarations. Yes. > While the normal solution would be to wrap a suitable handler for > style-warnings around the load, I don't really like that solution. > The code can actually be loaded in several different ways, for example > through ASDF, using Slime C-c C-c or C-c C-k, using LOAD manually, or > evaluating the defun/defmethod on the REPL. It's not really feasible > to bind a handler around all of these. That is arguably true, yes. > So I'd like to make load-time warnings also mufflable with the same > mechanism as compile-time ones, using the condition-handlers that have > been globally proclaimed at the time the warning is signalled. This > would only apply to certain conditions that SBCL itself signals during > load-time, any conditions from user code would be handled as > currently. (A rough patch attached). > > Does this seem reasonable? I'm not sure. At this point you should bear in mind, much as WHN will attest as to my first reply to him after he granted me CVS write access: I have had entirely too much to drink this evening, along with too much to eat, and so you should take this response with as much salt as I have ingested this evening. I think that there are two different kinds of style warning that your patch is addressing: there are the style warnings that really would be proper style warnings except that SBCL is too stupid to signal them only in the right circumstance: the redefinition of a function is the prime example, for there the style-warning should only be signalled if the redefinition is from a logically different piece of code. This also applies to the redefining ~S in DEFGENERIC/DEFMETHOD cases. Then there are the cases when the style warning is unconditionally a style warning, but the user might legitimately not care about the entire class of such style warnings: DEFMETHOD without DEFGENERIC and the like. In this case it would I think be reasonable to handle it according to a mechanism similar to your patch, but I'm less convinced of the need: usually the style warning happens only once, rather than several times through the course of redefinition; given that, it seems reasonable for the "system" loader to take responsibility for the muffling for the dynamic contour of the first-time loading, with an asdf :around method or equivalent: all that is needed for this case to be dealt with is an exported condition type that users can handle normally. > +(defmacro with-null-lexenv-condition-handlers (&body body) Prefer with-null-lexenv-condition-handlers ((&key) &body body) for future-proofing. If you reply to this, I'll try to be more coherent when I'm sobrierer. Cheers, Christophe |
From: Juho S. <js...@ik...> - 2006-11-26 10:00:31
|
Christophe Rhodes <cs...@ca...> writes: > I think that there are two different kinds of style warning that your > patch is addressing: there are the style warnings that really would be > proper style warnings except that SBCL is too stupid to signal them > only in the right circumstance: the redefinition of a function is the > prime example, for there the style-warning should only be signalled if > the redefinition is from a logically different piece of code. This > also applies to the redefining ~S in DEFGENERIC/DEFMETHOD cases. Were those warnings are only signaled when the new definition is in a logically different place or not, it seems to me that the user should still be allowed to muffle them. Just like a user is allowed to muffle any compile-time warnings, no matter how unstylish the code is :-) > Then there are the cases when the style warning is unconditionally a > style warning, but the user might legitimately not care about the > entire class of such style warnings: DEFMETHOD without DEFGENERIC and > the like. In this case it would I think be reasonable to handle it > according to a mechanism similar to your patch, but I'm less convinced > of the need: usually the style warning happens only once, rather than > several times through the course of redefinition; given that, it seems > reasonable for the "system" loader to take responsibility for the > muffling for the dynamic contour of the first-time loading, with an > asdf :around method or equivalent: all that is needed for this case to > be dealt with is an exported condition type that users can handle > normally. New generic functions will be defined during development too, and at that point you can't really require people to use a system loader at that point rather than doing a slime-compile-defun or entering code at the repl. Using separate conditions for various warnings should of course be done for this patch to be truly useful, but that's an orthogonal issue. What I'm mostly wondering about is whether muffle-conditions proclamations are an appropriate mechanism for controlling this. -- Juho Snellman |
From: Nikodemus S. <nik...@ra...> - 2006-11-26 11:24:14
|
Juho Snellman <js...@ik...> writes: > Were those warnings are only signaled when the new definition is in a > logically different place or not, it seems to me that the user should > still be allowed to muffle them. Just like a user is allowed to muffle > any compile-time warnings, no matter how unstylish the code is :-) Yes. > Using separate conditions for various warnings should of course be > done for this patch to be truly useful, but that's an orthogonal > issue. What I'm mostly wondering about is whether muffle-conditions > proclamations are an appropriate mechanism for controlling this. I have on a couple of occasions hoped for things like (setf (toplevel-handler 'foo-error) #'foo-restart) but I have always convinced myself that it is a bad idea, not that I have been able to articulate why. Maybe it is, but it dawns to me that possibly muffle-conditions proclamation should not be limited to compiler, so that the style-warning in (declaim (muffle-conditions style-warning)) (sb-int:style-warn "foo") would be muffled? Cheers, -- Nikodemus Schemer: "Buddha is small, clean, and serious." Lispnik: "Buddha is big, has hairy armpits, and laughs." |