On Thu, Aug 20, 2009 at 7:25 AM, Jesse Luehrs<d...@tozt.net> wrote:
> On Thu, Aug 20, 2009 at 06:56:11AM +0100, Piers Cawley wrote:
>> On Thu, Aug 20, 2009 at 4:40 AM, Jesse Luehrs<d...@tozt.net> wrote:
>> >  This failed because Child was being created and immutablized partway
>> >  through the definition of Parent, and so Child's constructor (among
>> >  other things) was incorrect (it didn't include attribute
>> >  initialization code for the child attribute). This branch adds a
>> >  warning whenever someone tries to call make_immutable on a class whose
>> >  ancestor classes are not already immutable. There are a few caveats:
>>
>> I'm not familiar with the code, but would it be possible to remove the
>> warning and, instead attach some kind of memento to the parents'
>> metaclasses which will freeze the child class once the last parent has
>> become immutable?
>
> Having the child class silently not become immutable in certain cases
> when you call make_immutable seems wrong, to me. How do you know the
> parent classes are ever actually going to be immutablized?

You don't, obviously. I'd argue that make_immutable is, in fact,
poorly named - it seems overly imperative and bound up with
assumptions about implementation. Surely it would be better to have
something more generic, say:

    __PACKAGE__->meta->finalize_definition; # Terrible name

which has the effect of making the class immutable where possible. And
if, in the future, we find a better way of closing a class which
doesn't involve immutability it can still be triggered off
finalize_definition.

However, given the mindshare that make_immutable has by now, that boat
has probably sailed.

Reply via email to