<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 13, 2014 at 3:04 PM, Nick Kledzik <span dir="ltr"><<a href="mailto:kledzik@apple.com" target="_blank">kledzik@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word">I’d like to discuss revising the LLVM coding conventions to change the naming of variables to start with a lowercase letter. This should not be a discussion on the pain of such a transition, or how to get from here to there, but rather, if there is a better place to be. <br></div></blockquote><div><br></div><div>How about we set up a little form (easy with google docs) where people can fill in their gripes. The rules for the form are that every time the current convention causes you an issue or annoyance in practice, you fill in information about your current situation. I don't think we can really evaluate "a better place to be" without empirical information. Armchair speculation about what might or might not be "better" is not going to get us anywhere.</div><div><br></div><div>To kick off the actual gathering of empirical information, here you go: in all my years with LLVM, I can only remember once where the convention caused me an issue; it was of the form:</div><div><br></div><div>class Foo {</div><div>...</div><div>};</div><div>class Bar {</div><div> Foo Foo;</div><div>};</div><div><br></div><div>The exact commit was:</div><div><br></div><div><a href="http://llvm.org/klaus/llvm/commit/457c8ebfd070eb7ee840ec97142f975974cfc834/">http://llvm.org/klaus/llvm/commit/457c8ebfd070eb7ee840ec97142f975974cfc834/</a><br></div><div><br></div><div>-- Sean Silva</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word"><font color="#0f61c8"><br></font>My arguments for the change are:<br><font color="#0f61c8"><br></font>1. No other popular C++ coding style uses capitalized variable names. For instance here are other popular C++ conventions that use camelCase:<br><font color="#0f61c8"><br></font> <a href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml" target="_blank">http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml</a><br> <a href="http://www.c-xx.com/ccc/ccc.php" target="_blank">http://www.c-xx.com/ccc/ccc.php</a><br> <a href="http://geosoft.no/development/cppstyle.html" target="_blank">http://geosoft.no/development/cppstyle.html</a><br><font color="#0f61c8"><br></font>And, of course, the all-lower-case conventions (e.g. C++ ARM) don’t capitalize variable names. In addition, all the common C derived languages don’t use capitalized variable names (e.g. Java, C#, Objective-C).<br><font color="#0f61c8"><br><br></font>2. Ambiguity. Capitalizing type names is common across most C++ conventions. But in LLVM variables are also capitalized which conflates types and variables. Starting variable names with a lowercase letter disambiguates variables from types. For instance, the following are ambiguous using LLVM’s conventions:<br><font color="#0f61c8"><br></font><span style="font-family:Monaco;font-size:x-small;white-space:pre-wrap"> </span><span style="font-family:Monaco;font-size:x-small">Xxx Yyy(Zzz); // function prototype or local object construction?</span><br><span style="font-family:Monaco;font-size:x-small;white-space:pre-wrap"> </span><span style="font-family:Monaco;font-size:x-small">Aaa(Bbb); // function call or cast?</span><br><font color="#0f61c8"><br><br></font>3. Allows name re-use. Since types and variables are both nouns, using different capitalization allows you to use the same simple name for types and variables, for instance:<br><font color="#0f61c8"><br></font><span style="font-family:Monaco;font-size:x-small;white-space:pre-wrap"> </span><span style="font-family:Monaco;font-size:x-small">Stream stream;</span><br><font color="#0f61c8"><br><br></font>4. Dubious history. Years ago the LLVM coding convention did not specify if variables were capitalized or not. Different contributors used different styles. Then in an effort to make the style more uniform, someone flipped a coin and updated the convention doc to say variables should be capitalized. I never saw any on-list discussion about this.<br><font color="#0f61c8"><br><br></font>5. Momentum only. When I’ve talked with various contributors privately, I have found no one who says they likes capitalized variables. It seems like everyone thinks the conventions are carved in stone... <br><font color="#0f61c8"><br><br></font>My proposal is that we modify the LLVM Coding Conventions to have variable names start with a lowercase letter. <br><font color="#0f61c8"><br></font><span style="font-family:Monaco;font-size:x-small">Index: CodingStandards.rst</span><br><span style="font-family:Monaco;font-size:x-small">===================================================================</span><br><span style="font-family:Monaco;font-size:x-small">--- CodingStandards.rst</span><span style="font-family:Monaco;font-size:x-small;white-space:pre-wrap"> </span><span style="font-family:Monaco;font-size:x-small">(revision 219065)</span><br><span style="font-family:Monaco;font-size:x-small">+++ CodingStandards.rst</span><span style="font-family:Monaco;font-size:x-small;white-space:pre-wrap"> </span><span style="font-family:Monaco;font-size:x-small">(working copy)</span><br><span style="font-family:Monaco;font-size:x-small">@@ -1073,8 +1073,8 @@</span><br><span style="font-family:Monaco;font-size:x-small"> nouns and start with an upper-case letter (e.g. ``TextFileReader``).</span><br><span style="font-family:Monaco;font-size:x-small"> </span><br><span style="font-family:Monaco;font-size:x-small"> * **Variable names** should be nouns (as they represent state). The name should</span><br><span style="font-family:Monaco;font-size:x-small">- be camel case, and start with an upper case letter (e.g. ``Leader`` or</span><br><span style="font-family:Monaco;font-size:x-small">- ``Boats``).</span><br><span style="font-family:Monaco;font-size:x-small">+ be camel case, and start with a lower case letter (e.g. ``leader`` or</span><br><span style="font-family:Monaco;font-size:x-small">+ ``boats``).</span><br><span style="font-family:Monaco;font-size:x-small"> </span><br><span style="font-family:Monaco;font-size:x-small"> * **Function names** should be verb phrases (as they represent actions), and</span><br><div><div style="word-wrap:break-word"><div><div style="margin:0px"><font face="Monaco" size="1"> command-like function should be imperative. The name should be camel case,</font></div></div></div></div></div><br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a> <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><br></div></div>