| ▲ | ninkendo 3 hours ago | |||||||||||||||||||||||||||||||||||||
C's string handling is so abominably terrible that sometimes all people really need is "C with std::string". Oh, and smart pointers too. And hash maps. Vectors too while we're at it. I think that's it. | ||||||||||||||||||||||||||||||||||||||
| ▲ | WalterBright 2 hours ago | parent | next [-] | |||||||||||||||||||||||||||||||||||||
When I developed D, a major priority was string handling. I was inspired by Basic, which had very straightforward, natural strings. The goal was to be as good as Basic strings. And it wasn't hard to achieve. The idea was to use length delimited strings rather than 0 terminated. This meant that slices of strings being strings is a superpower. No more did one have to constantly allocate memory for a slice, and then keep track of that memory. Length-delimited also super speeded string manipulation. One no longer had to scan a string to find its length. This is a big deal for memory caching. Static strings are length delimited too, but also have a 0 at the end, which makes it easy to pass string literals to C functions like printf. And, of course, you can append a 0 to a string anytime. | ||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||
| ▲ | teo_zero 2 hours ago | parent | prev [-] | |||||||||||||||||||||||||||||||||||||
I agree on the former two (std::string and smart pointers) because they can't be nicely implemented without some help from the language itself. The latter two (hash maps and vectors), though, are just compound data types that can be built on top of standard C. All it would need is to agree on a new common library, more modern than the one designed in the 70s. | ||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||