Nimの標準出力
echo
よく使われる奴。短く楽にかけて良いが、毎回flushをしているせいなのかとても遅い。本当に遅い。
code:nim
for i in 0..<5000000:
echo i
code:result
real 0m3.945s
user 0m0.291s
sys 0m3.654s
stdout.writeLine
flushしない分高速。インタラクティブ問題などではちゃんとflushしよう。
code:nim
for i in 0..<5000000:
stdout.writeLine(i)
code:result
real 0m0.394s
user 0m0.179s
sys 0m0.208s
stdout.write
改行しない。
code:nim
for i in 0..<5000000:
stdout.write($i&'\n')
code:result
real 0m0.376s
user 0m0.163s
sys 0m0.213s
C++のcout呼ぶ奴
code:nim
{.emit:"""
""".}
include cplib/tmpl/sheep
proc cout(i:int){.importcpp: "std::cout << (#) << std::endl;", nodecl.}
for i in 0..<5000000:
cout(i)
code:result
real 0m3.984s
user 0m0.460s
sys 0m3.519s
endlはendlで重いのでちゃんと高速化するべきで、
code:nim
{.emit:"""
""".}
include cplib/tmpl/sheep
proc cout(i:int){.importcpp: """ std::cout << (#) << "\n" """, nodecl.}
for i in 0..<5000000:
cout(i)
code:result
real 0m0.372s
user 0m0.199s
sys 0m0.169s
結論
楽にやりたいならstdout.writeLineが便利そう。