From owner-freebsd-hackers Mon Sep 18 21:31:12 1995 Return-Path: owner-hackers Received: (from root@localhost) by freefall.freebsd.org (8.6.12/8.6.6) id VAA01571 for hackers-outgoing; Mon, 18 Sep 1995 21:31:12 -0700 Received: from rocky.sri.MT.net (sri.MT.net [204.94.231.129]) by freefall.freebsd.org (8.6.12/8.6.6) with ESMTP id VAA01561 for ; Mon, 18 Sep 1995 21:31:08 -0700 Received: (from nate@localhost) by rocky.sri.MT.net (8.6.12/8.6.12) id WAA24091; Mon, 18 Sep 1995 22:33:01 -0600 Date: Mon, 18 Sep 1995 22:33:01 -0600 From: Nate Williams Message-Id: <199509190433.WAA24091@rocky.sri.MT.net> To: Terry Lambert Cc: davidg@Root.COM, hackers@freefall.freebsd.org Subject: Coding style ( was Re: why is this not a bug in namei?) In-Reply-To: <199509190326.UAA09176@phaeton.artisoft.com> References: <199509182328.QAA03738@corbin.Root.COM> <199509190326.UAA09176@phaeton.artisoft.com> Sender: owner-hackers@FreeBSD.org Precedence: bulk Terry Lambert writes: [ Terry's coding style ] > According to a Bell Labs study, human beings are capable of keeping 5 to > 9 items in short term memory simultaneously. That would be why phone > numbers are 7 digits. > > I'm not even taxing the low end of the study participants. What this has to do with you using goto's I have no idea. > On the other hand, if I want block profiling without having to rewrite > the compiler, then I have to add a block start on function entry and > one on every function exit. If there is one function exit, then I > have to add one. Again, what this has to do with you using goto's I have no idea. > This "anti-goto-political-correctness-bullshit" has to go. Anyone who > thinks a for loop generates prettier assembly than an label/if/goto > had better read more compiler output. Huh? I am in *complete* agreement with David here. I have looked at *thousands* if not *millions* of lines of code in my years in programming. Although there are times when gotos are necessary AND they improve readability, they are the exception rather than the rule. When I see two gotos in a single function it is my opinion that the author has not spent the time to write the code in a readable manner. Now, there may be a completely valid reason for it, but it will take a lot for me to believe that. :) A rule enforced in all software houses I've worked in. "Programmers who use gotos will be publically ridiculed" > At least with a goto instead of a break, I have an explicitly defined > location where my instruction pointer will end up. This beats trying > to find where a break exits a loop all to hell. > > > It goes a long way toward obscuring the code flow and makes it difficult > > to read. > > I supposed changing code that looks like: > > if( error = func()) { > [cleanup] > return( error); > } > > Into: > > error = func(); > if( error) { > [cleanup] > return( error); > } > > Has a function other than to make gcc quit whining about assignments > in if statements (and to make the FreeBSD vs. 4.4BSD diffs larger)? That's irrelevant since CSRG is no longer, and 4.4Lite2 is the *last* release of BSD code from them. Who'd have thought Lite2 would even be released? > It doesn't seem to make it easier to read. Nor does it make it any harder to read. However, I prefer the latter vs. the former simply because any compiler worth it's weight in salt will cause the exact same code to be emitted for both. I also find I am more likely to check the error status more thoroughly in the second case since it's not so complicated, AND I have the error state saved so I can do multiple checks w/out getting overly complicated. > A goto is a tool for handling an exceptional conditions. And that's > where goto's are use in my code. > > The alternative is negative comparison code blocks, ie: > > if( !(error = foo()) { > [real code] > } else { > [error code] > } I prefer this to using gotos simply because my mind is tuned for parentheses, not goto statements. It's a matter of what you are used to seeing. Nate