On 5/12/06, Jeff Pritchard <jp / jeffpritchard.com> wrote:
> At work, to dispel some of the tedium of writing yet another layer of C
> on top of twenty years of rotting but seemingly irreplaceable legacy C
> code...I've taken to writing something I call "coding standards lint" in
> ruby.
>
> It's a little script to run on a C file to catch it in the act of
> violating some of the wacky coding standards that I'm being payed far
> too little to obey.
>
> Some of them are pretty simple even for a ruby nuby like me.  Just
> single line stuff with Regexp's a'plenty.
>
> Today, I decided to tackle something that doesn't live all on one line
> like the easier things I've tested for in the past.  For instance, today
> I was checking to see if for,do, and while loops over a certain length
> have a closing comment at the end that says something like "// this is
> the end of the while(pigsFly) block".
>
> In order to do this, obviously you have to look at several lines of the
> file, not just one at a time.  After staring at the pickaxe book for an
> hour or so, the best idea I was able to come up with was to read the
> whole file into an array using File#readlines.  After that, I used
> Array#for_each_with_index to zip through the array looking for the end
> of the block (being careful to watch out for inner blocks as well).
>
> I got it to work, but I couldn't help feeling guilty for sucking the
> whole bloody file into memory first.  Is there something obvious that I
> could have done instead that would allow me to look at the file the same
> way but leave it on disk instead of in memory?
>
> (BTW, having line numbers to use in error statements is key)
>
> Also, I kind of wonder if my concern is outdated.  The typical C file
> might be on the order of 100k bytes, and the machine has a Gig of memory
> in it.  Am I applying a twenty year old concern to a modern programming
> problem?
>
> thanks,
> jp
>
> --
> Posted via http://www.ruby-forum.com/.
>
>

I learned to program on a machine with 4k of ram -- It took me years
to rid myself of ram guilt :-) Learn to enjoy pulling whole files into
memory when appropriate (and it is in this case).

pth

p.s. You may also find http://cast.rubyforge.org/ useful as you tackle
more complex rules