HN user

_cbsz

1,911 karma
Posts15
Comments856
View on HN

you can't trust that your enums have a value inside their interval

If you don't set the underlying type, assigning a value that doesn't match an enumerator via `static_cast` is undefined behavior. See https://en.cppreference.com/w/cpp/language/enum . (Doing weird pointer casting things is also undefined behavior per the strict aliasing rule, though, come to think of it, I'm not sure whether memcpying an out-of-range value into an enum through the "reinterpret_cast to `char*`" loophole is undefined behavior.)

without knowing how the code was built

The article links out to Compiler Explorer (https://godbolt.org/), which shows the exact compiler version and options and lets you play with different ones. It shouldn’t matter which compiler — the standard prohibits optimizing this.

I had hoped that this article wouldn’t require x86 assembly fluency to read; it really is a “port” of my prior article on x86-64 assembly. I wrote it because mobile developers, at least, probably care more about ARM64 than x86-64. Is there anything I can do to make this article similarly approachable to the x86-64 one?

I haven't tried this, don't work for Amazon, and only just found out, but https://aws.amazon.com/ec2/graviton/ says that "Until June 30th 2021, all new and existing AWS customers can try the t4g.micro instances free for up to 750 hours per month". t4g.micro instances are Graviton, which is ARM64. Note that 31 days is only 744 hours. Buyer beware, though: https://aws.amazon.com/ec2/instance-types/ only says the free trial is until March 31, 2021.

[name redacted] writes it

I didn’t write it, I just copied the compiler output from Godbolt so that the article could be read on mobile, where Godbolt’s UI doesn’t work so well and switching tabs back and forth is difficult.

I’d be happy to port the article to ARM64 if there was sufficient demand for that, but I think it’s still fairly niche among developers, right? (Apple, recent Android, niche server environments?)

Are you talking about ARM64 or ARMv7?

Thanks! Fix should deploy momentarily.

This is what I get for duplicating the examples across Godbolt and the post itself. It was originally 3D for no particular reason and I cut it to keep things short.

2^109 nanoseconds is still 150,000 times older than the universe. If you do manage to get a trillion computers, you can now solve the problem in twenty thousand years. It's still intractable.

I think of this attitude as being a stereotype of mathematicians. "I've already proved that a solution must exist; finding it is just drudgery." Perhaps the author would enjoy branching into one of the more theoretical branches of the discipline, like theory of computation, cryptography, or mathematics proper?

-O3

If size is really important, you probably want to try -Os (optimize for size) and -Oz (try harder to optimize for size, including at the expense of CPU) as well.

LTO

If your project gets big enough that -flto results in unacceptable link times, try -flto=thin.

pay will sky rocket

Why do you think that this will entirely fail to incentivize prospective retirees to work for more total years of their lives in order to benefit from increased pay?

Inflation will eat most of your savings

What? This is why investment advice for retirement generally revolves around allocation into stocks and bonds while leaving only an emergency fund plus regular expenses in more liquid assets like savings accounts. Inflation will only eat your savings if you fail to invest. If you want to talk about risk, well, inflation is why a total failure to accept risk is extremely risky!