On 12/31/25 2:33 PM, Timur Tabi wrote:
> On Wed, 2025-12-31 at 13:47 -0800, John Hubbard wrote:
>> The builder-pattern setters (self -> Self) enabled method chaining like:
>>
>>     reg.set_foo(x).set_sec(y).write(bar);
>>
>> This made separate operations appear as a single expression, obscuring
>> that each setter is a distinct mutation. 
> 
> So you're concerned about the fact that the compiler is not merging the 
> set_foo(x) and the
> set_sec(y) into a single read-modify-write?

No, I don't care about that aspect.

> 
>> These setters are infallible,
>> so the chaining provides no error-propagation benefit—it just obscures
>> what are simple, independent assignments.
>>
>> Change the bitfield!() macro to generate `&mut self` setters, so each
>> operation is a distinct statement:
>>
>>     reg.set_foo(x);
>>     reg.set_sec(y);
>>     reg.write(bar);
> 
> Are you sure about this?  It just seems like you're throwing out a neat 
> little feature of Rust and
> replacing it with something that's very C-like.  This breaks compatible with 
> all users of the regs
> macros.  Seems really disruptive for what seems to me like a cosmetic change.
> 

It's only a neat feature if it *does* something. In this case, it *looks*
like a neat Rust feature, but under the covers it really is just handing
around copies unnecessarily, when really, it *is* doing the C-like thing
in the end.

I object to the fake Rust-ness that's being done here. It's like putting
hubcabs on a car.

thanks,
-- 
John Hubbard

Reply via email to