[Melbourne-pm] Still performing well..
daniel at rimspace.net
Wed May 19 21:32:32 PDT 2010
Sam Watkins <sam at nipl.net> writes:
> On Wed, May 19, 2010 at 03:20:28PM +1000, Daniel Pittman wrote:
>> Well, not entirely: I just think it will make the performance curve of your
>> application look poor once it gets asked to process a 4GB CSV file, while
>> languages that do free unused memory will do a little better. :)
> Well it depends whether you actually need to keep all the data in memory.
That is a fair point. :)
> Stream processing is a different thing. Nicely written C performs much
> better than any interpreted language or bytecode/JIT language for both
> stream processing and loading.
Well, generally. Hand-tuned assembly code often beats the portable assembly
of C at the same job, too. I don't know I would stick with the statement
forever, though, especially if the stream processing was complex and had many
> I don't know of any compiled language that performs better than well-written
> C for many cases, because C is close to the metal, and allows the programmer
> to do things their own way.
...and, just to check here, you are only counting "C that is written well",
not "C in the hands of a random programmer", right?
> For example with stream processing, I commonly use a single resizable buffer
> for each line, so there is no need to free anything inside the loop. You
> said that I am cheating by not freeing anything, but if I write my C (or
> brace) code well, there is no need to malloc or free anything except perhaps
> a single line buffer, and maybe realloc it a couple times if it started off
> too small.
Yeah, and your VM language is going to do the same thing: use a static buffer,
get static buffer performance. Witness, for example, Perl. :)
> Going nuts with malloc and free for every field in a file is almost always a
> bad way to program in C. In Java, perl, python, etc., you really have
> little or no choice about that, there's no nice way to do it as efficiently
> as in C, you need to use an object / buffer for each string.
my $x = '.' x 10000; # preallocate
sysread(FH, $x, 5000); # ...and use that storage
Feel free to verify my claims, if you wish. :)
✣ Daniel Pittman ✉ daniel at rimspace.net ☎ +61 401 155 707
♽ made with 100 percent post-consumer electrons
More information about the Melbourne-pm