> 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)

Reply via email to