Jonathan M Davis <jmdavisp...@gmx.com> writes: > On Thursday, July 05, 2012 18:57:05 Wouter Verhelst wrote: >> To be fair, there are a _few_ areas in which zero-terminated strings may >> possibly outperform zero-terminated strings (appending data in the case >> where you know the memory block is large enough, for instance). But >> they're far and few between, and it would indeed be silly to switch to >> zero-terminated strings. > > Actually, I'd expect a string that maintains its length to beat a zero- > terminated string at that - especially because you'd have to already know the > string's length to pull that off, which is O(n) for zero-terminated strings. > The _only_ time that the zero-terminated string might outperform the one > which > maintained its length when you to append is if you already happen to know the > length of the string being appended to and the string being appended (which > you wouldn't normally with zero-terminated strings), because then the zero- > terminated string would have one more byte to copy as part of its memcpy than > the other string would, but the other string would have to adjust its length, > making it cost _slightly_ more.
That's what I meant, yes. > But really, given the overal costs of zero- > terminated length, it would be ridiculous to even count that extra bit of > performance given the _huge_ performance losses everywhere else with them. Absolutely. > The _only_ valid excuse that I'm aware of for picking such a horrid design is > the fact that it costs extra memory to maintain the length of an array along > with the array, and when C was created, they cared a _lot_ more about memory > usage than we do today. So, regardless of what the pros or cons were in the > short run, in the long run, their decision was a very poor one that pretty > much no one has duplicated. Well, really, strings in C are just a special case of arrays (as is true in D as well), and arrays in C are just a special case of pointers (which isn't true in D). That means the language is fairly compact, which also means the compiler has much lower resource requirements. I think that, much more than any requirements at runtime, has driven the choice for zero-terminated strings. Just for comparison, what happens to DMD's memory usage when you do extensive templating wouldn't have been possible back in 1969 ;-) -- The volume of a pizza of thickness a and radius z can be described by the following formula: pi zz a