Why can't defstructs be redefined?

Vibhu Mohindra vibhu.mohindra at gmail.com
Mon Jul 11 19:53:32 UTC 2022


On 11/07/2022 19:41, Alan Ruttenberg wrote:
> Anyone know this area of the compiler? It's very frustrating during 
> development.

Interesting. The rationale is performance apparently.
CLTL2: 19.2. How to Use Defstruct
https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node170.html
whose last four paragraphs explain the reason. It concludes with:
"The defstruct feature is intended to provide ``the most efficient'' 
structure class. CLOS classes defined by defclass allow much more 
flexible structures to be defined and redefined."

----
If you want flexibility, but also don't want to use classes instead of 
structs everywhere, one solution may be to define your own defstruct 
macro in some package that produces a class and functions/methods. 
Import and use that defstruct during development, but switch over to the 
real one when development ends (assuming you want its performance).

> Seems we ought to, at least, be able to blow away all 
> traces of the defstruct, ignoring existing structures and redefine it.

CLTL2 above agrees in its last para,
"Programming environments are allowed and encouraged to permit defstruct 
redefinition, [...]"
so it sounds like you'll have made ABCL better once your 
structure-definition approach succeeds. Others on this list will know 
more about this area and the errors you're seeing.

Vibhu



More information about the armedbear-devel mailing list