[llvm-dev] [RFC] changing variable naming rules

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Sat Sep 7 15:32:16 PDT 2019


I do not support this.  I feel the benefit is low, and the churn cost is 
high.

I'm not strongly opposed or anything, I just don't believe this is 
worthwhile.

Philip

On 9/3/2019 8:14 PM, Rui Ueyama via llvm-dev wrote:
> Hi all,
>
> To get wider visibility, build a broader consensus and address 
> concerns on this topic, I'm again raising this as an RFC. This is a 
> proposal to change the rule for variable names from CamelCase to 
> camelBack _really this time_.
>
> Background:
>
> This has been proposed several times on this mailing list in the past. 
> Most recent one was by Michael Platings in February this year [1], and 
> there seems to be a general consensus that the status quo is not ideal.
>
> In the previous RFC thread, I nominated lld [2] as a starter project 
> for renaming and made a sweeping change to rename variables in a few 
> commits. This renaming went well -- even though it broke buildbots, I 
> managed to unbreak them in a timely manner, and more importantly, it 
> has been reported that several downstream repos have successfully 
> migrated to the new naming scheme using a tool that I wrote to create 
> sweeping changes. That being said, some claimed that the renaming 
> attempt didn't get enough attention, despite being discussed in a 
> thread that has 100+ emails. So I'm raising this topic as a new thread.
>
> I propose we do the same thing to another relatively small subproject, 
> clang-tools-extras, to gain more experience, and then migrate the 
> entire LLVM codebase to the new style. It seems technically doable, 
> and even though it would cause a short-term pain, people seem to feel 
> more comfortable with the new naming scheme than the current one. I 
> also believe that the migration won't be that painful.
>
> Objectives:
>
>  - Migrating the entire LLVM repo including subprojects to the new 
> naming scheme without breaking them.
>  - Many projects, especially LLVM and Clang have lots of out-of-tree 
> downstream repos. We need to provide a tool to rebase such repos to a 
> commit after a renaming.
>  - The sweeping change shouldn't break `git blame`.
>
> What I learned from the lld's naming scheme change:
>
>  - There are many member variables in the LLVM/lld codebase that have 
> the same name as accessors ignoring case (i.e. many classes define 
> foo() as an accessor to a member variable Foo). Such variables would 
> conflict with functions after renaming, so we had to rename accessors 
> by prepending `get`.
>
>  - A single large sweeping change seemed to work better than small 
> incremental changes for downstream repos. Downstream repo maintainers 
> rebased their trees to a commit just prior to the sweeping change, 
> apply my tool to rename all variables in their trees, and then rebase 
> the trees onto the sweeping change. Because the tool creates the same 
> diffs for existing code, downstream maintainers basically only had to 
> merge their diffs at the last step.
>
>  - Even though my tool worked satisfactory, it couldn't rewrite code 
> that are excluded by #if, #ifdef and the like, because the clang-based 
> tool doesn't really see the code excluded by the preprocessor. That 
> caused several buildbot breakages.
>
>  - git 2.23 (released in August) added a new option `--ignore-revs` to 
> `git blame` so that the command can take a list of commits that need 
> to be ignored by blame. Developers can set a default ignore file 
> (typically named `.git-blame-ignore-revs`) using `git config` so that 
> blame automatically ignores commits listed in the file. As far as I 
> tried, that command worked pretty well to ignore the sweeping change I 
> made to lld, so the `git blame` issue seems a solved problem now.
>
> Migration plan:
>
> Given the above findings, I propose we migrate to the new coding style 
> in the following steps.
>
>  1. Change the codebase to eliminate name duplication between 
> accessors and members. This can be done incrementally with as many 
> commits as we want.
>  2. Complete the tool and apply it to the entire LLVM tree. I'll 
> publish it at GitHub so that people can take a look and try it out.
>  3. Setup buildbots so that they checkout my GitHub tree, build it and 
> run its tests, to make sure that a sweeping change won't break 
> them. (I don't know how to configure buildbots, but I presume this 
> step is doable.)
>  4. Give a heads-up and submit a sweeping change to 
> clang-tools-extras, and make sure that that won't break anything.
>  5. Give a heads-up and submit a sweeping change to the entire LLVM.
>
> I'd like to submit a sweeping change after LLVM migrates to GitHub to 
> minimize confusion.
>
> [1] http://lists.llvm.org/pipermail/llvm-dev/2019-February/130083.html
> [2] https://github.com/llvm/llvm-project/tree/master/lld
> [3] 
> https://github.com/llvm/llvm-project/commit/3837f4273fcc40cc519035479aefe78e5cbd3055
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190907/af01f96c/attachment.html>


More information about the llvm-dev mailing list