Hi Drew,

> On Jan 5, 2016, at 12:08 AM, Drew Crawford <d...@sealedabstract.com> wrote:
> 
> 
>> On Jan 4, 2016, at 3:09 PM, Tony Parker <anthony.par...@apple.com 
>> <mailto:anthony.par...@apple.com>> wrote:
>> 
>> In this particular case, how would you use the #if? Any should be source 
>> compatible with AnyObject, since Any is a superset of AnyObject, right?
> 
> Well I don't know what you mean by "compatible" but the thing about strongly 
> typed languages is we can't do
> 
> let a: Any
> 
> foo(a: AnyObject) { /* */ }
> 
> foo(a)
> 
> because that is "type error".  We can of course cast, but if in Darwin a.self 
> is already AnyObject, casting again to AnyObject produces a warning, and I 
> try to not have any warnings in my code.
> 
> This is kind of a side quest–there are a lot of ways to work around these 
> problems–but the obviously straightforward one was to use #if to 
> conditionally cast, and that wasn't available.
> 
> More broadly I find myself using the #if that I've created very often–my 
> workflow seems to be to create an extension on an NSClass in-file that adds 
> missing functionality and then PR it to corelibs-foundation afterwards–and 
> conditional compilation really helps with that workflow.

My main objection is that I don’t want us to require clients to #if at all, in 
the long term. Putting it in now means that it will be easier to say “just #if” 
instead of fixing the underlying source incompatibility problem.

I think that if we get to a time nearer to the finish line of Swift 3 and we 
still have many source incompatible changes between the Core Libs Foundation 
and a corresponding Darwin Foundation then we should introduce something like 
the #if.

- Tony

_______________________________________________
swift-corelibs-dev mailing list
swift-corelibs-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev

Reply via email to