> Nim automatically passes by reference when it's faster than passing by copy
Are you sure? As one/two years ago that was not the case. And how Nim could do that? As you need to collect and analyse runtime statistics about usage patterns and then decide if passing by value (copying) should be changed to passing by reference. Could Nim do that now?