On Sat, 4 Nov 2006 at 21:49 -0700, Levi Pearson wrote: > 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.
That's one you don't want to forget especially as a LISP coder. In the (perhaps rare) case that you find yourself editing LISP in vim you'll want it. Or, you'll want vim7 that highlights the matching paren/brace/bracket under the cursor. > 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. For my $0.02 I prefer the { on its own line, and no braces when unneeded. I used to prefer "java style". I don't know why my preference changed, but it probably has to do with the prevailing style of code I read written by people smarter than me. > 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. And this is the primary problem with LISP, but it is mitigatable with a helpful editor. -- Hans Fugal ; http://hans.fugal.net There's nothing remarkable about it. All one has to do is hit the right keys at the right time and the instrument plays itself. -- Johann Sebastian Bach
signature.asc
Description: Digital signature
/* PLUG: http://plug.org, #utah on irc.freenode.net Unsubscribe: http://plug.org/mailman/options/plug Don't fear the penguin. */