Email list hosting service & mailing list manager

Re: Problems with field initialization: Proposal Andre van Tonder (15 Sep 2005 16:35 UTC)
Re: Problems with field initialization: Proposal Michael Sperber (15 Sep 2005 18:15 UTC)
Re: Problems with field initialization: Proposal Andre van Tonder (15 Sep 2005 20:41 UTC)
Re: Problems with field initialization: Proposal Michael Sperber (16 Sep 2005 07:11 UTC)
Re: Problems with field initialization: Proposal Andre van Tonder (16 Sep 2005 12:56 UTC)
Re: Problems with field initialization: Proposal Michael Sperber (16 Sep 2005 17:12 UTC)
Re: Problems with field initialization: Proposal Andre van Tonder (16 Sep 2005 15:23 UTC)
Re: Problems with field initialization: Proposal Michael Sperber (16 Sep 2005 17:14 UTC)

Re: Problems with field initialization: Proposal Andre van Tonder 16 Sep 2005 15:23 UTC

On Fri, 16 Sep 2005, Michael Sperber wrote:

> Ok.  Now, you said that you're doing this partly to improve clarity.
> The problem this has is that it's no longer visually apparent which
> arguments go into the parent constructor and which one into this
> type's.  (And this is exactly the kind of thing I can never remember.)

It has occurred to me that a simple FIELD-VALUES macro could
translate into the VALUES expression of my suggestion, so you can write:

    (define-type eq-hash-table
      (constructor (lambda (pred hasher size)
                     (field-values (parent-arguments pred
                                                     hasher
                                                     size)
                                   (child-fields 0))))
      (fields (gc-count mutable)))

Would this help satisfy your concern regarding clarity?

One could, if one wanted to, go further by making FIELD-VALUES abstract (i.e.,
keeping the number and order of the return values of FIELD-VALUES abstract).
This would allow extensions such as the following, which overrides the parent
constructor (which I notice the draft does not seem to allow):

    (define-type eq-hash-table
      (constructor (lambda (size)
                     (field-values (parent-fields eq?
                                                  primitive-hasher
                                                  (make-vector (nearest-prime 42))
                                                  0)
                                   (child-fields 0))))
      (fields (gc-count mutable)))

Cheers
Andre