At work, we started the c++ migration to rust doing the following:
- Identify "subsystems" in the c++ code base
- Identify the ingress/egress data flows into this subsystem
- Replace those ingress/engress interfaces with grpc for data/event sharing (we have yet to profile the performance impact of passing an object over grpc, do work on it, then pass it back)
- Start a rewrite of the subsystem. from c++ to rust
- Swap out the two subsystems and reattach at the grpc interfaces
- Profit in that now our code is memory safe AND decoupled
The challenge here is identifying the subsystems. If the codebase didn't have distinct boundaries for subsystems, rewrite becomes much more difficult