From: Droll w. a. <da...@te...> - 2000-08-23 21:57:08
|
I note the following comment in %%compiler-defstruct (defstruct.lisp) ;; FIXME: This (and corresponding code in %DEFSTRUCT) are the way ;; that CMU CL defined the predicate, instead of using DEFUN. ;; Perhaps it would be better to go back to to the CMU CL way, or ;; something similar. I want to reduce the amount of magic in ;; defstruct functions, but making the predicate be a closure ;; looks like a good thing, and can even be done without magic. ;; (OTOH, there are some bootstrapping issues involved, since ;; GENESIS understands DEFUN but doesn't understand a ;; (SETF SYMBOL-FUNCTION) call inside %DEFSTRUCT.) This parenthesized remark is probably why COPY-FINITE-SB (and COPY-SB, as it happens) is undefined according to cold-sbcl.map - (breakpoint in WRITE-MAP during second genesis) 0] (describe 'SB!C::COPY-FINITE-SB) COPY-FINITE-SB is an internal symbol in the SB!C package. Function: #<Closure Over Function "DEFUN %DEFSTRUCT" {429FD7B9}> Checking against an earlier x86 build, I find it's apparently undefined there too: perhaps the x86 backend doesn't use the COPY-*SB functions, but the Alpha seems to want to. Presumably it needs similar code in %%compiler-defstruct to the new stuff that exists for predicates? -dan |
From: William H. N. <wil...@ai...> - 2000-08-24 17:11:24
|
Dan Barlow wrote > I note the following comment in %%compiler-defstruct (defstruct.lisp) > > ;; FIXME: This (and corresponding code in %DEFSTRUCT) are the way > ;; that CMU CL defined the predicate, instead of using DEFUN. > ;; Perhaps it would be better to go back to to the CMU CL way, or > ;; something similar. I want to reduce the amount of magic in > ;; defstruct functions, but making the predicate be a closure > ;; looks like a good thing, and can even be done without magic. > ;; (OTOH, there are some bootstrapping issues involved, since > ;; GENESIS understands DEFUN but doesn't understand a > ;; (SETF SYMBOL-FUNCTION) call inside %DEFSTRUCT.) > > This parenthesized remark is probably why COPY-FINITE-SB (and COPY-SB, > as it happens) is undefined according to cold-sbcl.map - > > (breakpoint in WRITE-MAP during second genesis) > > 0] (describe 'SB!C::COPY-FINITE-SB) > > COPY-FINITE-SB is an internal symbol in the SB!C package. > Function: #<Closure Over Function "DEFUN %DEFSTRUCT" {429FD7B9}> > > Checking against an earlier x86 build, I find it's apparently > undefined there too: perhaps the x86 backend doesn't use the COPY-*SB > functions, but the Alpha seems to want to. ^^^^^^^^^^^^^^^^ Do you mean that the Alpha emits warnings in GENESIS? (This is not necessarily a problem.) Or that the Alpha crashes at cold init time because it tries to execute a COPY-*SB function? (This is definitely a problem.:-) Just because you see warnings at GENESIS time doesn't necessarily mean that there's a real problem. The existing DEFSTRUCT/DEF!STRUCT logic should generate toplevel forms to install the closures. GENESIS doesn't know how to magically do them before cold init starts, but that doesn't mean that they don't happen. As long as those toplevel forms are executed (which should happen partway through cold init) before any calls to COPY-SB or COPY-FINITE-SB, then everything should be fine. (The joys of late binding.:-) (Actually, I should probably add some text in the GENESIS warning output explaining this.) Incidentally, one of the minor changes on my to-do list for shrinking the size of the compiled system is to go through all the DEFSTRUCTs and DEF!STRUCTs in the system adding :COPIER NIL to essentially all of them (and replacing all calls to specialized copiers with calls to COPY-STRUCTURE). Besides the basic advantage of shrinking the compiled system by a few kB, that change would make this whole issue go away. (It follows that if you *are* having a problem with COPY-*SB functions being called before they're defined, the problem should be fixable by replacing the COPY*-SB calls with COPY-STRUCTURE. I dimly remember having to do this for a number of other copier calls when I was first getting the system to bootstrap itself.) -- William Harold Newman <wil...@ai...> software consultant PGP key fingerprint 85 CE 1C BA 79 8D 51 8C B9 25 FB EE E0 C3 E5 7C |
From: <da...@te...> - 2000-08-24 18:38:36
|
On Thu, Aug 24, 2000 at 12:05:40PM -0500, William Harold Newman wrote: > Do you mean that the Alpha emits warnings in GENESIS? (This is not > necessarily a problem.) Or that the Alpha crashes at cold init time > because it tries to execute a COPY-*SB function? (This is definitely a > problem.:-) The latter. As you point out, it is definitely a problem ... > (It follows that if you *are* having a problem with COPY-*SB functions > being called before they're defined, the problem should be fixable by > replacing the COPY*-SB calls with COPY-STRUCTURE. I dimly remember > having to do this for a number of other copier calls when I was first > getting the system to bootstrap itself.) Aha. Excellent stuff. That's what I'll do, then. -dan |