Re: [webkit-dev] Style guideline on initializing non-POD types via member initialization

2019-03-21 Thread Alex Christensen
A more specific example of why I object is that I want to do things like add a 
pointer to the thread an object was created on if ASSERT_DISABLED is false so I 
can assert if things are done on invalid threads.  If I do this in a class like 
RefCounted, this rule would make me add a guarded initializer to every 
RefCounted class. 

> On Mar 21, 2019, at 1:37 PM, Alex Christensen  wrote:
> 
> I object.  I don’t find using { *this } in a header disorienting at all.  I 
> think it’s better than adding many duplicate lines in each constructor and 
> risking forgetting one.  I think if we were to remove all the 
> m_attributeOwnerProxy initializers in WebKit it would add lots of duplication 
> with little benefit. If it were a class with a default constructor we would 
> have a high risk of forgetting a constructor somewhere.
> 
>> On Mar 20, 2019, at 9:22 AM, Simon Fraser  wrote:
>> 
>>> On Mar 14, 2019, at 1:06 PM, Filip Pizlo  wrote:
>>> 
>>> I like to draw this distinction: is the initializer a constant?
>>> 
>>> It’s not a constant if it relies on arguments to the constructor. “This” is 
>>> an argument to the constructor. 
>>> 
>>> It’s also not a constant if it involves reading the heap. 
>>> 
>>> So, like you, I would want to see this code done in the constructor. But 
>>> I’m not sure that my general rule is the same as everyone’s. 
>> 
>> This seems like a reasonable proposal to me: only use initializers when 
>> their input is constant data.
>> 
>> Any objections?
>> 
>> Simon
>> 
>>> 
>>> -Filip
>>> 
 On Mar 14, 2019, at 12:59 PM, Simon Fraser  wrote:
 
 I've seen some code recently that initializes non-POD members via 
 initializers. For example, SVGAElement has:
 
 AttributeOwnerProxy m_attributeOwnerProxy { *this };
 
 I find this a little disorientating, and would normally expect to see this 
 in the constructor as m_attributeOwnerProxy(*this), as it makes it easier 
 to find places to set breakpoints, and the ordering of initialization is 
 easier to see.
 
 Are people OK with this pattern, or should we discourage it via the style 
 guidelines (and style checker)?
 
 Simon
 
 ___
 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

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


Re: [webkit-dev] Style guideline on initializing non-POD types via member initialization

2019-03-21 Thread Alex Christensen
I object.  I don’t find using { *this } in a header disorienting at all.  I 
think it’s better than adding many duplicate lines in each constructor and 
risking forgetting one.  I think if we were to remove all the 
m_attributeOwnerProxy initializers in WebKit it would add lots of duplication 
with little benefit. If it were a class with a default constructor we would 
have a high risk of forgetting a constructor somewhere.

> On Mar 20, 2019, at 9:22 AM, Simon Fraser  wrote:
> 
>> On Mar 14, 2019, at 1:06 PM, Filip Pizlo  wrote:
>> 
>> I like to draw this distinction: is the initializer a constant?
>> 
>> It’s not a constant if it relies on arguments to the constructor. “This” is 
>> an argument to the constructor. 
>> 
>> It’s also not a constant if it involves reading the heap. 
>> 
>> So, like you, I would want to see this code done in the constructor. But I’m 
>> not sure that my general rule is the same as everyone’s. 
> 
> This seems like a reasonable proposal to me: only use initializers when their 
> input is constant data.
> 
> Any objections?
> 
> Simon
> 
>> 
>> -Filip
>> 
>>> On Mar 14, 2019, at 12:59 PM, Simon Fraser  wrote:
>>> 
>>> I've seen some code recently that initializes non-POD members via 
>>> initializers. For example, SVGAElement has:
>>> 
>>>  AttributeOwnerProxy m_attributeOwnerProxy { *this };
>>> 
>>> I find this a little disorientating, and would normally expect to see this 
>>> in the constructor as m_attributeOwnerProxy(*this), as it makes it easier 
>>> to find places to set breakpoints, and the ordering of initialization is 
>>> easier to see.
>>> 
>>> Are people OK with this pattern, or should we discourage it via the style 
>>> guidelines (and style checker)?
>>> 
>>> Simon
>>> 
>>> ___
>>> 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


Re: [webkit-dev] Style guideline on initializing non-POD types via member initialization

2019-03-20 Thread Simon Fraser
> On Mar 14, 2019, at 1:06 PM, Filip Pizlo  wrote:
> 
> I like to draw this distinction: is the initializer a constant?
> 
> It’s not a constant if it relies on arguments to the constructor. “This” is 
> an argument to the constructor. 
> 
> It’s also not a constant if it involves reading the heap. 
> 
> So, like you, I would want to see this code done in the constructor. But I’m 
> not sure that my general rule is the same as everyone’s. 

This seems like a reasonable proposal to me: only use initializers when their 
input is constant data.

Any objections?

Simon

> 
> -Filip
> 
>> On Mar 14, 2019, at 12:59 PM, Simon Fraser  wrote:
>> 
>> I've seen some code recently that initializes non-POD members via 
>> initializers. For example, SVGAElement has:
>> 
>>   AttributeOwnerProxy m_attributeOwnerProxy { *this };
>> 
>> I find this a little disorientating, and would normally expect to see this 
>> in the constructor as m_attributeOwnerProxy(*this), as it makes it easier to 
>> find places to set breakpoints, and the ordering of initialization is easier 
>> to see.
>> 
>> Are people OK with this pattern, or should we discourage it via the style 
>> guidelines (and style checker)?
>> 
>> Simon
>> 
>> ___
>> 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


Re: [webkit-dev] Style guideline on initializing non-POD types via member initialization

2019-03-14 Thread Filip Pizlo
I like to draw this distinction: is the initializer a constant?

It’s not a constant if it relies on arguments to the constructor. “This” is an 
argument to the constructor. 

It’s also not a constant if it involves reading the heap. 

So, like you, I would want to see this code done in the constructor. But I’m 
not sure that my general rule is the same as everyone’s. 

-Filip

> On Mar 14, 2019, at 12:59 PM, Simon Fraser  wrote:
> 
> I've seen some code recently that initializes non-POD members via 
> initializers. For example, SVGAElement has:
> 
>AttributeOwnerProxy m_attributeOwnerProxy { *this };
> 
> I find this a little disorientating, and would normally expect to see this in 
> the constructor as m_attributeOwnerProxy(*this), as it makes it easier to 
> find places to set breakpoints, and the ordering of initialization is easier 
> to see.
> 
> Are people OK with this pattern, or should we discourage it via the style 
> guidelines (and style checker)?
> 
> Simon
> 
> ___
> 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