[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Packages: where is the beef ?
According to my simple minded intuition, packages are name scopes in which I can
define what ever symbols I want to without having conflicts.
Unfortunately, is is NOT true in Common Lisp (at least not in Allegro
Common Lisp).
I have faced this problem several times in the past, but today when
I upgraded to version 4.1 (from 4.0.1) noticed new flavors in this
rotten beef.
First I tried to make my own structure named 'assert' in my own private
package. That caused problems because of the new package locking scheme.
After RTFM I found that I must set 'excl:*enable-package-loking-errors*'
to nil. Fine. I understand that internal behaviour of defstruct may play
with other packages too, but isn't that little bit too compilicated to the poor
programmer ? It is programmers concern to bother ?
Next error message is:
Error: validate-metaclass-change forbids changing the class of
#<standard-class class @ #x4298be> to
#<standard-class structure-class @ #x41fa66>
[condition type: program-error]
I don't (yet) know how to work around this. I guess the lisp does
no like the idea of having a structure named 'class' even in my own
package.
So, if we accept that we can't use any names in our own
packages, how can we know:
- what "reserved" names there will be in future releases of
Lisp, so that porting of our application to new versions of Lisp
is possible ?
- what new kind of checking rules the next versions of Lisp
will invent ?
I seriously consider of dropping out packages by using a renaming scheme:
my-package:my-symbol
=>
my-package-my-symbol
--
% This article represents my personal views.
% Kari Systa, Tampere Univ. Technology, Box 553, 33101 Tampere, Finland
% work: +358 31 162585 fax: +358 31 162913 home: +358 31 177412
% Internet: ks@cs.tut.fi X.400: C=fi ADMD=fumail O=TUT OU=CS S=ks
--