I'm not completely sure if there are cases left where GPC copies the capacity (allocated length) instead of the length. This could be a major slowdown if the length is much shorter than the capacity. I tried to eliminate such cases, but if you find them, let me know. (This can be observed from Pascal code by testing the runtime difference when using strings of the same capacity and vastly different length.)
One thing for users to watch out for given this (copying by length, not capacity, which is good) is to be very careful if you store such strings in a file on disk in an unpacked manner (ie, you store the entire string). This sort of thing can leak sensitive information like passwords or financial data or whatever happens to be sitting around in memory and care should be taken to avoid such leakage (this was a common problem with Word documents of old).
I'm not really familiar with Pascal I/O (since I always use native Mac file I/O or POSIX file I/O), but it'd be interesting to know what a "file of String(255)" writes to the file if you write a string with a short length and garbage in the spare bytes...
Anyway, just a warning/reminder, Peter.