← Back to context

Comment by Gibbon1

5 years ago

Could also fire everyone on the C/C++standards bodies and replace them with people willing to add arrays as a first class data type.

I had that argument with the C standards people a decade ago. [1] Consensus was that it would work technically but not politically. The C++ people are too deep into templates to ever get out.

The basic trick for backwards compatibility is that all arrays have sizes, but you get to specify the expression which represents the size and associate it with the array. So you don't need array descriptors and can keep many existing representations.

Also, if you have slices, you rarely need pointer arithmetic. Slices are pointer arithmetic with sane semantics.

I'm tired of seeing decade after decade of C/C++ buffer overflows. It speaks badly of software engineering as a profession.

[1] http://www.animats.com/papers/languages/safearraysforc43.pdf

  • Or you could be like Jonathan Blow who claims he never has any memory bug issues and so it's not a problem worth solving in his JAI language.

  • The political aspect is why I suggest the solution is to just up and fire all those guys. More realistically Microsoft, Apple and Linus could just force the issue. Gets added to Visual C/C++, LLVM, and Gnu C as an extention. And then start polluting code bases and API's with it.

    • Microsoft is already kind of doing it, if you compile in debug mode, you get bounds checking in all STL types, and you can enable them in release builds as well.

      But yeah, it only works if you use those types.

      There are other divisions pushing for .NET and Rust systems code in Windows, but the political wars between WinDev and DevTools are quite well known, e.g. Longhorn (in .NET) vs WinRT (same thing just in COM).

      4 replies →

    • I read this line:

      > Gets added to Visual C/C++, LLVM, and Gnu C as an extention.

      And had to do a double-take because I thought you were talking about gets(3)…

I'm not sure what exactly your are trying to say. As far as I can tell, there are indeed safe variants for arrays in the standard - both static and dynamic. People just choose to not use them for some arbitrary reasons.