I was looking at some string routines and I noticed that some string functions like toLowerAscii, indent, replace, etc take a string and return a new string. While a few others like removePrefix, addSep do in place modification. Is this for a reason or convention?