[elephant-devel] CL implementation support

Alex Mizrahi alex.mizrahi at gmail.com
Mon Sep 12 08:58:41 UTC 2011


> I worked on this project with Clojure, so they may be willing to help diagnose.
> I'll be looking into this later this month when I upgrade the running server
> and add some features to that old project I mentioned.  -Ian

That would be cool, as I'm not comfortable with diving too deep into 
CCL's CLOS implementation.

I've found what happens: if you re-define PERSISTENT-METACLASS (e.g. 
(load "metaclasses.lisp") ) then classes of that metaclass lose their 
slots (CLASS-SLOTS returns NIL) and, perhaps, superclasses too, until 
you redefine them or their parents.

finalize-inheritance doesn't help: it looks like CCL thinks that classes 
are finalized while in fact their content is wiped out.

But what exactly happens with classes when their metaclass is 
redefined... I guess this question is better addressed by guys who wrote 
that CLOS implementation.

...

We trigger this problem because we force re-loading dynamic libraries 
via ASDF:

(defmethod operation-done-p ((o load-op) (c elephant-c-source))
    nil)

So, (asdf:oos 'asdf:load-op :elephant-tests) load Elephant system once.
Then when you work with a certain backend Elephant system it loaded once 
more by that backend's system definition, and ASDF thinks that operation 
is not done, so it loads both dynamic library and everything which 
depends on it, which includes metaclasses.lisp, so PERSISTENT-METACLASS 
is redefined and it fries all PERSISTENT-OBJECT subclasses.

I've tweaked method above changing NIL to T, in this case it passes 
almost all tests:

  Did 508 checks.
     Pass: 507 (99%)
     Skip: 0 ( 0%)
     Fail: 1 ( 0%)

  Failure Details:
  --------------------------------
  LIST-OF-STRINGS-RANDOM []:
       Unexpected Error: #<CCL::ARRAY-ELEMENT-TYPE-ERROR #x302001B44E8D>
NIL doesn't match array element type of <some weird unicode characters here>

...

I think it is funny that current versions of two out of two major open 
source CL implementations have CLOS too broken to run Elephant. Perhaps 
they should include Elephant into their regression tests lol





More information about the elephant-devel mailing list