Live data from Hacker News

21st Century C++

cacm.acm.org

251–260 of 281 posts

Re: 21st Century C++

#251
post #249

Earlier quoted context omitted.

Like std::vector, std::unordered_map also doesn't do a good job on reservation, I've never been entirely sure what to make of that - did they not care? Or is there some subtle reason why what they're doing made sense on the 1980s computers where this was conceived? For std::vector it apparently just didn't occur to C++ people to provide the correct API, Bjarne Stroustrup claims the only reason to use a reservation AP…

> For std::vector it apparently just didn't occur to C++ people to provide the correct API, Bjarne Stroustrup claims the only reason to use a reservation API is to prevent reference and iterator invalidation. -shrug- Do you mean something like vector::reserve_at_least()? I suppose that, if you don’t care about performance, you might not need it. FWIW, I find myself mostly using reserve in cases where I know what I in…

I'm not familiar with vector::reserve_at_least but assuming that's an API which reserves capacity without destroying the amortized constant time of the exponential growth built in to the type, yes, that.

Re: 21st Century C++

#252

I was an extreme C++ bigot back in the late 90's, early 2000's. My license plate back then was CPPHACKR[1]. But industry trends and other things took my career in the direction of favoring Java, and I've spent most of the last 20+ years thinking of myself as mainly a "Java guy". But I keep buying new C++ books and I always install the C++ tooling on any new box I build. I tell myself that "one day" I'm going to inves…

Funny, sounds like the Simpsons gag from the same time period: “what’s wrong with this country? Can’t a man walk down the street without being offered a job?” https://youtube.com/watch?v=yDbvVFffWV4

Interesting. I was SO into the Simpsons at one time, but somehow I'd never seen that episode (as best as I can remember anyway). Now I feel the urge to go back and rewatch every episode of the Simpsons from the beginning. It would be fun, but man, what a time sink. I started the same thing with South Park a while back and stalled out somewhere around Season 5. I'd like to get back to it, but time... time is always against us.

Re: 21st Century C++

#253

I was an extreme C++ bigot back in the late 90's, early 2000's. My license plate back then was CPPHACKR[1]. But industry trends and other things took my career in the direction of favoring Java, and I've spent most of the last 20+ years thinking of myself as mainly a "Java guy". But I keep buying new C++ books and I always install the C++ tooling on any new box I build. I tell myself that "one day" I'm going to inves…

Note to the above: I am wrong. My license plate back then was C++HACKR, with the actual "+" signs. NC license plates do allow that, although while the +'s are on the tag, they don't show up on your registration card or in the DMV computer system.

I mixed up the tag and my old domain name, which was "cpphacker.co.uk" (and later, just cpphacker.com/org).

Re: 21st Century C++

#254
post #141

Earlier quoted context omitted.

Yeah, the issue is more that the perceived complexity means I’m less interested in investing time to catch it all back up

If you already used C++20 you aren't meaningfully behind, very little of interest has been introduced since then, and much of it isn't usable yet because of implementation issues.

I’ve touched on some of c++20, but haven’t used it extensively.

Specifically here are areas I haven’t used that appear to have nontrivial amounts of complexity, footguns, syntax and other things to be aware of:

* Ranges * Modules * Concepts * Coroutines

Each of these is a large enough topic that it will involve time and effort to reach an equivalent level of competence and understanding that I have with other areas of c++.

I don’t mind investing time learning new things but with commentary around the web (and even this thread) calling the implementation and syntax a hot mess, at some point it’s a better investment to put that learning in to a language without all the same baggage.

I really wish c++ had gone with breaking change epochs for c++20.

Re: 21st Century C++

#255

Earlier quoted context omitted.

Unfortunately, Rust is significantly less expressive than C++ and therefore is unlikely to replace it for high-performance systems code. As much as I don’t like C++, it is very powerful as a tool. The ability to express difficult low-level systems constructs and optimizations concisely and safely in the language are its killer feature. Once you know how to use it, other languages feel hobbled.

C++ doesn't allow you to express low level systems constructs concisely and safely though. You usually get neither. Look at the first example in the article, where the increment can overflow and cause UB despite that overflow having completely defined semantics at the hardware level. Fixing it requires either a custom addition function or C++26, another include, and add_sat(). I wouldn't consider either concise in a…

In Rust you get panic instead. You need to wrapping add which is a separate function

Re: 21st Century C++

#256

Earlier quoted context omitted.

Funny, sounds like the Simpsons gag from the same time period: “what’s wrong with this country? Can’t a man walk down the street without being offered a job?” https://youtube.com/watch?v=yDbvVFffWV4

Interesting. I was SO into the Simpsons at one time, but somehow I'd never seen that episode (as best as I can remember anyway). Now I feel the urge to go back and rewatch every episode of the Simpsons from the beginning. It would be fun, but man, what a time sink. I started the same thing with South Park a while back and stalled out somewhere around Season 5. I'd like to get back to it, but time... time is always ag…

That episode is by far my #1 favorite. Season 8 Episode 2, “You Only Move Twice”, during the period considered by most to be the peak of the Simpsons show quality, and IMO the best episode of the season.

Cypress Creek was intended to be a reference to Silicon Valley and the tech companies there of the time, and it’s got some of the best comedy in the season (Hank Scorpio is the best one-off character ever in the show IMO.)

Re: 21st Century C++

#257
post #133

Earlier quoted context omitted.

I just wish they hadn't repurposed the old "auto" keyword from C and had used a new keyword like "var" or "let". #define var auto #define let auto

If we're going that route, how about #define var auto #define let const auto ?

I was thinking of having one or the other, but let as the const form is appealing. ;-)

Re: 21st Century C++

#258

Earlier quoted context omitted.

The top memory safety bugs in shipped code for C and C++ are out of bounds array indexing.

Are you sure? I generally see more use-after-free and other lifetime issues.

Every survey I've seen corroborated it.

Re: 21st Century C++

#259
post #249

Earlier quoted context omitted.

> For std::vector it apparently just didn't occur to C++ people to provide the correct API, Bjarne Stroustrup claims the only reason to use a reservation API is to prevent reference and iterator invalidation. -shrug- Do you mean something like vector::reserve_at_least()? I suppose that, if you don’t care about performance, you might not need it. FWIW, I find myself mostly using reserve in cases where I know what I in…

I'm not familiar with vector::reserve_at_least but assuming that's an API which reserves capacity without destroying the amortized constant time of the exponential growth built in to the type, yes, that.

Oh, sorry, that’s an API that doesn’t exist. I was trying to understand what feature you wanted that didn’t exist.

Re: 21st Century C++

#260
post #58

Earlier quoted context omitted.

The collect_lines example won't even compile, it's not valid C++, but there's undefined behavior in one of the examples? I'm very surprised and would like to know what it is, that would be truly shocking.

Really? If you've worked with C++ it shouldn't be shocking. The first example uses the int type. This is a signed integer type and in practice today it will usually be the 32-bit signed integer Rust calls i32 because that's cheap on almost any hardware you'd actually use for general purpose software. In C++ this type has Undefined Behaviour if allowed to overflow. For the 32-bit signed integer that will happen once w…

Bizarre nitpicking - would you rather he used an unbounded integer?
Post reply on HN