C++ style question/criticism, was Re: Mozy Contest Answers

Levi Pearson levi at cold.org
Sat Nov 4 21:49:55 MST 2006


On Nov 4, 2006, at 9:13 PM, Dave Smith wrote:
> I thought it looked better aesthetically, and I learned how to use  
> my editor more effectively (vim). I used to keep as much code on a  
> screen as possible, so I could refer back without scrolling (I'll  
> call it "optimized for vertical compression"). Then I learned how  
> to use vim. Between vim's m, ctrl+p, %, *,  #, n, and N, I can move  
> around in code without regard to white space or vertical  
> compression. Also, I've fond ctags and cscope useful when working  
> with others' code, but I rarely use them on my own. That's been my  
> experience. I let the editor do the grunt work, and I lay out the  
> code however I think it looks best, even if that means sacrificing  
> a few rows of terminal space.

My vim-fu has become weak since I started programming in Lisp with  
emacs, so I only recall what % does off the top of my head.  There's  
that memory thing again.

Even with fancy editor navigation, you simply get more context when  
things are reasonably compact.  Jumping around in the code via editor  
magic is just as distracting as scrolling is.  It's like a context  
switch for the visual cortex.  The more clear meaning that can fit  
within visual range on a screen, the more meaning can be absorbed in  
context before movement must take place.

Braces mean nothing to C and nothing to humans by themselves; they  
are simply punctuation.  We don't give English punctuation its own  
lines; we don't even give our most frequently used punctuation marks  
a full letter's width of space.  That's because they're a secondary  
informational cue and not meant to be consciously noticed.  We convey  
meaning to other humans in our words in English, and with keywords,  
functions, and operators in C.  By concentrating on how those  
semantic elements fit in relation to one another on a screen instead  
of the semantically void punctuation, we can get a lot more meaning  
from a given visual space.

This is one thing that became very clear to me as I learned Lisp.   
It's a very punctuation-heavy language, yet the punctuation is almost  
never considered by the humans who read the code.  Meaning is  
conveyed to humans through indentation and positioning of semantic  
elements, and the punctuation is fit in secondarily to that in as  
compact a form as possible, so it can be ignored.

For example:

(defun foo (a b)
   (let ((c 3)
         (d 4))
     (if (a > b)
         (+ a c d)
         (+ b c d))))

This is roughly equivalent to:

int foo(int a, int b) {
   int c = 3;
   int d = 4;

   if (a > b)
     return a + c + d;
   else
     return b + c + d;
}

You can see how the close-parentheses just build up on the end of the  
last line of Lisp.  You may think this is ugly at first, but it is  
done because the parentheses are just punctuation, and Lispers just  
don't look at them.  Giving them each their own line would be  
ridiculous, since the function would take a huge amount of space to  
say exactly the same thing, and would be less clear to boot since the  
information would be spread further from the center of the visual space.

		--Levi



More information about the PLUG mailing list