This has come up in countless patch reviews over the last few years, and it’s 
been obvious which way the winds are blowing.

Collectively I think we’ve decided it’s beneficial to have types related to 
lifecycle management explicitly pointed out in code, and we’ve been reviewing 
patches with that strong preference in mind for our common smart pointer types.

But at the same time, we think it's often ugly and verbose to fully spell out 
the full template of smart pointer types e.g.:

    RetainPtr<NSMutableArray> mutableArray = adoptNS([[NSMutableArray alloc] 
init]);

That’s a little verbose. So for quite some time we’d preferred:

    auto mutableArray = adoptNS([[NSMutableArray alloc] init]);

But at some point advances in C++ came along and our baseline compiler support 
for the project advanced to the point where the template goop isn’t necessary.
So it follows, it’s extremely common review feedback as of late is to use 
`RetainPtr` instead:

    RetainPtr mutableArray = adoptNS([[NSMutableArray alloc] init]);

I propose we make this a formal style rule. Update 
https://webkit.org/code-style-guidelines/ with examples like:

    auto foo = adoptNS([[SomeClass alloc] init]); // Error
    RetainPtr foo = adoptNS([[SomeClass alloc] init]); // The fix

    auto foo = adoptRef(*new SomeClass); // Style error
    Ref foo = adoptRef(*new SomeClass); // The fix

    auto foo = adoptRef(new SomeClass); // Style error
    RefPtr foo = adoptRef(new SomeClass); // The fix

And it’s even a rule that is trivially enforceable by `CheckWebKitStyle`

Assuming there’s no objection, I’ll be preparing patches for the script and the 
website soon.

Thanks,
 Brady
_______________________________________________
webkit-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to