News for hackers. Stuff that matters.
Re:I write games in C (yes, C) by uecker on Saturday February 07, 2026 @04:53PM (#46928507)
why not std::string?
Re:I write games in C (yes, C) by teo_zero on Saturday February 07, 2026 @05:23PM (#46928800)
You can surely create a std::string-like type in C, call it "newstring", and write functions that accept and return newstrings, and re-implement the whole standard library to work with newstrings, from printf() onwards. But you'll never have the comfort of newstring literals. The nice syntax with quotes is tied to zero-terminated strings. Of course you can litter your code with preprocessor macros, but it's inelegant and brittle.
Re:I write games in C (yes, C) by krapp on Saturday February 07, 2026 @07:20PM (#46929866)
Re:I write games in C (yes, C) by pjmlp on Sunday February 08, 2026 @03:42AM (#46932534)
If only WG14 added something similar to C.

Yes, SDS exists, however vocabulary types are quite relevant for adoption at scale.

Re:I write games in C (yes, C) by tialaramex on Sunday February 08, 2026 @12:11PM (#46936277)
Because C wants to run on bare metal, an allocating type like C++ std::string (or Rust's String) isn't affordable for what you mean here.

I think you want the string slice reference type, what C++ called std::string_view and Rust calls &str. This type is just two facts about some text, where it is in memory and how long it is (or equivalently where it ends, storing the length is often in practice slightly faster in real machines so if you're making a new one do that)

In C++ this is maybe non-obvious because it took until 2020 for C++ to get this type - WG21 are crazy, but this is the type you actually want as a fundamental, not an allocating type like std::string.

Alternatively, if you're not yet ready to accept that all text should use UTF-8 encoding, -- and maybe C isn't ready for that yet - you don't want this type you just want byte slice references, Rust's &[u8] or C++ std::span<char>

Re:I write games in C (yes, C) by direwolf20 on Saturday February 07, 2026 @05:11PM (#46928657)
It's a class, so it doesn't work in C.
Re:I write games in C (yes, C) by uecker on Saturday February 07, 2026 @05:17PM (#46928726)
Sure, but you can have a similar string abstraction in C. What would you miss? The overloaded operators?
Re:I write games in C (yes, C) by direwolf20 on Saturday February 07, 2026 @07:31PM (#46929951)
Automatic memory accounting — construct/copy/destruct. You can't abstract these in C. You always have to call i_copied_the_string(&string) after copying the string and you always have to call the_string_is_out_of_scope_now(&string) just before it goes out of scope
Re:I write games in C (yes, C) by uecker on Sunday February 08, 2026 @01:37AM (#46931860)
This seems orthogonal to std::string. People who pick C do not want automatic memory management, but might want better strings.
Re:I write games in C (yes, C) by direwolf20 on Sunday February 08, 2026 @05:01AM (#46932933)
Automatic memory management is literally what makes them better
Re:I write games in C (yes, C) by uecker on Sunday February 08, 2026 @05:53AM (#46933187)
For many string operations such as appending, inserting, overwriting etc. the memory management can be made automatic as well in C, and I think this is the main advantage. Just automatic free at scope end does not work (without extensions).
Re:I write games in C (yes, C) by direwolf20 on Sunday February 08, 2026 @11:11AM (#46935562)
You can make strings (or bignums or matrices) more convenient than the C default but you can never make them as convenient as ints, while in C++ you can.
Re:I write games in C (yes, C) by uecker on Sunday February 08, 2026 @11:44AM (#46935973)
Yes, but I do not think this is a good thing. A programming language has to fulfill many requirements, and convenience for the programmer is not the most important.
Re:I write games in C (yes, C) by direwolf20 on Sunday February 08, 2026 @05:37PM (#46939290)
Empirically it is. All the most used languages are the most convenient ones.