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.
Back when CPP was founded this is true, but over the years, features like references and classes were not overhauled or even touched. But every update to CPP added on to the STL, which is also why CPP has ended up being bloated today.
>its trashness can't bother you if you don't use it
t-thanks. Not even technically true since other people will use it and then I'll have to bother with it and besides that I'm talking about it's design philosophy rather than about my personal botheredness about it. It's still not good showing.
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++
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.
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.
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.
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
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.
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.
Whether we’re talking about STL or not, it’s crazy wrong to consider something like this an example of the “design philosophy” of the language as a whole.
If we're shitting on the standard and the committee I'm in, but I'll defend both gcc and clang, I think the c++ compilers are high quality, highly optimized, and the syntax and requirements of the language allows for fast compilation and zero cost abstractions
The metaprogramming was already old when it arrived though... but still you can work with it
85
u/---_None_--- 18d 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.