Email or username:

Password:

Forgot your password?
Top-level
Björkus "No time_t to Die" Dorkus

Incidentally, this is one of the central points of the Go article that keeps getting posted to HN and causing a flamewar each and every time from
@fasterthanlime; Go reduces complexity and makes things "simple" by just making it your/someone else's problem.

And it's absolutely not any better in terms of workability or final product.

8 comments
Björkus "No time_t to Die" Dorkus

@fasterthanlime Ostensibly, this is also one of C's chief issues. It's not simple; it just took the hard bits and says

"Go Fuck Yourself"

every time you want to try to address them in any meaningful fashion. We've fixed some of that in recent versions, but like... it's a running theme that we either just paper over complexity, or -- in the worst case -- shove all that complexity raw into the user's hands and tell them to figure it the hell out themselves. And it's brutal and often not helpful because a lot of that complexity comes from implementation-defined or undefined/unspecified characteristics that are under-documented or not at all documented.

@fasterthanlime Ostensibly, this is also one of C's chief issues. It's not simple; it just took the hard bits and says

"Go Fuck Yourself"

every time you want to try to address them in any meaningful fashion. We've fixed some of that in recent versions, but like... it's a running theme that we either just paper over complexity, or -- in the worst case -- shove all that complexity raw into the user's hands and tell them to figure it the hell out themselves. And it's brutal and often not helpful because...

jubilee

@thephd @fasterthanlime
I'm having fun lately discussing things that C and C++ and LLVM never even fucking tried to handle in a consistent way but we're probably going to have to because we don't want to just gloss over things that matter in, say

proofs of soundness of concurrent operations?

the C++ memory model is effectively incomplete when held up against things programmers actually write.

Dani (:cxx: modules addict)

@jubilee @thephd @fasterthanlime For dumb people like me: what do you mean with "incomplete memory model"? Mind to expand on that?

jubilee

@DanielaKEngert @thephd @fasterthanlime there are C/C++ programs that you can write today that have no coherently specified behavior if they involve concurrency. and technically it doesn't matter to the languages... because it only matters due to a "vendor extension".

a very old vendor extension that is used pervasively in high-performance code and effectively either makes the model incoherent when used OR means LLVM is miscompiling vast swathes of code and probably so is every other C compiler for x86.

Dani (:cxx: modules addict)

@jubilee @thephd @fasterthanlime Thanks.
So you're talking about " no coherently specified behavior" and potentially "miscompiling vast swathes of code". I still can't see what exactly you mean, what is missing, how this should be fixed, and how the fix fits into a (hopefully improved) memory model. And why does this affect only x86?
There must be a reason why a vendor extension is just that and not the standard.

Noratrieb

@jubilee @thephd @fasterthanlime even after the C++ memory model was _released_, people didn't realize that nontemporal stores are problematic because they didn't see them on their threads yet

jubilee

@nilstrieb @thephd @fasterthanlime yeah also the CPU had fewer actual write-combining buffers it could be retiring simultaneously.

but the CPUs have gotten more powerful at that sooooooooooo

Martin Uecker

@thephd @fasterthanlime I disagree. Not trying to solve all problems in one place is essential for keeping complexity manageable. So C not doing this is exactly right.

Go Up