[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Question about MAKE



    Date: Sun, 25 Oct 1992 23:43 EST
    From: meehan@src.dec.com


    The book says, "Dylan does not specify whether the value returned 
    must be a newly allocated instance, or whether MAKE is permitted 
    to return a previously created instance.  If a new instance is allocated, 
    MAKE will call INITIALIZE on the instance before returning it." [page 
    51]

    1. If MAKE returns a previously created instance, this has got to 
    be something that's no longer visible to the program, right? 

Wrong.

Consider that I have some collection of named objects and I want to
insure that no two objects will be created with the same name.  My
application could use MAKE in the same way that the Lisp reader uses
INTERN to insure that if will get a preexisting symbol of a given name
rather than creating another one.

The authors of Dylan had the forseight to not add a gratuitous
restriction to MAKE which would constrain it to return a new object each
time.

								 E.g., 
    something that the garbage collector has tossed back into a weak-pointer 
    pool.  As stated, it sounds as though MAKE could return the same 
    object every time!

If the garbage collector has reclaimed something, it is gone.  The
storage may, and most likely will get reallocated, but the object
occupying that recycled storage is a new object, not some resurrected
zombie undead object.

    2. I expect that INITIALIZE will typically be used to assign non-constant 
    values to slots, to attach pointers to the new object, etc.  If so, 
    then it would seem to make sense for MAKE to call INITIALIZE even 
    when it's returning some "recycled" object, no?

No.  This could well be the wrong behavior for the case I outlined
above.  I can't imagine any circumstance inwhich it would be the right
behavior.