Hello, devs,

It's been over 2 weeks since the first mail, so I think it is safe to assume 
nobody else will vote. We have reached 3 votes in favor of "gem5", and 2 in 
favor of "Gem5". However, after going through the codebase and thinking 
thoroughly, I have decided to change my vote to "Gem5". The vast majority of 
namespaces in the codebase follow the PascalCase style, so it be one more thing 
breaking consistency; classes, enums and others would have to be renamed to 
enforce the lowercase rule, which would case even more conflicts; and some 
functions and sections of the code would become confusing due to the expected 
case of structures. Data for argumentation have been uploaded to the respective 
Jira issue.


As changing my opinion means that the decision tips to the other possibility, 
it would be fair to extend voting a couple more days to give time for people to 
object, in case they were counting on the general census matching theirs. The 
deadline to vote is on **Wednesday, April 5th**. After that, the patches 
pending on this decision can resume.


Finally, just to make sure we are on the same page, because I forgot to 
consider the function-like macros (fatal, panic, etc). the update for macros 
would rename them as GEM5_MACRO_NAME, instead of keeping GEM5_macro_name. That 
is, fatal -> GEM5_FATAL and so on.

Regards,
Daniel

I still favor namespace gem5 - it'd be the "external external" API, i.e. we 
probably wouldn't be using it within src/ that much, and it would be used by 
other simulators...

This is why I'm strongly in favor of lowercase gem5. When external projects 
link to gem5 (which is *going* to happen), I think it's much better to use the 
normative gem5 spelling. It would be very confusing for people to use Gem5 in 
the code but gem5 in documentation/papers. 
```class MyExternalObj: public gem5::SimObject {};```
Jason


On Mon, Apr 19, 2021 at 6:40 AM Bobby Bruce via gem5-dev <gem5-dev@gem5.org> 
wrote:

Nothing gets software devs as engaged as when discussing naming conventions :).

I vote for "gem5" (lowercase) namespace, with all caps MACROS, but my sole 
reason for this is I've grown to flinch whenever I see "Gem5", which I admit 
isn't the best argument.
I echo Daniel's comment that I care more about having a rule and moving past 
this than what that rule should be.

--Dr. Bobby R. Bruce
Room 2235,
Kemper Hall, UC Davis
Davis,
CA, 95616
web: https://www.bobbybruce.net


On Sun, Apr 18, 2021 at 3:44 PM Daniel Carvalho via gem5-dev 
<gem5-dev@gem5.org> wrote:

Overall, there are way more uses of "gem5" than "Gem5" in the codebase, and 
most of the instances that break the identity rule could be easily fixed; 
however, there are cases that generate inconvenience: classes starting with 
lowercase, and situations where gem5 is in the middle of the var name (like 
"haveGem5Extension")  make the code harder to read/understand. In this sense, 
the uppercase version generates better code.

I still favor namespace gem5 - it'd be the "external external" API, i.e. we 
probably wouldn't be using it within src/ that much, and it would be used by 
other simulators and within our SystemC bridge (more on that later) - however, 
since we already have some exceptions, it wouldn't be the end of the world 
having it start with a capital letter.


In the end, I personally do not care about which approach is taken, but the 
decision taken must be taken as a community. Therefore, it would be nice if we 
could have participation from other contributors to make the final decision 
less susceptible to changes/complaints in the future.


Regarding when to use it:IMHO (and not thoroughly thought out), all .cc and .hh 
and objects within src/ should be subject to the namespace. Objects declared 
there are declared and maintained by gem5. Because of that there would probably 
be very few instances of namespace resolution within src/, so we should keep 
avoiding "using namespace" and being verbose about it. Finally, we also 
probably want to encourage users to define their objects inside the gem5 
namespace to make it less unlikely that they will give up on uploading their 
contributions due to the different styles, and the laziness to adapt code. This 
means that disturbance in user code would be minimal: they would simply add 
"namespace (G|g)em5 {" in the beginning and "} // namespace (G|g)em5" at the 
end, instead of multiple "(G)|gem5::" instances.


Regards,
Daniel
For the record, if the namespaces you found using snake_case start with sc_, 
those are for systemc and are mandated by that standard. The one exception, 
sc_gem5, is one I made up which is closely associated with the other systemc 
namespaces and is named similarly to them for consistency.
Gabe
On Thu, Apr 15, 2021 at 1:51 AM Giacomo Travaglini <giacomo.travagl...@arm.com> 
wrote:

My vote goes to 1 and A as well

My sole argument is consistency; in general I'd rather start a namespace with a 
lowercase. So that when we have something
like a scope resolution we know we are dealing with a namespace and not a 
class. But that's off-topic.

Namespace names are anyway not covered by our coding style, so it's probably 
worth adding an entry.

https://www.gem5.org/documentation/general_docs/development/coding_style/

>From a quick grep I can see most of our namespaces follow the PascalCase type, 
>though there are some namespaces using snake_case convention.

Giacomo

> -----Original Message-----
> From: Gabe Black via gem5-dev <gem5-dev@gem5.org>
> Sent: 15 April 2021 09:03
> To: gem5 Developer List <gem5-dev@gem5.org>
> Cc: Gabe Black <gabe.bl...@gmail.com>
> Subject: [gem5-dev] Re: gem5 namespace
>
> My vote is for 1 and A.
>
> We have style rules for a reason, and that is because not following them
> causes technical problems like name collisions, and makes it less obvious
> when reading code what things are and what they're doing. It's a bit
> hypocritical to say that we should follow style rules and completely ignore
> the aesthetic rule when capitalizing GEM5_, but then say that the aesthetic
> rule should win when dealing with the namespace.
>
> This is further inconsistent with the Gem5Internal namespace, the Gem5
> class in SCons, the Gem5Op instruction format used for ARM, and the
> Gem5Imm constant used for ARM semihosting. It would also cause a collision
> with any variable called gem5, a completely legal and reasonable name to use,
> *especially* in code outside of gem5 which might be using it to refer to
> something related to gem5 which it is interacting with.
>
> There are no other instances where we let superficial aesthetic conventions
> like this overrule technical considerations. We don't add _tm to the end of
> trademarked names, we don't call AtomicSimpleCPU the atomic simple CPU
> since that's not a valid class name, and a hundred other examples of where
> prose takes a back seat because this is not prose, this is a conceptual 
> machine
> people happen to be able to read.
>
> Our website is the place for branding and identity and marketing, our code is
> not.
>
> Gabe
>
> On Wed, Apr 14, 2021 at 7:28 AM Jason Lowe-Power via gem5-dev <gem5-
> d...@gem5.org <mailto:gem5-dev@gem5.org> > wrote:
>
>
> Thanks for putting this all together, Daniel!
>
> My opinion is the same as yours: option 2 and macro A.
>
> One other thing we need to do is to standardize and document when
> and where you need to use the gem5 namespace. For instance, do we need
> to update *all* headers to be in the gem5 namespace? If not, when is an
> object in the gem5 namespace and when it is not? What about `using
> namespace gem5`? Can/must all .cc files include this?
>
> Since this is a relatively big change to the coding standards which
> could cause significant frustration to our users, we should be sure to
> document and standardize *before* we make any code changes.
>
> Cheers,
> Jason
>
>
> On Wed, Apr 14, 2021 at 6:48 AM Daniel Carvalho via gem5-dev
> <gem5-dev@gem5.org <mailto:gem5-dev@gem5.org> > wrote:
>
>
> Hello, devs,
>
>
>
> We currently have a recurring issue, which is the lack of a
> gem5 namespace.
> This generates collision with other libraries and user code.
>
>
>
> A Jira ticket has been created to point out the issue last year:
>
>
> https://gem5.atlassian.net/jira/software/c/projects/GEM5/issues/G
> EM5-730
>
>
> And this topic has been brought up a few times:
>
>
> https://www.mail-archive.com/gem5-
> d...@gem5.org/msg37770.html
>
> https://gem5-
> review.googlesource.com/c/public/gem5/+/40878
>
> https://www.mail-archive.com/gem5-
> d...@gem5.org/msg36453.html
>
>
> Finally, there were already patches that were consequences
> of lack of a gem5
> namespace:
>
>
> https://gem5-
> review.googlesource.com/c/public/gem5/+/32175
>
> https://gem5-
> review.googlesource.com/c/public/gem5/+/40878
>
>
> A similar issue exists for macros, and an existing proposal to
> solve it already
> exists, which is to add a "GEM5_" prefix. It follows the coding
> style, which
> dictates that "preprocessor symbols (constants and macros)
> should be all
> caps with underscores":
>
>
>
> https://gem5.atlassian.net/jira/software/c/projects/GEM5/issues/G
> EM5-912
>
>
> It does not seem to be controversial to add this namespace;
> however, there is
> still one blocker to greenlight its creation: what will be its
> name. There are
> no explicit rules regarding namespace naming; however, they
> are typically
> declared starting with an uppercase letter followed by
> lowercase letters. So,
> theoretically, gem5's namespace should be "Gem5". This,
> however, conflicts
> with gem5's identity: "“gem5” should always have a
> lowercase “g”"
> (see http://www.gem5.org/getting_started/).
>
>
>
> We should decide as a community what is the best approach
> to take, so I'll
> list the options and will request you to cast your votes. If you
> would like
> to add remarks to the discussion, feel free to do so.
>
>
>
> NAMESPACE:
>
>
> 1 - namespace Gem5 {}
>
>
> 2 - namespace gem5 {}
>
>
>
> MACROS:
>
>
> A - GEM5_MACRO_NAME
>
>
> B - gem5_MACRO_NAME
>
>
> Personally, I think that identity precedes coding style, so
> *option 2* should
> be taken. Yet, in a slightly inconsistent manner, I would vote
> for macro
> *option A*. My argument being that it would be more
> convenient to type it
> with all caps, and that it would be implied from the identity
> that it refers to
> instances of the identity containing lowercase letters, which
> is not the case
> of "GEM5_".
>
> Best,
> Daniel
>
>
> _______________________________________________
> gem5-dev mailing list -- gem5-dev@gem5.org <mailto:gem5-
> d...@gem5.org>
> To unsubscribe send an email to gem5-dev-le...@gem5.org
> <mailto:gem5-dev-le...@gem5.org>
> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
>
> _______________________________________________
> gem5-dev mailing list -- gem5-dev@gem5.org <mailto:gem5-
> d...@gem5.org>
> To unsubscribe send an email to gem5-dev-le...@gem5.org
> <mailto:gem5-dev-le...@gem5.org>
> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.

_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to