On the one side I really like c and c++ because they’re fun and have great performance; they don’t feel like your fighting the language and let me feel sort of creative in the way I do things(compared with something like Rust or Swift).
On the other hand, when weighing one’s feelings against the common good, I guess it’s not really a contest. Plus I suspect a lot of my annoyance with languages like rust stems from not being as familiar with the paradigm. What do you all think?
What memory-safe systems programming languages are out there, besides Rust?
Here are a few:
https://dlang.org/
https://ziglang.org/
https://odin-lang.org/
Zig is better than C, but still a far stretch from the memory safety of Rust: https://www.scattered-thoughts.net/writing/how-safe-is-zig/
Also Swift!
Languages with GC
I appreciate your answer, but I mentioned systems programming, because I was more interested in languages that do not rely on a garbage collector.
To play devil’s advocate, most systems programming can be done even with a garbage collector. Midori was a project to build an operating system on a variant of C#, and although the garbage collector did impose technical difficulties, it wasn’t a dealbreaker. Go isn’t usable everywhere Rust is, but it can in fact be used for many things that previously would have been considered “systems” niches (which is part of why there was a somewhat prevalent misconception in the early days of Rust that they were similar languages). Prominent D developers have defended D’s garbage collector (even though it’s technically optional). Bjarne Stroustrup, the creator of C++, used to express great confidence that C++ would one day have a garbage collector.
…but you’re right, Rust and its rise in popularity (and, conversely, the C++ community’s resistance to adopt anything with garbage collection) have definitely narrowed the common definition of “systems programming” to exclude anything with a “thick” runtime.
I enjoyed the facts spit above.
Huh, I totally missed that my bad
Wasn’t Go designed to be a memory safe systems programming language? I haven’t really used it enough to see if it holds true, though.
No, Go will happily let you seg fault at your first convenience.
Segfaults aren’t particularly dangerous. They mean the problem was caught. The program usually just exits.
Failing to segfault, thereby allowing a bad memory access, is where the real trouble happens.
No, if you try to index something out-of-bounds it will panic, which is not a memory-safety gap.
Go is almost memory safe, but it does suffer from an issue with its thick pointers (type + address) that can cause race conditions to misrepresent the type of a data structure. This can lead to true segmentation faults and out of bound memory accesses, though it will probably be quite difficult (but not impossible) to exploit them.
I’m very flaky here, as rust is the big one, but I think zig and/or nim might be
Zig is better than C, but still a far stretch from memory safe: https://www.scattered-thoughts.net/writing/how-safe-is-zig/ I think Nim is better because it uses a garbage collector and doesn’t have any pointer arithmetic, but I couldn’t find as much on the topic.