What is your evaluation of the proposal?

Strong yes.

Is the problem being addressed significant enough to warrant a change to Swift?

At Delicious we wrote a huge ugly macro set to define properties in a special 
way so we could make key paths safely:

// Declares a safe-KVC-accessible property
// Use as: @property (opts) MyType KVC(*name);
// Use as: @property (opts) MyType KVC2(*firstName, *lastName);
#define KVC(a) \
    a; SAFE_KVC(a)

#define SAFE_KVC(NAME) \
    void NAME ## $DMSafeKVC(void)

#define K(x) \
    __builtin_choose_expr(sizeof(&x ## $DMSafeKVC), @#x, @"_NOT_A_KEY_")

So you could then use K(title) for example in your code and get what would now 
be #keyPath(title) in this proposal.

And we also had:

#define KeyPath(...) \
    DMMakeKeyPath(__VA_ARGS__, nil)

NSString *DMMakeKeyPath(NSString *firstKey, ...)
{
    NSMutableArray *keyArray = [NSMutableArray arrayWithObject:firstKey];
    va_list varargs;
    va_start(varargs, firstKey);
    NSString *nextKey = nil;
    while ((nextKey = va_arg(varargs, __unsafe_unretained NSString *)))
        [keyArray addObject:nextKey];
    va_end(varargs);
    return [keyArray componentsJoinedByString:@"."];
}

So we could make paths.

But this whole system was ugly as heck to read and required to you use ugly 
macros when defining properties AND when making key paths, so I wouldn’t use it 
again if I had to do it all again. I’d just like to demonstrate crazy lengths 
people have gone to to get SOME of this functionality.

—

I am curious how this proposal integrates with “KVO2.” Not that we’re talking 
about that here, but it’s something I imagine Apple is thinking about, so I’m 
not sure how much value my opinion is without knowing what’s coming.

(As an aside, gosh it’d be nice if other groups writing APIs had such a 
wonderful review process like the Swift group.)


Does this proposal fit well with the feel and direction of Swift?

I think so. Swift is about safety, and this make key paths much safer. And more 
readable as key paths instead of as strings.


If you have used other languages or libraries with a similar feature, how do 
you feel that this proposal compares to those?

The horrifying one we wrote was much inferior yet we shipped a hundred thousand 
lines or so on it.


How much effort did you put into your review? A glance, a quick reading, or an 
in-depth study?

Quick reading. I’m not sure if everything in it is actually implementable and I 
don’t really care what the syntax is, I just want a way to do this cleanly.



Your pal,
-Wil

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to