[swift-evolution] SR-104: Improve Crash-Safety when Importing Objective-C Code Without Nullability Attributes
Fabian Ehrentraud
Fabian.Ehrentraud at willhaben.at
Thu Dec 10 05:42:49 CST 2015
Are there any objections to variant 2 "Import un-annotated code as Optional"? If not, I would create the proposal.
> Am 09.12.2015 um 07:11 schrieb Chris Lattner <clattner at apple.com>:
>
>
>> On Dec 8, 2015, at 4:09 AM, Fabian Ehrentraud via swift-evolution <swift-evolution at swift.org> wrote:
>>
>> Swift code accessing Objective-C methods can easily crash - if the Objective-C code does not include nullability attributes, the code is brought as implicitly unwrapped into Swift, where unsafe accesses do not produce compiler warnings.
>>
>> I created issue SR-104 for this, but as suggested by Jordan Rose it should be discussed on this mailing list first.
>>
>> Short example:
>>
>> // Objective-C
>> - (NSString *)giveMeAString { return nil; }
>>
>> // Swift
>> func thisWillCrash() {
>> let string = someObjectiveCObject.giveMeAString()
>> let length = string.length // crash
>> }
>>
>> The ClangImporter could handle this issue in several safer ways:
>>
>> 1. Only import declarations that are nullability annotated (as proposed by Greg Parker)
>> Positive side effect would be that it would motivate to write nullability annotations.
>
> This seems unfortunate to me, because it would severely hamper interoperating with Objective-C and *C* APIs that have not been audited. While Apple is keen to audit their APIs, I doubt that all the linux system headers will get updated in a timely manner and users don’t generally have a way to do anything about that.
>
>> 2. Import un-annotated code as Optional
>> Values would need to be unwrapped every time, which does not hurt too much due to the easy use of the `?` syntactic sugar.
>
> This is a very interesting idea, one I haven’t considered recently. I agree with you that this is worth considering, and I would love to see IUO just get summarily deleted :-)
>
> -Chris
More information about the swift-evolution
mailing list