But OP is not going to divert the output into `/dev/null`. In a Linux terminal
you don't really gain much benefits from avoiding flushing because it will
flush on a newline regardless.
$ time cat bigfile.txt | ./mine ; cat -n mine.nim
# ...
real 0m3.707s
user 0m0.662s
sys 0m1.494s
1 import strutils
2
3 proc main() =
4 for ln in stdin.lines:
5 var i = 0
6 for f in ln.split('\t'):
7 if i == 4:
8 echo f
9 break
10 else:
11 inc(i)
Run
$ time cat bigfile.txt | ./krtekz ; cat -n krtekz.nim
# ...
real 0m4.328s
user 0m0.654s
sys 0m1.656s
1 import strutils
2
3 proc main() =
4 for ln in stdin.lines:
5 var i = 0
6 for f in ln.split('\t'):
7 if i == 4:
8 writeLine(stdout, f)
9 break
10 else:
11 inc(i)
12
13 main()
Run
$ cat -n filegen.nim
1 import os
2
3 var file = open(paramStr(1), fmWrite)
4
5 for lineNum in 0 .. 1000000:
6 for wordNum in 0 .. 10:
7 file.write(wordNum, '\t')
8 file.writeLine("")
Run
* * *
Ok I checked OP's code against the bigfile and it's around the same time in my
machine (4.8s). All codes are compiled with the `-d:danger` flag. Python code
is ~(4.1s) in my machine. I can't seem to figure out how do you guys get such
varying numbers. All the codes provide the same output too.