The copy doesn’t worry me if the behavior is consistent. But, there is
something I don’t understand.
In this program
proc p() =
let x = "abc"
Run
there is a string copy (and an allocation) for "x".
But in this one
proc p() =
var a = "abc"
let x = a
Run
there is no string copy for "x", which may cause problems if "a" is modified
later. "x" is indeed an alias for "x" (with all the problems of aliases which
Nim normally avoids).
There is no risk to directly assign the pointer in the first case. So why is
there a questionable optimization in the second case and not in the first case
where it would be safe?