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]