"I've been writing C for quite some time, but I never followed good conventions I'm afraid, and I never payed much attention to the optimization tricks of the higher C programmers. Sure, I use const when I can, I use the pointer methods for manual string copying, I even use register for all the good that does with modern compilers, but now, I'm trying to write a C-string handling library for personal use, but I need speed, and I really don't want to use inline ASM. So, I am wondering, what would other Soylenters do to write efficient, pure, standards-compliant C?"
String a = "1234567890";a = a.substring(0,2); // a is now "12"
1) No memory copy has occured.2) "1234567890" is still kept into memory with a reference count of 1
Now (apparently according to the link you posted):
1) Memory copy has occured.2) "1234567890" is eligible for garbage collection while a new area of memory has been assigned to "12".
IMHO, there is work to be done to combine the 2 approaches. Hint: Keep old behavior but revert back to new behavior in the background after a given TTL where "1234567890" hasn't been accessed, then transparently copy the substring "12" to a new memory area.
I know it sounds very complicated but it is pretty simple compared to the many flavors of garbage collection floating around ;-)