> On Jan 30, 2023, at 12:11 PM, Ryosuke Niwa via webkit-dev 
> <webkit-dev@lists.webkit.org> wrote:
> 
>> On Jan 30, 2023, at 10:47 AM, Alexey Proskuryakov <a...@webkit.org> wrote:
>> 
>> Reviving this old thread, reading it again made me wish for two things:
>> 
>> - a wiki document that describes what we are trying to do, not just a thread 
>> which patches the proposal with clarifications;
> 
> Yeah, let me go make one.

I’ve posted https://github.com/WebKit/WebKit/wiki/Smart-Pointer-Usage-Rules

>> - a discussion of why we can postpone figuring out what to do with 
>> containers (like Vector<Node*> or HashMap<RenderBox*, 
>> RenderFragmentContainer*>).
> 
> This was probably an oversight on my part. The intention is to make member 
> variables / local variables of container type should also be using smart 
> pointers in its type: e.g. Vector<RefPtr<Node>> instead of Vector<Node*>. 
> WeakHashMap<RenderBox, WeakPtr<RenderFragmentContainer>> instead of 
> HashMap<RenderBox*, RenderFragmentContainer*>. I’ll try to clarify this in 
> the new doc I make.

Fixed in the new wiki documentation.

- R. Niwa

>>> 23 сент. 2020 г., в 1:54 PM, Jan Korous <jkor...@apple.com> написал(а):
>>> 
>>> Hi all,
>>> 
>>> I am an engineer at Security Tools team at Apple responsible for the 
>>> tooling support for this effort.
>>> 
>>>> On Sep 23, 2020, at 12:34 PM, Darin Adler <da...@apple.com> wrote:
>>>> 
>>>>> On Sep 23, 2020, at 12:18 PM, Ryosuke Niwa <rn...@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.
>>> 
>>> Re: lambda captures - I think we have two ideas here.
>>> 
>>> 1. Allow WeakPtr captures.
>>> This makes sense to do but it implies we have to add the notion of 
>>> ownership to the rules. The thing is that WeakPtr is safe on its own (and 
>>> technically reference-counted) but it can’t be used as a safety measure in 
>>> the way of RefPtr or Ref since it doesn’t own the memory (not even in a 
>>> shared manner).
>>> 
>>> 2. Allow raw pointer/reference captures.
>>> This makes sense given you use generic algorithms in the codebase. I will 
>>> implement a new version of the checker - currently it is still based on 
>>> simple AST analysis and for this kind of reasoning we’ll need to use 
>>> symbolic execution in Clang Static Analyzer.
>>> 
>>> Thanks,
>>> 
>>> Jan
>>> 
>>>> — Darin
>>> 
>>> _______________________________________________
>>> webkit-dev mailing list
>>> webkit-dev@lists.webkit.org
>>> https://lists.webkit.org/mailman/listinfo/webkit-dev
>> 
>> 
> 
> _______________________________________________
> webkit-dev mailing list
> webkit-dev@lists.webkit.org
> https://lists.webkit.org/mailman/listinfo/webkit-dev

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

Reply via email to