[MacRuby-devel] next release

Laurent Sansonetti lsansonetti at apple.com
Fri Mar 14 09:45:27 PDT 2008


I was wondering the same thing last night, but then... how to  
implement the concept of "frozen object" in pure CFStrings (and  
CFArrays, CFDictionary), without subclassing them?

s = "foo"
s.freeze

Maybe there is a flag that we can use in the internal cftype. But it  
already sounds evil.

Laurent

On Mar 14, 2008, at 12:12 AM, Benjamin Stiglitz wrote:

> Gteat example. Maybe we can treat the immutable strings as frozen-- 
> that sounds nice and clean.
>
> -Ben
>
> On Mar 13, 2008, at 11:09 PM, Laurent Sansonetti <lsansonetti at apple.com 
> > wrote:
>
>>
>> On Mar 13, 2008, at 10:56 PM, Satoshi Nakagawa wrote:
>>
>>>
>>> On 2008/03/14, at 13:53, Laurent Sansonetti wrote:
>>>
>>>>>> Say that you receive a non-mutable string from Objective-C, and  
>>>>>> want to call the #upcase! method on it. AFAIK, MacRuby could 1)  
>>>>>> raise an exception 2) auto-convert the receiver as mutable (but  
>>>>>> a new object will likely have to be created).
>>>>>
>>>>> There's no way to do this switch in the general case of incoming  
>>>>> CFTypes. Can we easily fudge the locals table to point to a new  
>>>>> object in YARV?
>>>>
>>>> Yes we most probably can, but the real question is, should we? I  
>>>> personally have a preference for 1), which is more consistent  
>>>> with the underlying APIs. Mmh.
>>>
>>> I would support 1).  Because of consistency.
>>>
>>> For example,
>>>
>>> defaults = NSUserDefaults.standardUserDefaults
>>> defaults.objectForKey('key').upcase!
>>>
>>> It is intended to replace a string in the user defaults with  
>>> upcase one. With auto-conversion, it would seem to work at a  
>>> glance. But it won't change the string in the user defaults.
>>> Isn't it confusing?
>>
>> Excellent sample, indeed. Modifications to the auto-converted  
>> object won't be reflected in the previous object.
>>
>> I think we can live with 1), especially since it's very  
>> straightforward to work around by using a non-destructive method or  
>> creating a mutable copy. And all objects created from Ruby will be  
>> mutable anyway, so from a pure Ruby perspective there will not be  
>> any difference with the current implementation.
>>
>> Laurent



More information about the MacRuby-devel mailing list