RFR: 8234779: Provide idiom for declaring classes noncopyable
Kim Barrett
kim.barrett at oracle.com
Sun Dec 1 23:10:53 UTC 2019
> On Nov 29, 2019, at 6:04 PM, John Rose <john.r.rose at oracle.com> wrote:
>
> On Nov 27, 2019, at 1:49 PM, Kim Barrett <kim.barrett at oracle.com> wrote:
>>
>> The proposed macro significantly reduces that wordiness. Far more
>> importantly, it makes the intent entirely self-evident; there's no
>> need for any explanatory comments.
>
> Or to put it another way, the explanatory comments can be centralized
> in the header file which defines the macro. And the macro can be given
> a name which explains the intent. The name and comments can reflect
> HotSpot-specific “house rules” (local design rules and conventions).
>
> On Nov 29, 2019, at 1:45 PM, Kim Barrett <kim.barrett at oracle.com> wrote:
>> … I also like putting repetitive code behind names to make it
>> easier to chunk and understand.
>
> +1 A well-chosen macro name can be easier to read than a chunk of boilerplate.
> This is especially applicable to us since C++ boilerplate evolves over time, and
> as a highly portable system we don’t have the ability to track one particular
> dialect of C++. But even if we did, we'd still have complex “house rules” to
> enforce and document, and macros play a role there.
>
> I don’t think that learning the “house macros” for HotSpot is an excessive
> burden for people learning to work on HotSpot. Kim’s proposal seems to
> be yet another one of these macros.
>
> Thanks, Kim and Per, for marshaling the arguments pro and con.
>
> — John
Thanks John.
I've also decided to take your earlier advice (from off-list) to use
an external terminating semicolon, rather than having it in the macro
expansion (webrev updated in place). Besides potentially helping
editors indent properly (which is not a problem for at least some
editors), some uses looked very odd in context without a trailing
semicolon. (The location of the terminating semicolon is rendered moot
by C++11, but I can't prove all compilers currently used to build JDK
support empty declarations in classes.) While I prefer macros whose
expansions are "complete" (where that makes sense for the macro),
that's not a strong preference.
More information about the hotspot-dev
mailing list