Remix.run Logo
▲ chuckadams 2 hours ago

Both of them memory safety issues. C is just not fit for purpose in this decade.

▲rbanffy an hour ago | parent [-]

C is not to blame for programmers using its features unwisely and, as a result, writing buggy code. Writing secure C code requires discipline, and, most likely, keeping yourself limited to a subset of the language.

This is why languages like Rust have their place - their compilers impose the discipline and the restraint C doesn't. It's not impossible to write code with memory safety issues in Rust - it's just a lot harder. I remember saying the same about Java - it doesn't make writing the program any easier, but it makes writing some bugs difficult.

▲kstrauser an hour ago | parent | next [-]

> C is not to blame for programmers using its features unwisely and, as a result, writing buggy code. Writing secure C code requires discipline, and, most likely, keeping yourself limited to a subset of the language.

It sure is to blame. Evidence shows you need wisdom, discipline, and an impossibly high bar of encyclopedic knowledge of every feature of C and all common libc's combined with an inhuman perfection of never once making a single typo, and a vast amount of tooling to analyze the code and find some of the bugs that made it through anyway.

The best, most trusted, most accomplished C programmers I could name still have a track record of writing vulnerabilities triggered by C footguns, not just garden variety logic bugs that could affect code written in any language. Can I write more diligent C code than the OpenBSD team? Than the Linux devs? Than Fabrice "I made everything" Bellard? Not a chance, but C has bitten each of them. Us mortals don't stand a chance.

▲rbanffy 30 minutes ago | parent [-]

> Us mortals don't stand a chance.

I'd say it's just a matter of moving in shorter steps, test incrementally, use extensive tooling to poke holes at your code, and develop those Linux/BSD/Fabrice skills. You might not be able to accomplish as much as these people did, but that's OK as well. The world still needs simpler programs.

▲kstrauser 6 minutes ago | parent [-]

Why even bother, though? I have +- 8 hours a day to write code. I can spend 7.5 hours writing business logic and .5 hours getting the thing to compile (Rust/Python/Java/C#/whatever), or .5 hours writing business logic and 7.5 hours convincing myself I haven't added an RCE. I just don't see a valid use case for writing non-trivial C programs today. Maintaining existing programs, sure. That stuff isn't going away. Writing anything new in it today, though, seems like engineering malpractice.

▲cowlevel an hour ago | parent | prev | next [-]

Yes and no. I'd say there's nothing wrong with C - it's not evil - but maybe we still shouldn't use it because we should demand things C doesn't provide. There's nothing wrong with assembly code either but we rarely use it.

▲chuckadams an hour ago | parent | prev | next [-]

> C is not to blame for programmers using its features unwisely

"Make no mistakes" works about as well for humans as it does for AI, and we have decades of lived experiences to draw on for that verdict.

▲tialaramex 16 minutes ago | parent | next [-]

And this isn't even a new thing for Programming. We already learned this lesson once.

Go look at a nineteenth century mechanical signal box. When you, through inattention or even malevolence, try to release signals so that train B can plough into train A, the lever won't move because it is physically impossible due to mechanical interlocking, you need to move a piece of sold metal through another piece of solid metal and it won't go.

Do not rely on humans to do boring but important things, they are very bad at this.

▲rbanffy 28 minutes ago | parent | prev [-]

I didn't say "make no mistakes". I said "using its features unwisely". If you can't write software that manages shared mutable state, then don't do it. The world still needs lots of simpler programs.

▲chuckadams 10 minutes ago | parent [-]

Why can't simpler programs be written in languages that at least make an attempt to be memory-safe?

▲echelon 23 minutes ago | parent | prev | next [-]

C allows you to express things easily which should not be easily expressable. When people do these things it is almost always in error.

That is the fault of the language.

▲Ar-Curunir an hour ago | parent | prev [-]

“C cannot fail; it can only be failed”