On May 27, 2015 2:47:02 AM GMT+07:00, Ulrich Germann <[email protected]> 
wrote:
>Well, the second document does indeed give some darn good arguments for
>trailing braces: 1. "
>  as shown to us by the prophets Kernighan and Ritchie
>"; 2. "
>K&R are _right_ and [...] K&R are right
>"; 3. "
>  think 25-line terminal screens here
>"
>
>The document also has other great suggestions that we may want to
>adopt."
>  Tabs are 8 characters, and thus indentations are also 8 characters
>"
>
>The fact is: with trailing braces and steadfast refusal to use vertical
>space to improve
>code readibility, you do need a tab width of 8 or so to be able to
>recognize code blocks.
>
>Incidentally, there's actually one recommendation in that document that
>IS
>worth
>adopting *(and in which pretty much all style guides agree plus-minus 5
>characters or so):*
>
>The limit on the length of lines is 80 columns and this is a
>strongly preferred limit.
>
>Let me repeat that:
>
>The limit on the length of lines is 80 columns and this is a
>strongly preferred limit.
>
>And again:
>
>The limit on the length of lines is 80 columns and this is a
>strongly preferred limit.
>
>That is the only thing worth really considering from that document.
>
>We can safely consider the 25-line limit a thing of the past unless you
>program on
>your mobile phone. However, there is a good justification for the
>80-column
>limit: merging code, where it's useful to see the code side by side.
>When
>resolving merge conflicts in git, we are usually dealing with 3
>versions
>that need
>to be compared. Those three columns won't fit on my screen when lines
>are
>120+
>characters long.
>
>I digress. Back to the braces issue. Unlike the arguments for trailing
>braces
>(K&R did it in a printed book to save paper; I'm a retro programmer who
>likes to
>do things old school; it obscures my code so people will think I'm
>really
>awesome
>because they can't really understand what I'm doing without lots of
>effort,
>just like
>Derrida and Piaget didn't write to be understood --- they wrote NOT to
>be
>understood),
>so unlike these arguments, there are very good arguments for having
>opening
>braces
>on a new line and vertically aligned with the closing bracket.
>
>1. It's much easier to recognize logical code blocks. It is. Try it
>out.
>Read code that you
> haven't written and be honest with yourself. It may seem unfamiliar at
>first, but once
>    you are used to it, there's no turning back.
>
>2. If you want to temporarily disable a condition (e.g. in debugging),
>you
>just comment
>  out the if statement. You do not have to THEN put an opening brace at
>the beginning
>  of the line (extra editing) and remove it later (extra editing again)
>--- which also
>   FORCES you to be inconsistent. (You can't always remove the braces
>because
>   of variable scoping). You have the same issue when you want to use
>preprocessor
>commands to have conditions only under certain circumstances, so
>instead
>of
>#ifdef ENABLE_CONDITION
>if (condition)
>#endif
>  {
>
>you'd have to write
>#ifdef ENABLE_CONDITION
>if (condition) {
>#else
>{
>#endif
>
>
>3. Which of the two makes it easier to see where the condition actually
>ends?
>
>if (StaticData::Instance().IsDetailedTranslationReportingEnabled() ||
>   StaticData::Instance().IsDetailedALLTranslationReportingEnabled()) {
>StaticData::Instance().....
>
>or
>
>if (StaticData::Instance().IsDetailedTranslationReportingEnabled() ||
>    StaticData::Instance().IsDetailedALLTranslationReportingEnabled())
>{
>StaticData::Instance().....
>
>In my opinion, the advantages of leading over trailing braces are very
>clear. And there are first
>converts. Ask Matthias.
>
>There's also an brief but illuminating explanation of the historical
>reasons for trailing braces
>here:
>http://programmers.stackexchange.com/questions/236995/why-do-c-developers-newline-opening-brackets
>,
>which also hints at readability studies that appear to support my
>point.
>
>Finally, let's look at the Apple "goto fail" security bug. What
>happened
>there?
>
>This is a snippet of the code in question:
>
>if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
>    goto fail;
>    goto fail;
>
>
>The second goto fail was copied in error, it was always executed and
>lead
>to skipping an
>important security check. Apart from the fact that 'goto' is almost
>always
>a bad idea (but
>we could run into the same problem with switch statements and
>conditional
>break;),
>some people argue that this just proves that you should always, always,
>always, always
>use braces around blocks
>
>So instead of, say
>
>if(condition a)
>  return 1;
>if(condition b)
>  return 2;
>do_more_stuff_here;
>
>we'd have to write
>
>if(condition a) {
>  return 1;
>}
>if(condition b) {
>  return 2;
>}
>
>what was that again about saving vertical space? With trailing braces,
>code
>like the goto fail bug
>code looks perfectly legitimate. With opening braces on a separate
>line, it
>is immediately clear that
>there's something amiss when two  consecutive lines after an if
>statement
>or a for are at the same
>indentation level. Either only the first line should be indented (no
>braces
>used at all), or there
>should be an opening brace between the if and the first line of the
>indented block. It may not be
>clear what the programmer's intention was, but at least we can see that
>something is wrong here.
>
>Trailing braces are bad, tedious and dangerous coding style. Period.
>
>- Uli
>
>On Tue, May 26, 2015 at 6:39 PM, Hieu Hoang <[email protected]>
>wrote:
>
>> ah, the style guide that no-one has ever bothered to follow since I
>> originally wrote it 10 years ago.
>>
>> I changed it in Jan to reflect the style that people actually check
>in, so
>> presumably prefer. The beautifier tries to mimick this style. I will
>change
>> the style guide back.
>>
>> fyi - the original style is based on microsoft, eg
>>      http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx
>> i guess people prefer a unix-based style, eg
>>     https://www.kernel.org/doc/Documentation/CodingStyle
>>
>>
>> I think beautifying is a necessary 'cos we have a distributed project
>of
>> committers who use different editors and OSes. It provides some
>consistency.
>>
>> I regularly see you commit changes where you've manually wrap long
>lines.
>> Youre welcome to change the beautifier to enforce this. However, I
>prefer
>> that the beautifier isn't changed too much otherwise the code will
>flip
>> flop for no good reason.
>>
>>
>>
>> Hieu Hoang
>> Researcher
>> New York University, Abu Dhabi
>> http://www.hoang.co.uk/hieu
>>
>> On 26 May 2015 at 20:30, Ulrich Germann <[email protected]>
>wrote:
>>
>>> Hi Jeroen,
>>>
>>> on the matter of style I'd like to point out that the official style
>>> guidelines for Moses code require opening braces on a separate line.
>>>
>>> http://www.statmt.org/moses/?n=Moses.CodeStyle
>>>
>>> The official style has always required this since the first entry
>about
>>> this in the Wiki back in 2009. Recently (Jan 16 this year) the page
>was
>>> vandalized by an anonymous editor to claim something to the
>contrary, but
>>> the page has now been restored to what it should be. So while you're
>>> fiddling with the beautify scripts, please fix this as well.
>>>
>>> I'm personally no friend of automatic "beautification", because it
>does
>>> far more harm than good in my opinion, but if you insist on doing
>it, it
>>> should be done right.
>>>
>>> Best regards - Uli
>>>
>>> On Sun, May 17, 2015 at 2:13 PM, Jeroen Vermeulen <
>>> [email protected]> wrote:
>>>
>>>> Hi all,
>>>>
>>>> We have a replacement for the old beautify.perl script:
>>>> scripts/other/beautify.py.
>>>>
>>>> It does one of two things, or both:
>>>>  * Re-format C/C++ source code, just like the old script did.
>>>>  * Check for style errors and such.
>>>>
>>>> This last thing is called a "lint" check.  For this I chose
>Pocketlint,
>>>> a checker I have good experiences with, although if people want a
>>>> different one (or additional checks) I can change that.
>>>>
>>>> I fixed most of the lint that got reported, except in JavaScript
>code.
>>>> We may add automatic reformatting for additional languages later. 
>I
>>>> sincerely hope all of this does not cause any serious merge
>problems for
>>>> your branches.
>>>>
>>>> Ideally, everyone would get in the habit of installing Pocketlint
>and
>>>> running this script regularly whether they accidentally added any
>lint.
>>>>  To see how the script works, run:
>>>>
>>>>     ./scripts/other/beautify.py -h
>>>>
>>>> The lint check processes a few files at a time.  By default it
>stops
>>>> when it sees lint.  If you want to see a full check, use the -i
>option.
>>>>
>>>>
>>>> Jeroen
>>>> _______________________________________________
>>>> Moses-support mailing list
>>>> [email protected]
>>>> http://mailman.mit.edu/mailman/listinfo/moses-support
>>>>
>>>>
>>>
>>>
>>> --
>>> Ulrich Germann
>>> Senior Researcher
>>> School of Informatics
>>> University of Edinburgh
>>>
>>> _______________________________________________
>>> Moses-support mailing list
>>> [email protected]
>>> http://mailman.mit.edu/mailman/listinfo/moses-support
>>>
>>>
>>
>
>
>-- 
>Ulrich Germann
>Senior Researcher
>School of Informatics
>University of Edinburgh

Personally  I'd be  in favour  of  opening  braces  on separate  lines and 
80-column  lines, but  what  I  did  to  the  beautify  script  was  not  meant 
 to  trigger  a  vast  rewrite  of  the  main  body  of  code.  Changing  that  
is  a  whole  separate  discussion, involving  not  just  what's  best  but  
also  how  to  deal  with  change.

>From  long  experience  as  a  software  engineer  I  can  say  that  
>automated  code  formatting  is  a  good  thing, provided  it's  done  
>regularly  and people  adjust  their  styles  to  it.  In fact  I  would  
>prefer  any  style  guide  not  to  talk  about  things  like  opening  braces 
> at  all: "Try  to  make  your  code  look  like  what's  already  there, and  
>be aware  that  the  code  is automatically  reformatted  on  a  regular  
>basis.  Run a lint check  before  committing."

(Maybe  I  should  make  the  beautify  script  accept  a list of  filenames, 
and/or add  the  option  to  run  only  on  files  with  uncommitted  changes.)

I'll  have  a  look  into  making  astyle break  long  lines, but  be  warned: 
I  made  the  lint  checker  accept  lines  up  to  400 columns  only  because  
there  were  so  many  over 300!  We  may  have  to  ease  into it a  few  
lines  at  a  time.


Jeroen
_______________________________________________
Moses-support mailing list
[email protected]
http://mailman.mit.edu/mailman/listinfo/moses-support

Reply via email to