> why nse5 not fail to compile? it's modify input --> s before call = "hello" > while s after call = "hellohi"
It is explained here: [https://nim-lang.org/docs/manual.html#pragmas-nosideeffect-pragma](https://nim-lang.org/docs/manual.html#pragmas-nosideeffect-pragma) > why nse6 fail to compile? it's just call md5.toMD5 and not modify anything Low level memory operations like copyMem, or zeroMem are used inside toMD5 proc. I think that is why Nim say "'nse6' can have side effects". [https://github.com/nim-lang/Nim/blob/version-1-0/lib/pure/md5.nim#L180](https://github.com/nim-lang/Nim/blob/version-1-0/lib/pure/md5.nim#L180)