Hi,

Am Dienstag, 10. Januar 2012 um 17:55 schrieb Grahame Bowland: 
> I've written a CSV reader in Rust. I thought it might be interesting to some 
> of you to see what a day-3 rust programmer comes up with. The code is here:
> https://github.com/grahame/rust-csv/


Kudos and thanks for writing code in rust. 
> 
> It's quite slow - it takes my machine 0.37 seconds to parse a 200kb CSV file. 
> Oddly if I take the print statements on lines 119:122 out, it takes longer - 
> 0.48 seconds. I'm timing with stdout redirected to /dev/null. 
> 
You probably want to avoid allocating row arrays in the inner loop, instead the 
user could be required to pass in a sufficiently sized array from the outside. 
Even if you allocate them in the inner loop, try to allocate them with the 
right size from the start instead of using "+=" as this may cause a complete 
copy of the vector.

The more deeper issue is that your interface fixes the representation 
unnecessarily. A possible approach (perhaps using type classes) is to represent 
a CSV parser as a row iterator of field iterators that allow either getting the 
field contents as a string or to iterate over its chars. In this way a consumer 
of the CSV parser retains full control over how input is processed and 
unnecessary allocation may be avoided.

Somewhat related: There is a ticket for overhauling the json parser and there 
is some weird overlap between lexing and from_str in libcore which may benefit 
from a unified, fast, basic way to parse simple literals.


Greetings,

-- 
Stefan Plantikow 


_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to