[cells-devel] Cells on ABCL

Ramarren ramarren at gmail.com
Tue Feb 9 11:08:52 UTC 2010


Hello,

On Tue, Feb 9, 2010 at 10:58 AM, Alessio Stalla <alessiostalla at gmail.com> wrote:
> I'm interested on having Cells running on ABCL. I have downloaded the
> latest snapshot from the Ramarren branch and it appears that only a
> few read conditionals are missing (for the MOP package) to make Cells
> compile and load fine; attached you find the patch.

I have applied the patch to my repository.

> However, the tests fail due to an issue I had already found the first
> time I tried Cells on ABCL (see
> http://www.mail-archive.com/cells-devel@common-lisp.net/msg00582.html).
> The fix for that is apparently simple - replace delete with remove in
> c-unlink-used (link.lisp) - but His Kennyness himself said that this
> naive fix can have a bad impact on performance, so I have not included
> it in my patch. To me, one sensible option would be to enable the
> "fix" only on ABCL (it's better to have less than optimal performance
> than to have no Cells at all!), but it's a decision that should be
> taken by the Cells developers.

Unfortunately, I am not really a Cells developer, I just cleaned some
things up for cells-gtk to run. So I don't quite understand what the
code is doing and the context. Which is why I have no idea whether
cd-useds list can contain duplicates. If it cannot, the code doesn't
really make sense, since as far as I can tell doing this:

diff --git a/link.lisp b/link.lisp
index 047783f..7407876 100644
--- a/link.lisp
+++ b/link.lisp
@@ -78,7 +78,7 @@ See the Lisp Lesser GNU Public License for more details.
                               (progn
                                 (count-it :unlink-unused)
                                 (trc nil "c-unlink-unused" c
:dropping-used (car useds))
-                                (c-unlink-caller (car useds) c)
+                                (caller-drop (car useds) c)
                                 (rplaca useds nil))
                             (progn
                               ;; moved into record-caller 060604
(caller-ensure (car useds) c)

would be strictly equivalent when the function is done and eliminate
the inner delete entirely, which should fix ABCL problem. Unless I
don't see something. I am not sure what would happen if the cd-useds
list contained duplicates, and if it did what would happen when
caller-drop is called multiple time.

At least, if I am getting the control flow correctly. As far as I can
tell the reversed recursion doesn't care the the list is not being
destructively modified on the unwind, but I am not sure how the caller
unlinking interacts with this whole thing.

The tests pass, anyway, and if I put (assert (equal (cd-useds c)
(remove-duplicates (cd-useds c)))) before nail-unused in
c-unlink-unused it doesn't signal an error from cells-gtk demo
application. I am not sure how and if it affects performance.

But that does not preclude the possibility that there are cases when
there could be duplicates, although I am fairly sure that the only
place where this list is being added to is record-caller, which
doesn't allow duplication.

It would be best if someone who knows how this works could comment on
that fix, or at least test it.

Regards,
Jakub Higersberger




More information about the cells-devel mailing list