http://d.puremagic.com/issues/show_bug.cgi?id=4474
--- Comment #3 from [email protected] 2010-07-17 09:10:49 PDT --- This is a small test program (dmd v2.047): import std.string, std.stdio; void main() { int[string] aa; foreach (line; stdin.byLine()) foreach (word; line.split()) aa[word]++; foreach (word, freq; aa) writeln(freq, " ", word); } Running with itself as input data: test.exe < test.d Prints: 1 eln(fr 1 q, " ", wo 1 writeln 1 } 1 " 1 } 1 } 1 writeln 2 wri 1 wri 1 ", word); )) 1 , w 1 q, " ", word); 1 eln(fr 1 q, " 1 freq, 1 ", 1 eln(freq, " 1 writeln(fr 1 word); 1 writeln(freq, 1 fre 1 e This shows that byLine() is bug-prone (unsafe). While this program: import std.string, std.stdio; void main() { int[string] aa; foreach (line; stdin.byLine()) foreach (word; line.split()) aa[word.dup]++; foreach (word, freq; aa) writeln(freq, " ", word); } Prints a more correct output: 1 (word, 1 std.stdio; 1 int[string] 1 } 1 " 1 void 1 import 3 foreach 1 main() 1 aa) 1 line.split()) 1 stdin.byLine()) 1 (line; 1 freq; 1 (word; 1 ", 1 std.string, 1 word); 1 writeln(freq, 1 aa[word.dup]++; 1 aa; 1 { It's easy to forget dupping/idupping. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
