Rust/C++ Interop Initiative: Progress Update, September 2026
I’m Teor, the Rust Foundation’s Rust/C++ Interop Initiative engineer. The Rust/C++ Interop initiative aims to improve interoperability between Rust and C++, across a wide range of programming use cases. It is only possible due to generous funding by Google.
I’ve been working on a wide range of interop tasks since February, and I’m excited to share some progress updates with the Rust community. So much has happened in the last 6 months, it’s hard to sum it up in a single blog post, but read on for my best attempt!
Problem Space Mapping & Communication
In February, I started work on Rust/C++ interop problem space mapping, collecting detailed interop problems and use cases. This work focuses on defining the problem, and the criteria for useful solutions. It also includes existing or proposed solutions, and related work, to help highlight the remaining solution space.
Since February, we have started tracking 40 interop problems & use cases, with 8 problems analysed in more detail. If we’re missing an interop problem or use case that’s important to you, please open a ticket in the interop initiative GitHub repository. You can find detailed updates for the interop initiative on its Rust Project goals ticket.
Part of my role is also communicating with interop users, tool developers, and compiler developers. At RustWeek and the Rust All Hands in May, I coordinated an interop workshop, and gave a talk and an interview on recent interop work.
Recently, I created a draft interop roadmap, a list of current technical interop tasks, and a list of interop-related Rust Project goals. These draft documents help track current interop work in the Interop Initiative and the wider Rust Project.
Interop Strategy
As part of this work, we have developed a rough, informal strategy for supporting the wider interop ecosystem:
- Prioritising problem statements & use cases by usage, impact, interest, and the effort required to support them
- Using Rust compiler experiments to explore the interop solution space
- Making smaller compiler and tool bug fixes to reduce development friction
- Developing Rust interop crates that can be used by multiple tools, or used directly by developers
This strategy is still in its early stages, but it has already produced some useful outcomes, and many productive language design discussions.
Interop Tool Support
From discussions with interop tool users and authors over the past few months, we’ve learned a lot about how the ecosystem functions, and how different tools interact.
Many interop tools use the Rust compiler (rustc) directly, rather than Rust’s native cargo build tool. But some use cargo for dependency updates, dependency downloads, or other occasional tasks.
The interop ecosystem is diverse, with 3 major tools (Crubit, cxx, Zngur), and many custom solutions, some of which are based on C interop tooling like bindgen.
Because of the investment required to adopt an interop tool, there is a strong degree of commitment to current tooling. But some users are open to switching to solutions that better meet their use case.
As part of the Interop Initiative work, I created a tool support matrix, which shows how each of the major Rust/C++ interop tools supports significant interop use cases. This is a draft living document that will change over time, as new language features or interop problems are added or analysed, and tools add further support.
| Key: | |
|---|---|
| ⛔ | No Support |
| 🔁 | In progress |
| ◓ | Basic or Partial Support |
| ✅ | Good Support |
| ? | Needs Analysis |
| blank | Out of Scope |
The full up-to-date table is available in the interop initiative repository.
More Rust/C++ interop use cases and problem statements are also available in the interop initiative repository, including use cases that all the major interop tools support.
Function Overloading Experiment
Since May, I’ve been working on an experimental implementation of function overloading in Rust, using argument splatting. As part of this experiment, we’ve made multiple changes and bug fixes in the Rust compiler and tools. Currently splat is incomplete, but usable on nightly Rust, and we’re encouraging tool developers and nightly users to experiment with overloading.
Ajay Singh, a Rust Project Outreachy intern, has also created an overloading macro, which makes using splat more ergonomic. We’ve just improved the “missing overload” diagnostics generated by this macro, so users don’t see a long list of “trait not implemented” errors.
You can find the most recent updates for the overloading work on its Rust Project goals ticket.
Upcoming Linker Interop Work
Recently, I’ve started looking into improving linking during interop builds. There’s not much to report yet, but the potential work includes:
- Stabilising foreign linker support (RFC)
- Adding auto-linking support to Rust, which requires platform-specific work
- Improving diagnostics for common (or tricky) interop linker issues, such as missing dependencies, link order, and recursive cross-language dependencies
Connect With Us
If you’re at RustConf next week, join us at an interop session on Wednesday afternoon:
- 2pm – Interop Updates: Open Mic
- 3pm – Next Steps for Rust Function Overloading
- 4pm – Linkers & Interop
You can also join us any time on Zulip in the t-lang/Interop channel.
Watch this space for more interop updates, including improvements in interop linking!