this post was submitted on 17 Aug 2026
203 points (89.5% liked)

Technology

87279 readers
4102 users here now

This is a most excellent place for technology news and articles.


Our Rules


  1. Follow the lemmy.world rules.
  2. Only tech related news or articles.
  3. Be excellent to each other!
  4. Mod approved content bots can post up to 10 articles per day.
  5. Threads asking for personal tech support may be deleted.
  6. Politics threads may be removed.
  7. No memes allowed as posts, OK to post as comments.
  8. Only approved bots from the list below, this includes using AI responses and summaries. To ask if your bot can be added please contact a mod.
  9. Check for duplicates before posting, duplicates may be removed
  10. Accounts 7 days and younger will have their posts automatically removed.

Approved Bots


founded 3 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] ryannathans@aussie.zone 82 points 1 day ago* (last edited 1 day ago) (2 children)

C/C++ compilers are non deterministic due to support of super macros that change run to run, non-deterministic optimisation strategies or ordering due to parallelism, and linkers often produce different outputs every time they are run where subtle bugs can cause crashes when addresses don't line up how you expect. And that's without mentioning projects that use a configuration step.

It's actually a big problem in producing reproducible builds for security.

[–] Mondez@lemdro.id 23 points 1 day ago (3 children)

Can't most serious compilers produce reproducible builds these days given the same build environment. I know there has been a drive towards reproducible builds in general for security verification purposes.

[–] MajorasMaskForever@lemmy.world 2 points 8 hours ago

Yeah, but it does take a lot of work to coerce them to do it.

GCC is honestly obnoxious, and you have to do a bunch of unintuitive things to get it. The compile stage needs the built-in RNG seeded, parent file paths stripped, you need to ensure that the date/time macros are not used anywhere, and you need to ensure that all command line flags are passed in the exact same order every time.

I just went through this with GCC16 on a new project.

[–] ieGod@lemmy.zip 1 points 11 hours ago

Not only can they but certified toolchains exist in the safety critical space. Medical, aerospace, nuclear projects, and the like are often required to use and procure such toolchains as part of their validation.

[–] Natanael@infosec.pub 5 points 16 hours ago

Not by default usually but yes, you need to do a lot of work to set all necessary configurations and sometimes provide your own RNG seed for things which insist on random looking values.

[–] piyuv@lemmy.world 14 points 1 day ago (3 children)

I’m not very good with C/C++ so please correct me, isn’t that what’s called a “race condition”? Parallelism can cause non-determinism but not in the same sense LLMs generate non-deterministic output. Compilers are not statistical machines.

[–] ryannathans@aussie.zone 15 points 1 day ago

You don't need parallelism to have a race condition, just not handling an event with expected timing can cause one - like when two keys are pressed within one polling cycle and you depend on one being pressed before the other for some logic like up and right arrow for a diagonal but they register as right and up so the diagonal movement doesn't trigger

Compiler optimisation strategies sometimes use statistical machines and link time optimisation does use random number generators for producing output

[–] Natanael@infosec.pub 1 points 16 hours ago* (last edited 16 hours ago)

You can have single threaded race conditions appear simply from inputs appearing in an unintended ordering. Or on a single core CPU, you can have one task meant to be done first take unusually long time, so the CPU gives time to another thread which finishes first but expected to finish last.

[–] wonderingwanderer@sopuli.xyz 1 points 20 hours ago

From my understanding, which is very limited, race conditions are more an issue with concurrent programming. Parallel computing uses separate processor cores for each task so there's less reliance on stack machines. But I guess each core still shares the memory, so maybe it still happens. Like I said, my understanding is limited. Just use rust.