Ok, I guess the string manipulations in Python are implemented with C as well, and there is not much of lack from dynamic nature of Python in this case.
I checked once more after all the modifications to both codes, with 100% same replaced lines, here's the results: Nim: 0.085 s Python: 70.0 ms Python code: import sys import time; if "-h" in sys.argv or "-help" in sys.argv: print """\n\nUsage: ..." """ print "--> new file is created, e.g: <filename>_new.txt\n\n" sys.exit(0) ms_1 = time.time() * 1000.0 sFile, sFind, sReplaced = sys.argv[1], \ sys.argv[2].replace("\"", ""), \ sys.argv[3].replace("\"", "") fp = open(sFile.replace(".", "_new."), "w") for sLine in open(sFile): fp.write(sLine.replace(sFind, sReplaced)) print "\nTook: " , (time.time() * 1000.0 - ms_1), " ms" Run Nim: import os, times, strutils let seqParams = commandLineParams() if "-h" in seqParams or "-help" in seqParams: echo """\n\nUsage: ...""" echo "--> new file is created, e.g: <filename>_new.txt\n\n" quit(0) var flDurat: float = 0.0 sLine: string = "" let sFile: string = seqParams[0] sFind: string = seqParams[1].replace("\"", "") sReplaced: string = seqParams[2].replace("\"", "") flTime = cpuTime() let f2 = open(sFile.replace(".", "_new."), fmWrite) let f = open(sFile) while f.readLine(sLine): f2.writeLine(sLine.replace(sFind, sReplaced)) flDurat = (cpuTime() - flTime) close(f) echo "\nReplace took: ", flDurat, " s" Run Thanks for the responses!