[cl-prevalence-devel] simple-array serialization patch

Sven Van Caekenberghe scaekenberghe at common-lisp.net
Fri Apr 6 08:34:51 UTC 2007


Mike,

On 05 Apr 2007, at 17:19, Michael J. Forster wrote:

> I don't know if you or anyone else is interested, but I have  
> implemented
> xml and sexp serialization/deserialization of simple arrays -- I  
> needed it
> for an app that uses cl-prevalence.  I've attached the patch.

The patch is OK in terms of code (I guess it is working fine in your  
situation), but I am not sure that it is conceptually correct (but  
maybe I am wrong).

According to my reading of CLHS the type simple-array on itself does  
not guarantee a (what I would call) homogeneous array (an array with  
the same type of element everywhere). The typespecs '(simple-array *)  
and '(simple-array <element-type>) would refer to this, but I don't  
know whether you can use them in method signatures.

Even so, the array-element-type could very well be too general, like  
T or cons or array. In that case, your serialization code fails to  
take shared and circular references into account (you are effectively  
assuming more primitive, non-shared, non-circural element-types -  
which probably works in the way you are using CL-PREVALENCE).

So, as I see and understand it now, your code would be OK, if we  
further qualify it with a test that the array-element-type is  
somewhat 'primitive'. But I am not sure how to express that in the  
method signature or how to test/enforce it in code, maybe we need a  
custom type predicate ?

Also, it would be very helpful if we had unit tests covering your  
extended serialization special cases.

Anyway, your patch would be an important optimalization for better/ 
faster serialization in some important cases!

> BTW, I would like to say that cl-prevalence is fantastic.  We've  
> been using
> it for five non-trivial (>25 classes, avg. 3000 instances per  
> class) webapps
> without a hitch for almost a year now.

That is very nice to hear: could you give some more details, like:

- what CL implementation you are using ?
- what serialization you are using ?
- the typical sizes of you transaction and snapshot files ?
- total number of objects under prevalence, 75000 ?
- rate of change (transaction log growth per day or so) ?
- size of the image ?
- machine details ?
- do you have any GC problems ?
- anything else you want to share

Regards,

Sven





More information about the Cl-prevalence-devel mailing list