One could do a deepcopy-like traversal of everything starting from the GC roots and replace all instances of the old type with the new type... Obviously a very costly operation, but it might be cool to offer that in a package.
On Thursday, February 4, 2016 at 6:34:00 PM UTC-5, Stefan Karpinski wrote: > > That would mean that redefining a type of which there are any (reachable) > instances would invalidate the entire system. That seems significantly > worse than simply not allowing types to be redefined without restarting. > One could potentially make references to "invalidated" objects #undef, but > that seems likely to leave the object graph in a completely unusable state. > > On Thu, Feb 4, 2016 at 6:11 PM, Michael Landis <darksky...@gmail.com > <javascript:>> wrote: > >> They would be invalid too. I know... no garbage collector, so it would >> be necessary to find the inbound references. Smart pointers maybe? Yet >> another performance hit. >> >> On Thursday, February 4, 2016 at 1:54:24 PM UTC-8, Stefan Karpinski wrote: >>> >>> How does one "release" an object? What happens to other objects that >>> retain references to those objects? >>> >>> On Thu, Feb 4, 2016 at 4:35 PM, Michael Landis <darksky...@gmail.com> >>> wrote: >>> >>>> if you added a field, the existing objects could still be valid. If >>>> you killed an attribute, they are invalid and can be released. >>>> >>>> On Thursday, February 4, 2016 at 10:55:25 AM UTC-8, Stefan Karpinski >>>> wrote: >>>>> >>>>> What happens to existing objects of a type when you redefine the type? >>>>> >>>>> On Thu, Feb 4, 2016 at 1:46 PM, Michael Landis <darksky...@gmail.com> >>>>> wrote: >>>>> >>>>>> I think it would be nice to be able to undefine a type, so restarting >>>>>> the environment is not required when adding or deleting an attribute >>>>>> from a >>>>>> type description. Not being able to update a type definition without >>>>>> restarting the environment is a royal pain in the ass. >>>>>> >>>>>> >>>>>> On Saturday, March 8, 2014 at 9:55:37 AM UTC-8, Freddy Chua wrote: >>>>>>> >>>>>>> Suppose I have a Type >>>>>>> >>>>>>> type Foo >>>>>>> a >>>>>>> b >>>>>>> end >>>>>>> >>>>>>> f = Foo(1,2) >>>>>>> f.a = 1 >>>>>>> f.b = 2 >>>>>>> >>>>>>> how do I test whether f.a is defined >>>>>>> I do this isdefined(f, 1) but isdefined(f, 'a') does not work >>>>>>> >>>>>>> another question >>>>>>> how do i undefine f.a such that isdefined(f,1) now returns false >>>>>>> >>>>>> >>>>> >>> >