February 13, 2026

The Determinator vs The Coroutinator

We interfaced single-threaded C++ with multi-threaded Rust

Rust brings the chaos, C++ keeps the peace — commenters unimpressed

TLDR: Antithesis showed how their single-threaded C++ fuzzer speaks to a multi-threaded Rust controller using a language bridge and simple callbacks. Commenters mostly shrugged, calling it old news and asking for C++20 coroutine showdowns, while a few praised the clear path for teams mixing old C++ with new Rust.

Antithesis just showed how they got a single-track C++ bug-hunter talking to a multi-threaded, async Rust brain, all inside their Determinator — a deterministic hypervisor that makes every run behave like tech Groundhog Day. They bridged languages with the cxx tool, turning Rust’s wait-for-it style into C++ callbacks. The crowd? Split between applause and eye-rolls. pjmlp immediately asked for the real fireworks — “C++20 coroutines vs Rust’s async,” while others basically said, “cool, but we’ve seen this movie.” chris_money202 flexed that they’ve already swapped Rust’s many-hands for a single-threaded SystemC setup.

Memes flew about gelato-powered programming after the Rust UnConf origin story, and the name Determinator drew Terminator jokes (“hasta la vista, nondeterminism”). Supporters liked the clear, no-drama path for teams stuck with legacy C++ wanting Rust experiments. Critics wanted less tutorial energy and more battle-scar stories, especially coroutines face-offs and production use. Bottom line: informative, but the comment section demanded spicier sauce — bigger concurrency clashes, fewer training wheels. Several readers asked whether any of this Rust logic ships yet (spoiler: it’s research-only), and teased for benchmarks, crash counts, and real-world war stories. Others appreciated the plain-English walkthrough of syncing a one-track loop with a many-track orchestra: start here, send these inputs, then await the results.

Key Points

  • Antithesis runs tests on a deterministic hypervisor (“Determinator”) that replaces nondeterministic operations with deterministic ones controlled by control signals.
  • The Antithesis fuzzer builds a state tree of control signal bytes and uses a controller to choose start states and inputs.
  • The fuzzer is single-threaded C++ and communicates with controllers via a callback interface: poll_for_inputs and advertise_outputs.
  • Rust-based controllers were added for research; they are multi-threaded and asynchronous and use an await-based interaction pattern.
  • C++/Rust interop is implemented using the Rust cxx crate, establishing an FFI with extern "Rust" and extern "C" definitions to bridge sync C++ and async Rust.

Hottest takes

"how to combine C++20 co-routines with Rust async-await models" — pjmlp
"Combining single-threaded C++ with multi-threaded languages has been a thing for quite some time" — pjmlp
"combined a Rust multi-threaded emulator with single threaded SystemC simulation" — chris_money202
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.