[webkit-dev] Smart Pointer Analysis Tool for WebKit

Darin Adler darin at apple.com
Wed Sep 23 12:34:05 PDT 2020


> On Sep 23, 2020, at 12:18 PM, Ryosuke Niwa <rniwa at webkit.org> wrote:
> 
> There are quite a few cases where data members are references but then those can also be replaced by a simple member function which retrieves the value of the smart pointer member variable and returns a reference.

I think this should be an explicit recommendation in the project of refactoring to follow these rules.

> For now, a trivial function is defined as a member function defined in the class declaration whose definition simply returns a member variable (the result of get() or a copy if the member variable is a smart pointer).

That seems like a rule that’s too narrow. I would not want a function to become non-trivial just because I moved it from being inline within the class definition to an inline below the class definition in the same header.

This rule worries me a lot right now; it seems like it could result in an explosion of local variable copies of arguments.

> We probably also need to figure out a way to exempt all lambda functions that never get stored anywhere. We have a bunch of helper functions like WTF::map which just calls lambdas on each item while iterating over an array, etc... and there is no need to create a separate Ref / RefPtr in those cases since lambdas are never stored and re-used later.

Does seem important. I am pretty sure I have seen this concept in other languages. We often try to use const Function& for one type of lambda argument and Function&& for the other type, but that’s far from complete.

— Darin


More information about the webkit-dev mailing list