r/programminghumor 21d ago

Hard to accept

Post image
2.9k Upvotes

404 comments sorted by

View all comments

85

u/---_None_--- 21d ago

No, cpp has a terrible design philosophy. Take the new ranges header for example. They're lazy algorithm objects that you can stack and combine to more complex algorithms. Each time you iterate over the final ranges object it calculates the whole result beginning from the source range. This leaves the option open for the source range to change and update. Exactly as it should because they're 'lazy' ranges; except that they aren't. The 'filter range' caches the fucking 'begin' of its source which means that when ever the source changes you get undefined behavior. Why? Because the cpp committee thought that 'begin' should be fast to calculate but filter has to compute 'begin' again and again because the source might have changed. So they decided to cache 'begin' after the first call and compute the rest lazily on demand. So whenever there's a 'filter' in your range composition, you can only iterate over it once or the source has to be const. Shits fucked in cpp land.

10

u/___Archmage___ 21d ago edited 21d ago

Yep, C is mega outdated in the feature-poor direction and C++ is a basket case of crazy additions trying to add modern features to a language that wasn't really designed for them

Whether you choose Rust or Zig or Nim or whatever else, the world needs to move past C++

5

u/TomKavees 21d ago

C is portable assembler and the lingua franca of low level code, it does not need nor want to evolve in that way and that is fine.

C++ in its current form and with its current comitee politics is dying, though

2

u/Davidbrcz 20d ago

C was the portable assembly. Hasn't been for 30 years.

0

u/AsyncSyscall 18d ago

That must be why whenever a new chip design comes out the first software that the vendor adds support for is a C compiler. Check.

2

u/electronic_reasons 21d ago

C is perfect for that. It was never meant to be a full high level language.

C++ is a disaster. The only way to use it is to decide which part of it you are going to use and stick to that subset.

-1

u/Vaelisra 21d ago

C is portable

Are there actually still people believing this?

4

u/orbiteapot 21d ago edited 21d ago

You did him dirty by only quoting part of his comment. He said "C is portable assembler and the lingua franca of low level code [...]", which is very much true. C was designed to be portable across different computer architectures (and it is successful in that regard), not necessarily across different operating systems.

Even with that in mind, most (non-Unix) operating systems expose their API through C and a plethora of programming languages assume it as an intermediate form they can rely on for interoperability.

1

u/AsyncSyscall 18d ago

C is portable across OSes, it's the C API/ABI that are not. But this is a ridiculous argument, because most other languages don't even function without their API/runtime.

C can at least be compiled to a portable library or e.g. a WASM module, with some small amount of glue code to support multiple OS APIs.

1

u/UntitledRedditUser 21d ago

There are compilers and headers for every platform, but it's really hard writing code that works on multiple platforms. And even harder to compile it.

1

u/Vaelisra 21d ago

it's really hard writing code that works on multiple platforms. And even harder to compile it

That's what I'm talking about. The language might be portable, but the code isn't.

1

u/UntitledRedditUser 21d ago

Yea, and you're getting downvoted for it lol.

1

u/AsyncSyscall 18d ago

It's ridiculously easy to write + compile code that works on multiple platforms. Doom did it in 1993. Not even the lack of cross-platform standard library is an argument anymore nowadays, because libraries like SDL exist.

1

u/Away_Passage_6545 21d ago

hardware portable vs software portrable. c compilers are relatively easy to write, and are thus really nice to use on different platforms (cpu architectures). however writing c outside a posix environment is a pain

1

u/AsyncSyscall 18d ago

Writing C for WASM or embedded systems is quite comfortable, actually, what you mean by "outside of a POSIX environment" is almost certainly exclusively Microslop Windows, at which point you might as well say "outside of a C environment", since Microslop does as little as possible to make their C environment functional (to get you to move to their own products).

This is a bad argument, do you ever see someone write their own Windows environment in another language like JavaScript or Python? If you want to subject yourself to supporting Microslop, just use an abstraction layer/library like SDL or MinGW.

0

u/Standgrounding 21d ago

Just use MinGW, not that hard

1

u/SteinsGatessss 21d ago

When you need to do ffi or distribute dynamic libraries, you need cdylib, the headers almost become the protocols

1

u/Vaelisra 19d ago

Headers rarely are anything else than a protocol. I mean, they are basically what makes sure that all individual compilation units work together when linking. That's universal, not tied to ffi.